Linux内核引导参数精选(6)

========================
内存
========================

[KNL,BOOT]
highmem=nn[KMG]
强制指定highmem区域的大小,甚至在默认没有highmem的机器上也能工作。这个选项还可以用来在大内存的机器上强制减少highmem区域的大 小。内核使用低于896M的"直接映射物理内存"很方便,但使用大于896M的部分(highmem)却比较麻烦,所以系统在给用户进程分配内存时会优先 使用highmem。对于小于等于 1G 内存的用户来说,则无需关心这个问题。

[HW,IA-32]
hugepages=<NUM>
指定 HugeTLB 页的最大数量,仅在内核启用了CONFIG_HUGETLBFS之后才有效。大多数现代计算机体系结构提供对多页面大小的支持,比如IA-32结构支持 4K和4M(PAE模式为2M)两种页面。因此Linux将物理内存划分成许多固定大小的页面(默认大小为 4k),每个页对应一个page结构,这些结构组成一个mem_map[]数组。TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译缓冲区,这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的TLB资源发挥到极致。特别是能够轻松获得 若干G内存的时候(>4G),这种优化就显得尤为关键。而 HugeTLB 特性则允许将某些页的尺寸增大到 4MB 。用户可以使用mmap系统调用或者标准的SYSv共享内存调用(shmget,shmat)来使用hugepage。可以使用 grep Huge /proc/meminfo 命令查看是否开启了 hugepage 支持。

[KNL]
ihash_entries=<NUM>
内核会在内存中缓存一定数量的inode结构来加速文件访问,每个inode对应一个文件(不同于文件系统中的inode概念),包含文件访问权限/属主 /组/大小/生成时间/访问时间/最后修改时间等信息。这些inode保存在一个哈希表中。这个值用于指定这个哈希表的最大项数。比如 1G 内存推荐为 16384 ,4G 及以上内存推荐 131072 ,但你可以根据自己硬盘上可能被访问的文件数量对默认值进行调整(注意需要考虑哈希值的碰撞)。

[KNL,BOOT]
max_addr=nn[KMG]
内核将忽略在该物理地址以上的内存

[KNL,BOOT]
mem=nn[KMG]
强制指定内核使用多少数量的内存。缺乏远见设计的传统BIOS只能报告最大64MB内存。新的e820规范则突破了这个限制,使得BIOS可以正确报告大 于64MB的内存。如果你在老旧的机器上使用大内存就需要指定这个参数(最保险的做法是在实际内存的总数上减掉1MB)。但有时候e820报告的数量并不 准确,此时就需要使用下面的memmap参数精确指定内存映射(此时就不要使用"mem="了)。

[KNL,IA-32,X86_64]
memmap=exactmap
指定将要使用随后的"memmap=nn@ss"等参数进行精确的E820内存映射。比如对于一个4G内存的机器可能是:"memmap=exactmap memmap=640K@0 memmap=4095M@1M"。

[KNL]
memmap=nn[KMG]@ss[KMG]
强制内核只使用从ss开始的nn长度的特定内存区域。可以多次使用以指定多个区域。

[IA-32,X86-64]
noexec={on|off}
允许(on,默认)或禁止(off)内核将部分内存映射为"不可执行"区域。

[KNL,BUGS]
reserve=nn[KMG]
强制内核忽略(预留)一定量的IO内存区域

[KNL,BOOT]
vmalloc=nn[KMG]
强制指定vmalloc区域的大小。可用于增加vmalloc区域的最小尺寸(x86默认128MB),也可以用于减少vmalloc的大小,增加更多的空间用于直接映射内核RAM。

norandmaps
默认内核随机化程序启动的地址,该选项禁用该功能。该选项等价于"echo 0 > /proc/sys/kernel/randomize_va_space"命令。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpfyx.html