经验法则来比较Linux和Windows上的上下文切换次数

我正在寻找一个粗略的值来比较Windows和Linux之间的上下文切换(假定有相同的硬件和类​​似的负载)。 我发现Windows的时间段长度似乎比Linux(10-120ms比10-200ms)要小,但是信息并不是权威的。

我看不出有什么有用的信息可以从你想要做的事情中收集到,但是你可以通过标准的Win32 API在Windows机器上改变你的时钟分辨率。 系统上需要更高响应时间的不同应用程序(如多媒体应用程序)始终都在执行此操作。 时钟分辨率可能在0.5ms到15.6ms之间。 所以让你的两台机器具有相同的时钟分辨率。

Windows 7默认configuration为在执行另一个调度决策之前让线程运行2个时钟间隔。 (也就是说,是否切换上下文?)Server 2008 R2默认情况下设置为线程调度决策(也称为线程量程)之间的12个时钟间隔。思路是,使用较长的线程量,服务器OS有更好的机会开始和完成客户端请求而不被中断。 (也就是说,更less的上下文切换)。但是,在服务器版本的Windows上,您不会像桌面上那样“活泼”。 (这一般没有人关心。)

这里有一个使用我的Win7电脑的例子。 谷歌浏览器实际上要求1ms的系统时钟分辨率较低。 您可以使用Sysinternals中的clockres.exe来查看当前和基准时钟分辨率,以及powercfg.exe查看哪些应用程序已经改变了您的时钟分辨率。

我的CPU每秒完成3,501,000,000个周期(3.5GHz,),定时器每隔0.001秒触发一次。 每个时钟间隔3501000000 * 0.001 = 3501000个CPU周期。

1量子单元=时钟间隔的1/3(1/3),因此1个量子单元= 1167000个CPU周期。

假设以3.501GHz的速率,每个CPU周期是286皮秒,计算出每个量子单位333.8微秒。 由于我的PCconfiguration为2个时钟间隔的线程量,每个时钟间隔为3个量程单元,这意味着我的PC正在每2毫秒进行一次线程调度决策。

我们甚至不会考虑可变长度的线程量或抢占式调度器(线程在被另一个更高优先级的线程抢占之前不会完成它的量子)。

所以你想比较两个运行完全不同的代码的不同操作系统的上下文切换的实验对我来说还是没有意义的,但是也许这对Windows至less有帮助。