Operating system 为什么在cpu核之间调度线程比较昂贵?

Operating system 为什么在cpu核之间调度线程比较昂贵?,operating-system,cpu,cpu-architecture,Operating System,Cpu,Cpu Architecture,有一些文章提到了所谓的核心亲和性,这种技术将线程绑定到一个核心,这将降低在核心之间调度线程的成本。相比之下,我有一个问题。 为什么在内核之间调度线程时,操作系统执行此任务需要更多的时间。您可能误解了所读到的内容。缓慢的不是实际的调度,而是任务移动到新核心时运行较慢,因为新核心上的私有每核心缓存将是冷的 (更糟糕的是,旧内核脏了,需要写回才能读取。) 在大多数操作系统中,与其说任务是“调度到一个核心”,不如说在每个核心上运行的内核获取当前可运行的最高优先级任务,这要受到关联掩码的限制。(这个核心上

有一些文章提到了所谓的核心亲和性,这种技术将线程绑定到一个核心,这将降低在核心之间调度线程的成本。相比之下,我有一个问题。

为什么在内核之间调度线程时,操作系统执行此任务需要更多的时间。

您可能误解了所读到的内容。缓慢的不是实际的调度,而是任务移动到新核心时运行较慢,因为新核心上的私有每核心缓存将是冷的

(更糟糕的是,旧内核脏了,需要写回才能读取。)

在大多数操作系统中,与其说任务是“调度到一个核心”,不如说在每个核心上运行的内核获取当前可运行的最高优先级任务,这要受到关联掩码的限制。(这个核心上的调度器函数只考虑亲和掩码匹配这个核心的任务)

没有单线程主控程序来决定每个内核应该做什么;普通内核中的调度器是一种协作多线程算法


这主要不是内核调度器功能中CPU时间的实际成本,而是任务在新内核上运行较慢

你可能误解了你读到的东西。缓慢的不是实际的调度,而是任务移动到新核心时运行较慢,因为新核心上的私有每核心缓存将是冷的

(更糟糕的是,旧内核脏了,需要写回才能读取。)

在大多数操作系统中,与其说任务是“调度到一个核心”,不如说在每个核心上运行的内核获取当前可运行的最高优先级任务,这要受到关联掩码的限制。(这个核心上的调度器函数只考虑亲和掩码匹配这个核心的任务)

没有单线程主控程序来决定每个内核应该做什么;普通内核中的调度器是一种协作多线程算法


这主要不是内核调度器功能中CPU时间的实际成本,而是任务在新内核上运行较慢

因为某些级别的缓存是每个核心专用的,所以它们在不同的核心上是冷的。(更糟糕的是,旧内核脏了,需要先写回才能读取。)@PeterCordes的问题是指缓存,还是你认为这是指无关联调度的计算成本更高,因为有更多的内核可以调度线程?@JackHumphries:在大多数操作系统中,与其说一个任务被“调度到一个内核”,不如说在每个内核上运行的内核获取当前可运行的最高优先级的任务,这要受到关联掩码的限制。(这个核心上的调度器函数将只考虑亲和掩码匹配这个核心的任务。)我认为OP只是歪曲了文章所说的在内核之间有线程弹跳的成本。在内核的调度程序功能中,这主要不是CPU时间的实际成本,而是任务在新内核上运行得较慢。@PeterCordes明白了。谢谢你,彼得!因为某些级别的缓存是每个核心专用的,所以它们在不同的核心上是冷的。(更糟糕的是,旧内核脏了,需要先写回才能读取。)@PeterCordes的问题是指缓存,还是你认为这是指无关联调度的计算成本更高,因为有更多的内核可以调度线程?@JackHumphries:在大多数操作系统中,与其说一个任务被“调度到一个内核”,不如说在每个内核上运行的内核获取当前可运行的最高优先级的任务,这要受到关联掩码的限制。(这个核心上的调度器函数将只考虑亲和掩码匹配这个核心的任务。)我认为OP只是歪曲了文章所说的在内核之间有线程弹跳的成本。在内核的调度程序功能中,这主要不是CPU时间的实际成本,而是任务在新内核上运行得较慢。@PeterCordes明白了。谢谢你,彼得!