【发布时间】:2014-03-01 09:37:05
【问题描述】:
我正在 linux 2.6.18 下对 unix socket 进行性能(延迟)测试,
进程 A 每 10 ms 向进程 B 写入 1024 个字节,结果显示平均延迟为 20 us,标准差很小(2~3 us)。
当我与进程 A&B 同时运行一些额外的 CPU 绑定进程时,测试变得很有趣,这些新进程对缓存非常友好,例如简单数学计算的繁忙循环,但结果令我惊讶的是,IPC 延迟突然下降,平均变成15个我们。
据我所知,为了提高交互性,O(1) 调度程序(2.6.23 之前的 2.6)通过一些启发式方法奖励 IO-bound 进程,但这不能解释为什么速度甚至比第一种情况。
我也考虑过,如果Linux在进程A得到奖励的时候做一些busy-loop的特殊情况,但似乎没有进一步测试。
这真的让我很困惑。
我的配置: CPU:Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz,带 10M L3 高速缓存 内存:32G 操作系统:Linux 2.6.18-308.el5 SMP x86_64
【问题讨论】:
-
如果你使用更新的东西呢? kernel.org/finger_banner
-
好的,我尝试在更新的 Linux 上测试它以进行比较。
-
我想性能提升来自某种空间局部性,因为这些进程的工作集不是那么大,所以内核可以读/写数据'从 DRAM'/'到缓存'一枪。
-
也许“动态频率缩放”就是答案,就像英特尔® 按需切换一样:“一种电源管理技术,其中微处理器的施加电压和时钟速度保持在最低必要水平,直到需要更多的处理能力。这项技术是作为英特尔 SpeedStep® 技术引入服务器市场的。”
-
运行
powertop,看看在省电状态下花费了多少时间。
标签: c++ c linux performance low-latency