我们希望将服务器上的操作系统从Ubuntu10.04LTS升级到Ubuntu12.04LTS。不幸的是,运行已成为可运行线程的延迟似乎已从2.6内核显著增加到3.2内核。事实上,我们得到的延迟数是难以相信的。
让我更具体地谈谈这次考试。我们有一个有两个线程的程序。第一个线程获取当前时间(使用RDTSC以刻度单位表示),然后每秒钟发送一次条件变量信号。第二个线程等待条件变量,并在发出信号时唤醒它。然后获取当前时间(使用RDTSC以刻度单位表示)。计算第二个线程中的时间与第一个线程中的时间之间的差异,并在控制台上显示。之后,第二个线程再次等待条件变量。因此,我们得到一个线程到线程信号延迟测量每秒一次。
在Linux2.6.32中,这个延迟大约在2.8-3.5us之间,这是合理的。在Linux3.2.0中,这个延迟大约在40-100 us之间。我已经排除了两个主机之间在硬件上的任何差异。它们运行在相同的硬件上(双套接字X5687 {韦斯特米尔-EP}处理器在3.6GHz上运行,超线程、速度步和所有C状态关闭)。我们正在更改关联以在同一套接字的物理核心上运行两个线程(即第一个线程在Core 0上运行,第二个线程在Core 1上运行),因此没有线程在内核上反弹或套接字之间的反弹/通信。
这两台主机之间唯一的区别是,一个是运行内核2.6.32-28 (快速上下文切换框)的Ubuntu10.04LTS,另一个是运行带有内核3.2.0-23 (慢速上下文切换框)的最新Ubuntu12.04LTS。
内核中是否有任何变化,可以解释为什么线程要花多长时间才能运行呢?
发布于 2012-08-24 09:18:21
我不知道为什么会这样,但是如果对您来说这是一个严重的性能倒退,我建议提交一个bug来让内核团队成员来查看它。
https://askubuntu.com/questions/179918
复制相似问题