为什么在 cpu 个核心之间安排线程很昂贵?
Why schedule threads between cpu cores expensive?
有一些文章提到了所谓的核心亲和力,这种技术会将线程绑定到核心,从而降低核心之间调度线程的成本。相比之下有我的问题。
为什么操作系统在内核之间调度线程时执行此工作需要更多时间。
您可能误解了您阅读的内容。这不是实际的 调度 缓慢,而是任务在移动到新核心时会 运行 变慢,因为私有的每核心缓存在那个新核心上会很冷。
(更糟糕的是,旧核心上的脏数据需要先回写才能读取。)
在大多数操作系统中,与其说任务是 "scheduled to a core",不如说每个内核上的内核 运行ning 会获取当前 运行 的最高优先级任务 运行启用,受亲和力掩码的限制。 (此核心上的调度程序功能将仅考虑关联掩码与此核心匹配的任务。)
没有单线程主控程序来决定每个核心应该做什么;普通内核中的调度程序是一种协作多线程算法。
这主要不是内核调度程序函数 CPU 时间的实际成本,而是任务 运行 在新内核上变慢了。
有一些文章提到了所谓的核心亲和力,这种技术会将线程绑定到核心,从而降低核心之间调度线程的成本。相比之下有我的问题。
为什么操作系统在内核之间调度线程时执行此工作需要更多时间。
您可能误解了您阅读的内容。这不是实际的 调度 缓慢,而是任务在移动到新核心时会 运行 变慢,因为私有的每核心缓存在那个新核心上会很冷。
(更糟糕的是,旧核心上的脏数据需要先回写才能读取。)
在大多数操作系统中,与其说任务是 "scheduled to a core",不如说每个内核上的内核 运行ning 会获取当前 运行 的最高优先级任务 运行启用,受亲和力掩码的限制。 (此核心上的调度程序功能将仅考虑关联掩码与此核心匹配的任务。)
没有单线程主控程序来决定每个核心应该做什么;普通内核中的调度程序是一种协作多线程算法。
这主要不是内核调度程序函数 CPU 时间的实际成本,而是任务 运行 在新内核上变慢了。