当/ proc / meminfo中的VmallocUsed增加时

时间:2019-09-12 00:04:05

标签: c linux memory-management linux-kernel proc

我在/ proc / meminfo中看到与vmalloc相关的以下字段。

VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB

因此,我编写了一个基本的内核模块,该模块使用vmalloc分配内存,以查找'VmallocUsed'字段是否更新为我分配的内存。

这是内核模块

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/moduleparam.h>

MODULE_LICENSE("GPL");

static char *ptr;
int alloc_size = 4096*1234;


static int test_hello_init(void)
{
    ptr = vmalloc(alloc_size);
    if(!ptr) {
        /* handle error */
        pr_err("memory allocation failed\n");
        return -ENOMEM;
    } else {
        pr_info("Physical address:%px\t Virtual Address:%llx\n", 
                ptr+4096, virt_to_phys(ptr+(4096*1234)));
    }
    return 0;
}

static void test_hello_exit(void)
{
    vfree(ptr);
    pr_info("Memory freed\n");

}

module_init(test_hello_init);
module_exit(test_hello_exit);

加载模块后,我看不到'VmallocUsed'增加了我分配的值。

/ proc / meminfo中的'VmallocUsed'和'VmallocChunk'字段有什么用途?

1 个答案:

答案 0 :(得分:0)

这是https://unix.stackexchange.com/questions/482772/proc-meminfo-says-vmallocused-is-0-so-where-are-my-kernel-modules-stored

的副本

与您的代码有关的另一件事:

null

您无法通过virt_to_phys()虚拟机分配的内存,因为它不是线性映射的。 您将需要使用vmalloc_to_pfn并翻译页面。