Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux2.6.18上IPC的延迟测试得出了非常有趣的结果_C++_C_Linux_Performance_Low Latency - Fatal编程技术网

C++ Linux2.6.18上IPC的延迟测试得出了非常有趣的结果

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绑定进程,但这不能解释为什么速度比第一种情况更快 我还考

我正在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绑定进程,但这不能解释为什么速度比第一种情况更快

我还考虑过,如果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”内核参数引导
最后一个建议对于Sandy Bridge CPU(这就是您所拥有的)尤其重要,至少对于RHEL/CentOS 5.x(我猜您正在运行)。我发现Linux内核仍然会覆盖一些BIOS设置。其他Linux内核参数可能会帮助您:

  • 英特尔空闲。最大空闲状态=0
  • processor.max_cstate=0

如果您使用更流行的产品会怎么样?好的,我试着在更流行的Linux上测试它以进行比较。我认为性能提升来自某种空间位置,因为这些进程的工作集不是那么大,所以内核可以一次性“从DRAM”“到缓存”“读/写数据”。也许“动态频率缩放”就是答案,就像Intel®基于需求的切换:“一种电源管理技术,在需要更多处理能力之前,微处理器的外加电压和时钟速度保持在所需的最低水平。这项技术作为Intel SpeedStep®技术引入服务器市场。“运行
powertop
,看看在省电状态下花费了多少时间。感谢您的精彩解释。