Rob*_*mme 1 linux windows context-switch
我正在寻找一个粗略的值来比较 Windows 和 Linux 之间的上下文切换(假设相同的硬件和类似的负载)。我发现 Windows 的时间片长度范围似乎比 Linux 小(10-120 毫秒与 10-200 毫秒),但该信息不具有权威性。
我看不到从您尝试执行的操作中可以收集到哪些有用的信息,但是您可以通过标准的 Win32 API 更改 Windows 机器上的时钟分辨率。系统上需要更高响应时间的不同应用程序(例如多媒体应用程序)一直在执行此操作。时钟分辨率可能在 0.5ms 到 15.6ms 甚至更高的范围内。所以让你的两台机器有相同的时钟分辨率。
默认情况下,Windows 7 配置为让线程运行 2 个时钟间隔,然后再做出另一个调度决策。(即,我是否切换上下文?)默认情况下,Server 2008 R2 在线程调度决策(也称为线程量子)之间设置了 12 个时钟间隔。这个想法是,线程量子越长,服务器操作系统就有更好的机会开始和完成客户端请求而不被中断。(即,较少的上下文切换。)但是在 Windows 的服务器版本上,您不会获得“快速”的桌面体验。(一般没人关心。)
这是使用我的 Win7 PC 的示例。谷歌浏览器实际上要求 1ms 的较低系统范围时钟分辨率。您可以使用 Sysinternals 的 clockres.exe 查看当前和基本时钟分辨率,并使用 powercfg.exe 查看哪些应用程序更改了您的时钟分辨率。
我的 CPU 每秒完成 3,501,000,000 个周期 (3.5GHz),并且计时器每 0.001 秒触发一次。3501000000 * 0.001 = 每个时钟间隔 3501000 个 CPU 周期。
1 Quantum Unit = 1/3(三分之一)时钟间隔,因此 1 Quantum Unit = 1167000 CPU 周期。
假设在 3.501GHz 的速率下,每个 CPU 周期为 286 皮秒,即每个量子单元为 333.8 微秒。由于我的 PC 配置为 2 个时钟间隔的线程量子,并且每个时钟间隔是 3 个量子单位,这意味着我的 PC 大约每 2 毫秒做出一次线程调度决策。
我们甚至不要进入可变长度线程量程或抢占式调度程序(线程在被另一个更高优先级的线程抢占之前无法完成其量程。)
因此,您想要在运行完全不同的代码集的两个不同操作系统上比较上下文切换的实验对我来说仍然没有意义,但也许这有帮助,至少在 Windows 方面。
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |