调度器 debugfs

使用 CONFIG_SCHED_DEBUG=y 引导内核将在 /sys/kernel/debug/sched 下提供对特定于调度器的调试文件的访问。 其中一些文件描述如下。

numa_balancing

numa_balancing 目录用于保存控制 NUMA 平衡功能的文件。 如果此功能的系统开销过高,则可以通过 scan_period_min_ms, scan_delay_ms, scan_period_max_ms, scan_size_mb 文件控制内核采样 NUMA 提示错误的速率。

scan_period_min_ms, scan_delay_ms, scan_period_max_ms, scan_size_mb

自动 NUMA 平衡会扫描任务的地址空间并取消映射页面,以检测页面是否放置正确,或者是否应将数据迁移到运行任务的本地内存节点。每个“扫描延迟”任务都会扫描其地址空间中接下来 “扫描大小” 个页面。当到达地址空间的末尾时,扫描器将从头开始重新启动。

“扫描延迟”和“扫描大小”组合决定了扫描速率。当“扫描延迟”减少时,扫描速率增加。每个任务的扫描延迟和扫描速率是自适应的,并且取决于历史行为。如果页面放置正确,则扫描延迟增加,否则扫描延迟减少。“扫描大小”不是自适应的,但是“扫描大小”越大,扫描速率越高。

较高的扫描速率会产生较高的系统开销,因为必须捕获页面错误,并且可能必须迁移数据。但是,扫描速率越高,如果工作负载模式发生变化,任务的内存就越快迁移到本地节点,并最大限度地减少由于远程内存访问而导致的性能影响。这些文件控制扫描延迟的阈值和扫描的页面数。

scan_period_min_ms 是扫描任务虚拟内存的最短时间(以毫秒为单位)。它有效地控制每个任务的最大扫描速率。

scan_delay_ms 是任务最初 fork 时使用的起始“扫描延迟”。

scan_period_max_ms 是扫描任务虚拟内存的最长时间(以毫秒为单位)。它有效地控制每个任务的最小扫描速率。

scan_size_mb 是每次扫描扫描多少兆字节的页面。