Когда VmallocUsed в /proc/meminfo увеличится

Я вижу следующие поля в /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» увеличивается на то, что я выделяю.

Для чего нужны поля «VmallocUsed» и «VmallocChunk» в /proc/meminfo?


person md.jamal    schedule 12.09.2019    source источник


Ответы (1)


Это дубликат https://unix.stackexchange.com/questions/482772/proc-meminfo-says-vmallocused-is-0-so-where-are-my-kernel-modules-stored

Другое дело с вашим кодом:

pr_info("Physical address:%px\t Virtual Address:%llx\n", 
        ptr+4096, virt_to_phys(ptr+(4096*1234)));

Вы не можете использовать virt_to_phys() для выделения памяти, так как она не отображается линейно. Вам нужно будет использовать vmalloc_to_pfn и перевести страницу.

person wwladi    schedule 26.03.2020