我的系统上的“水印”内存预留有多大?

我的系统上的“水印”内存预留有多大?

交换性

该控制用于定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。值 0 指示内核不要启动交换,直到空闲页面和文件支持页面的数量小于高水位线在一个区域中。

--linux-5.0/文档/sysctl/vm.txt

内存可用

估计有多少内存可用于启动新应用程序(无需交换)。根据 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_factorwatermark_scale_factorin进行调整文档/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 的预测

相关内容