【发布时间】:2012-12-26 06:58:33
【问题描述】:
操作系统是 RHEL 6 (2.6.32)。我已经隔离了一个核心,并在其上运行了一个计算密集型线程。 /proc/{thread-id}/status 每秒显示一次非自愿上下文切换。
有问题的线程是 SCHED_NORMAL 线程,我不想更改它。
如何减少非自愿上下文切换的次数?这是否取决于 /proc/sys/kernel 中的任何调度参数?
编辑:一些回复建议了替代方法。在走这条路之前,我首先想了解为什么即使在运行数小时后,我每秒也只能获得一次非自愿的上下文切换。例如,这是由 CFS 引起的吗?如果有,有哪些参数以及如何使用?
EDIT2:进一步澄清 - 我想回答的第一个问题如下:为什么我每秒进行一次非自愿上下文切换,而不是说,每半或两次切换一次秒?
【问题讨论】:
-
你为什么要关心?在现代系统中,即使每秒 100 次上下文切换也是噪音。
-
它的金融应用程序的延迟非常高,每个上下文切换可能是一个(或更多)失去的机会。我想了解哪些系统调优参数决定了独立内核上计算密集型线程的非自愿上下文切换率。
-
它很可能在锁、正常磁盘 I/O 或页面错误时阻塞。
-
这些都不是。该速率恰好是运行数小时内每秒一次的非自愿上下文切换。我几乎可以肯定 CFS 正在这样做 - 但基于什么调度参数?
-
就像@DavidSchwartz 所说,如果这是一个问题,你需要一个专用的盒子和一个实时操作系统,而不是一个通用的桌面。由于实现了良好的 I/O 性能,上下文切换几乎总是获得机会。 “每秒一次非自愿上下文切换” - 什么?正如大卫所说,谁在乎呢?优化一些重要的东西......
标签: linux-kernel operating-system scheduling kernel