我读到 Linux 有一个 O(1) 调度程序,但这并没有告诉我上下文切换实际上需要多长时间。有人有一些当前的数字吗?
我知道这取决于很多因素,例如 CPU 类型、频率、DRAM 连接性、缓存等等,但我很高兴知道以毫秒、微秒、纳秒为单位的数量级或所需的处理器周期的粗略数量。抢占一个进程,决定运行下一个进程并实际启动它。
答案1
Linux 上的默认调度程序还不是复杂度(1)过去十年的调度程序,它是完全公平调度器,即O(logn)运行队列中的任务数量。您必须在特定系统和工作负载上对您感兴趣的特定场景进行基准测试;人们可以在互联网上找到基准,通常有数字大约 0.5-2 µs 每个上下文切换,即使切换到先前未在 CPU 上调度的任务时也是如此。
正如您所提到的,开销会根据情况而有很大差异,包括各种缓存中的代码和数据的存在。如今,开销还取决于内核版本和配置,特别是取决于哪些安全对策处于活动状态以及 CPU 对它们的支持程度。最近的一篇论文给出了后者的相对数字,与 4.0 基线相比,变化范围为 –14% 到 +98%。