C++ Linux2.6.18上IPC的延迟测试得出了非常有趣的结果
我正在linux 2.6.18下的unix套接字上进行性能(延迟)测试,C++ Linux2.6.18上IPC的延迟测试得出了非常有趣的结果,c++,c,linux,performance,low-latency,C++,C,Linux,Performance,Low Latency,我正在linux 2.6.18下的unix套接字上进行性能(延迟)测试, 进程a每10ms向进程B写入1024字节,结果显示平均延迟为20us,标准偏差很小(2~3us) 当我与进程A和B同时运行一些额外的CPU限制的进程时,测试变得很有趣,这些新进程对缓存非常友好,例如一个繁忙的简单数学计算循环,但结果让我惊讶,IPC延迟突然下降,平均为15秒 据我所知,为了提高交互性,O(1)调度器(2.6之前的2.6.23)通过一些启发式方法奖励IO绑定进程,但这不能解释为什么速度比第一种情况更快 我还考
进程a每10ms向进程B写入1024字节,结果显示平均延迟为20us,标准偏差很小(2~3us) 当我与进程A和B同时运行一些额外的CPU限制的进程时,测试变得很有趣,这些新进程对缓存非常友好,例如一个繁忙的简单数学计算循环,但结果让我惊讶,IPC延迟突然下降,平均为15秒 据我所知,为了提高交互性,O(1)调度器(2.6之前的2.6.23)通过一些启发式方法奖励IO绑定进程,但这不能解释为什么速度比第一种情况更快 我还考虑过,如果Linux在进程A得到奖励时做一些特殊的忙循环,但似乎没有通过进一步的测试 这真让我困惑
我的配置: CPU:Intel(R)Xeon(R)CPU E5-2609 0@2.40GHz,带10M三级缓存 分子量:32G
操作系统:Linux 2.6.18-308.el5 SMP x86_64我怀疑硬件的某些节能功能正在发挥作用。10毫秒的睡眠时间足以让现代硬件进入低功耗状态。当你在微秒级上观察事物时,有一个真实的、可测量的延迟来脱离省电状态 我猜并行运行“忙碌”程序可以防止硬件进入低功耗状态。要尝试的标准事项:
- 在BIOS级别,禁用任何和所有节能功能,包括C状态
- 在操作系统级别,禁用cpuspeed(或发行版使用的任何频率缩放程序)
- 尝试使用“idle=poll”内核参数引导
- 英特尔空闲。最大空闲状态=0
- processor.max_cstate=0
powertop
,看看在省电状态下花费了多少时间。感谢您的精彩解释。