我正在linux 2.6.18下对unix socket进行性能(延迟)testing,
一个进程A每10 ms写入1024字节到进程B,结果显示平均延迟是20 us,标准偏差小(2〜3 us)。
当我用进程A和B同时运行一些额外的CPU绑定进程时,这个testing变得很有趣,这些新进程非常caching友好,例如繁忙的简单math计算循环,但是结果令我惊讶的是,IPC延迟突然下降,平均成为15美元。
据我所知,为了提高交互性,O(1)调度器(2.6.23之前的2.6)通过一些启发式方法来奖励IO限制的过程,但这不能解释为什么速度比第一种情况更快。
我也曾经考虑过,如果Linux在进程A被奖励时做了一些忙碌循环的特殊情况,但似乎没有经过进一步的testing。
这真让我困惑。
我的configuration:CPU:Intel(R)Xeon(R)CPU E5-2609 0 @ 2.40GHz,带有10M三级cachingMEM:32G操作系统:Linux 2.6.18-308.el5 SMP x86_64
我怀疑硬件的一些省电功能在这里工作。 现代硬件进入低功耗状态10ms的睡眠时间已经足够了。 当你在微秒级别看事物时,有一个真正的,可测量的等待时间来自节能状态。
我的猜测是,并行运行“繁忙”程序可以防止硬件进入低功耗状态。 标准的事情要尝试:
最后一个建议对于Sandy Bridge CPU(这是你所拥有的)来说尤其重要,至少在RHEL / CentOS 5.x(我猜你正在运行)。 我发现Linux内核仍然会覆盖一些BIOS设置。 其他的Linux内核参数可以帮助你: