“释放未使用的内核内存”从何而来?

时间:2019-07-18 13:50:28

标签: linux linux-kernel dmesg

我经常从Freeing unused kernel memory: xxxK (......)中看到dmesg,但是在grep / rg的帮助下,我从内核源代码中找不到此日志。

它来自哪里?

1 个答案:

答案 0 :(得分:2)

该行文本不作为一个完整的字符串存在,因此无法对它进行grep。
init / main.c 中的 free_initmem()调用 free_initmem_default()时,这一切都会滚动。

有问题的行来自 include / linux / mm.h 中的 free_initmem_default()

/*
 * Default method to free all the __init memory into the buddy system.
 * The freed pages will be poisoned with pattern "poison" if it's within
 * range [0, UCHAR_MAX].
 * Return pages freed into the buddy system.
 */
static inline unsigned long free_initmem_default(int poison)
{
    extern char __init_begin[], __init_end[];

    return free_reserved_area(&__init_begin, &__init_end,
                  poison, "unused kernel");
}

其余文本来自 mm / page_alloc.c 中的 free_reserved_area()

unsigned long free_reserved_area(void *start, void *end, int poison, const char *s)
{
    void *pos;
    unsigned long pages = 0;

    ...

    if (pages && s)
        pr_info("Freeing %s memory: %ldK\n",
            s, pages << (PAGE_SHIFT - 10));

    return pages;
}

(v5.2中的代码摘录)