Notes about NUMA balance技术
本文将mark下NUMA balance技术的相关notes。
Overview

目标
任务访问本节点内存。实现上将其拆分成两个小目标:
- 如果任务访问的大部分内存不在本节点,那么把任务迁移到该节点的CPU上运行;
- 如果任务访问的大部分数据都在本节点,那么将其他节点上的数据迁移到该节点上。
基本原理
numa balance功能的基本实现过程:
- 周期性扫描task的地址空间并且修改页表项为PAGE_NONE(没有读/写/执行权限,但是有对应的物理地址),之后访问该数据时会发生page fault
- 在page fault中,重新修改页表为正确的权限使得后面能够继续执行
- 在page fault中会追踪两个数据: page被哪个节点和任务访问过,任务在各个节点上发生的缺页情况
- 根据历史记录,决定是否迁移页和任务迁移
总体而言需要解决几个问题:
- 扫描尽量不要影响系统正常的性能,因为它会强制触发page fault, 所以必须对扫描周期和一次性扫描的页范围进行限制,特别是扫描周期会根据缺页的历史统计进行动态调整
- 决定是否迁移页
- 决定是否迁移线程到不同的节点上
参考资料: