交换性
该控制用于定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。值 0 指示内核不要启动交换,直到空闲页面和文件支持页面的数量小于高水位线在一个区域中。
内存可用
估计有多少内存可用于启动新应用程序(无需交换)。根据 MemFree、SReclaimable、文件 LRU 列表的大小以及低水印在每个区域。该估计考虑到系统需要一些页面缓存才能正常运行,并且由于项目正在使用,并非所有可回收的slab都是可回收的。这些因素的影响因系统而异。
--linux-5.0/文档/文件系统/proc.txt(文件
/proc/meminfo
)。
我的系统上低水位线和高水位线的当前值是多少?它们相对于什么值,例如,如果我想将它们表示为百分比?
答案1
水印是中的low
和值,以页为单位显示(x86 上为 4096 字节)。high
/proc/zoneinfo
在我的 8GB 系统上,大多数页面都分为 DMA32 区域和普通区域。 (一切都属于节点 0,因为它不是NUMA系统)。
# cat /proc/zoneinfo
Node 0, zone DMA
...
pages free 3961
min 33
low 41
high 49
spanned 4095
present 3996
managed 3961
...
Node 0, zone DMA32
pages free 139960
min 7184
low 8980
high 10776
spanned 1044480
present 888973
managed 866327
...
Node 0, zone Normal
pages free 33907
min 31449
low 33868
high 36287
spanned 1173504
present 1173504
managed 1140349
...
水印是 的比例managed
。
一般来说,我的系统上的水印介于 1% 到 3% 之间。
看__setup_per_zone_wmarks()。 (还free_area_init_core(),set_dma_reserve(),以及提交mm:向结构区域引入新字段“management_pages”.)
内核可以动态增加水印(boost_watermark())如果有必要的话。
该行为可通过watermark_boost_factor
和watermark_scale_factor
in进行调整文档/sysctl/vm.txt。比例因子默认为 0.1%,增强因子默认为比例因子的 150%。
在我的系统上,水印主要由min
.每个区域的min
水印按比例设置min_free_kbytes
。内核计算出默认min_free_kbytes
值 67584。相关:解释如何min_free_kbytes
计算该值。
我不知道为什么“普通”区域的最小水印显示为 31449 页 = 125796 KiB!这似乎与源代码相矛盾。到目前为止,我只能认为这是一个错误或硬件故障。看这个问题:我的低水位线和高水位线似乎高于 Documentation/sysctl/vm.txt 的预测