这篇关于内存压缩的 LWN 文章表示内存压缩可以在linux内核中调用
将节点号写入 /proc/sys/vm/compact_node,导致在指定的 NUMA 节点上发生压缩。
我什么时候应该将节点号写入系统条目?我的意思是我应该检测或读取什么,然后将节点写入系统条目?我的标准应该是什么?在写入系统条目之前我应该如何衡量该标准?
(…)另一个是系统在尝试分配高阶页面时失败;在这种情况下,压缩将作为通过直接回收释放页面的更好替代方案运行。在没有显式触发的情况下,压缩算法将保持空闲状态;移动页面会产生成本,如果不需要,最好避免移动页面。
允许系统发生故障是什么意思?以什么方式失败?我怎样才能检测到该故障?失败是否意味着分配更高阶页面的简单请求被拒绝?在这种情况下,压缩算法是自动运行的吗?
我的要求:我想通过了解系统状态和内存碎片来触发内存压缩。我想在实际运行之前确定压缩是否会有帮助。
答案1
大多数时候,内核内部内存分配的大小小于一页,或者只能在虚拟内存中连续,而不是在真实内存中。该论文所说的是,如果高阶页面分配失败(即内核请求多个页面)实内存中连续的)自动触发压缩。这是相当不寻常的,所以它不应该经常发生。
除非您需要内核具有可用的连续页面,并且测量表明这对于您的工作负载来说性能至关重要(或至少相关),最好不要干涉。