水线(Watermark)是一种用于内存管理的技术,它通过设置不同级别的内存水印来预测和防止内存不足的情况。以下是一个简化的水线编程示例,主要涉及设置水线参数和计算水线值的过程。
水线参数设置
初始化水线参数
`setup_per_zone_wmarks`:初始化每个zone的水印参数。
`init_per_zone_wmark_min`:设置每个zone的最小水印值。
`setup_per_zone_lowmem_reserve`:设置每个zone的低内存保留值。
水线计算方法
计算最小水印(watermark[min])
`watermark[min] = min_free_pages(min_free_kbyte换算为page单位的数, 每个zone都有一套watermark参数,实际计算结果是根据各个zone的大小所占的总的内存大小的比例来计算的)`
计算低水印(watermark[low])
`watermark[low] = watermark[min] * 5 / 4`
计算高水印(watermark[high])
`watermark[high] = watermark[min] * 3 / 2`
计算每个zone的水印值
`zone->watermark[WMARK_LOW] = min_wmark_pages(zone) + (tmp >> 2)`
`zone->watermark[WMARK_HIGH] = min_wmark_pages(zone) + (tmp >> 1)`
示例代码