Linux 内核“保留”内存

Posted

技术标签:

【中文标题】Linux 内核“保留”内存【英文标题】:Linux Kernel 'Reserved' Memory 【发布时间】:2015-04-28 05:05:47 【问题描述】:

我正在尝试为低内存系统(16MB ram)编译内核(3.14,arm64 arch)。我已经设法关闭了所有我不需要的功能,基本上没有设备,没有 fs,没有模块,没有 ZONE_DMA,一个非常非常基本的内核。

但是,当我启动内核时,我看到了这个:

内存:860K/16384K 可用(789K 内核代码、67K rwdata、56K rodata、64K init、38K bss、15524K 保留)

这个保留的内存是什么?

如何减少这种情况?储备占用了我的大量 RAM,只剩下 860K 可用

提前致谢!

【问题讨论】:

【参考方案1】:

它是满足关键内存分配的最小内存量。将其设置得太低可能会导致系统损坏,设置为高可能会立即 OOM 您的系统。你可以通过写信给/proc/sys/vm/min_free_kbytes来修改这个值。

阅读:

$ cat /proc/sys/vm/min_free_kbytes 
67584

要将其设置为 1024KB (1MB):$ echo 1024 > /proc/sys/vm/min_free_kbytes

【讨论】:

【参考方案2】:

内存:860K/16384K 可用(789K 内核代码、67K rwdata、56K rodata、64K init、38K bss、15524K 保留)

这是process in memory的结构:文本/代码段,数据段(bss,rodata等),堆和堆栈。内核始终驻留在 RAM 中并为其使用保留一些内存空间。但是当 RAM 较小时,它会被内核和用户空间进程共享。

了解更多关于嵌入式 linux 的信息read this post。

【讨论】:

这仍然没有解释内存的“保留”部分的用途以及如何调整它

以上是关于Linux 内核“保留”内存的主要内容,如果未能解决你的问题,请参考以下文章

例说linux内核与应用数据通信:映射设备内核空间到用户态

把握linux内核设计思想(十三):内存管理之进程地址空间

把握linux内核设计思想系列

Linux内核:paging_init时零页分配的作用

内核保留内存防止泄漏的机制_转

为啥说内核在进程地址空间中?