了解/ proc / sys / vm / lowmem_reserve_ratio

通过阅读Documentation / sysctl / vm.txt中的解释,我无法理解variables“lowmem_reserve_ratio”的含义。 我也试图谷歌它,但所有的解释发现是完全相同的目前在vm.txt。

如果sb解释它或者提到一些关于它的链接,这将是非常有帮助的。 原来的解释是:

The lowmem_reserve_ratio is an array. You can see them by reading this file. - % cat /proc/sys/vm/lowmem_reserve_ratio 256 256 32 - Note: # of this elements is one fewer than number of zones. Because the highest zone's value is not necessary for following calculation. But, these values are not used directly. The kernel calculates # of protection pages for each zones from them. These are shown as array of protection pages in /proc/zoneinfo like followings. (This is an example of x86-64 box). Each zone has an array of protection pages like this. - Node 0, zone DMA pages free 1355 min 3 low 3 high 4 : : numa_other 0 protection: (0, 2004, 2004, 2004) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pagesets cpu: 0 pcp: 0 : - These protections are added to score to judge whether this zone should be used for page allocation or should be reclaimed. In this example, if normal pages (index=2) are required to this DMA zone and watermark[WMARK_HIGH] is used for watermark, the kernel judges this zone should not be used because pages_free(1355) is smaller than watermark + protection[2] (4 + 2004 = 2008). If this protection value is 0, this zone would be used for normal page requirement. If requirement is DMA zone(index=0), protection[0] (=0) is used. zone[i]'s protection[j] is calculated by following expression. (i < j): zone[i]->protection[j] = (total sums of present_pages from zone[i+1] to zone[j] on the node) / lowmem_reserve_ratio[i]; (i = j): (should not be protected. = 0; (i > j): (not necessary, but looks 0) The default values of lowmem_reserve_ratio[i] are 256 (if zone[i] means DMA or DMA32 zone) 32 (others). As above expression, they are reciprocal number of ratio. 256 means 1/256. # of protection pages becomes about "0.39%" of total present pages of higher zones on the node. If you would like to protect more pages, smaller values are effective. The minimum value is 1 (1/1 -> 100%). 

和你有同样的问题,我搜索了很多,并且偶然发现这个页面可能(或者可能不)比内核文档更容易理解。

(我不在这里引用,因为这将是不可读的)

我发现那个文件的措词也很混乱。 在mm/page_alloc.c源代码有助于清除它,所以让我试试更简单的解释:

正如你所引用的页面所说,这些数字是“比例的倒数”。 不同的方式:这些数字是除数。 因此,在计算节点中给定区域的保留页面时,将该节点中的页面总和取为高于该节点的区域,并将其除以所提供的除数,即为该区域预留了多少页面。

例如:我们假设一个1 GiB节点,其中区域Normal为768 MiB,区域HighMem为256 MiB(假设没有区域DMA)。 假设默认的highmem保留“比率”(除数)为32.并假设典型的4 KiB页面大小。 现在我们可以计算区域Normal的保留区域:

  1. (比如高级):256 MiB =(1024 KiB / 1 MiB)*(1 page / 4 KiB)= 65536页
  2. 在区域中保留的区域对于该节点正常:65536页/ 32 = 2048页= 8 MiB。

添加更多区域和节点时,概念保持不变。 只要记住保留的大小是在页面中—你永远不会保留页面的一小部分。