新的 Linux 内核中的上下文切换速度慢得多

新的 Linux 内核中的上下文切换速度慢得多

我们正在考虑将服务器上的操作系统从 Ubuntu 10.04 LTS 升级到 Ubuntu 12.04 LTS。不幸的是,从 2.6 内核到 3.2 内核,运行已可运行的线程的延迟似乎显著增加。事实上,我们得到的延迟数字令人难以置信。

让我更详细地介绍一下这个测试。我们有一个有两个线程的程序。第一个线程获取当前时间(使用 RDTSC 以刻为单位),然后每秒向条件变量发出一次信号。第二个线程等待条件变量并在收到信号时唤醒。然后它获取当前时间(使用 RDTSC 以刻为单位)。计算第二个线程中的时间与第一个线程中的时间之间的差异并将其显示在控制台上。此后,第二个线程再次等待条件变量。因此,我们得到了每秒一次线程到线程信号延迟测量的结果。

在 Linux 2.6.32 中,此延迟大约为 2.8-3.5 微秒,这是合理的。在 Linux 3.2.0 中,此延迟大约为 40-100 微秒。我已排除两台主机之间的任何硬件差异。它们在相同的硬件上运行(双插槽 X5687 {Westmere-EP} 处理器,运行速度为 3.6 GHz,超线程、speedstep 和所有 C 状态均已关闭)。我们正在更改亲和力以在同一插槽的物理核心上运行两个线程(即,第一个线程在核心 0 上运行,第二个线程在核心 1 上运行),因此核心上的线程不会反弹,插槽之间也不会反弹/通信。

两个主机之间的唯一区别是,一个运行带有内核 2.6.32-28(快速上下文切换框)的 Ubuntu 10.04 LTS,另一个运行带有内核 3.2.0-23(慢速上下文切换框)的最新 Ubuntu 12.04 LTS。

内核中是否有任何变化可以解释线程调度运行时间如此缓慢的原因?

答案1

我一时不知道为什么会这样,但是如果你认为这是一个严重的性能回归,我建议提交一个错误让内核团队成员来查看它。

相关内容