有时候,我们需要预留一段内存不受内核直接管理分配,有什么办法?
一、memblock
mmeblock是内存的一种管理机制,主要管理这两种内存:一种是系统可用部分的物理内存(usable),也就是/proc/meminfo里看到的总内存都是提供给系统使用的;另一种是用户预留部分的内存(reserved),用户自己特殊使用,这部分在系统总内存里看不到。
比如从内存顶部预留512M内存:
resv_size = 512*1024*1024;
resv_start = memblock_end_valid(resv_size) - resv_size;
memblock_reserve(resv_start, resv_size);
二、cmdline
Linux内核启动参数cmdline提供了大量的选项,用来设置内核启动的参数和配置。
其中“mem”选项就是用来限制内核可以看到的系统内存的大小.因此通过设置”mem”参数就能实现保留内存。当”mem”参数指定的size小于系统实际可用的物理内存大小时,实际系统内存中出去mem指定的剩下部分就是reserved memory。
例如如果某个系统有64G物理内存,通过添加mem=48G到kernel command line,就能保留最末尾的(64-48)=16G高端内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)