我有一个c程序进行数字运算 - 没有磁盘访问等。我正在同时运行8核Ubuntu 14.x机器上的不同版本。我想通过将流程绑定到各个核心来优化其性能。
我做了以下事情:
o编辑/ etc / default / grub并将isolcpus = 0,1,2,3,4,5添加到GRUB_CMDLINE_LINUX_DEFAULT
o Ran update-grub
o重新启动
重启后,/ proc / cmdline有新的isolcpus短语
然后我使用命令
运行了一个带有短测试程序(全部相同)的脚本taskset -c 0 tcsh -c '( time ./testx ) > & test_out0 ' &
taskset -c 1 tcsh -c '( time ./testx ) > & test_out1 ' &
taskset -c 2 tcsh -c '( time ./testx ) > & test_out2 ' &
taskset -c 3 tcsh -c '( time ./testx ) > & test_out3 ' &
taskset -c 4 tcsh -c '( time ./testx ) > & test_out4 ' &
taskset -c 5 tcsh -c '( time ./testx ) > & test_out5 ' &
top命令显示进程使用前6个核心,具有接近或100%的预期利用率
我不明白的是,这些程序的运行时间明显不同。 (在某些核心上的进程滞后的事实在top命令显示中也很明显。)无论如何,上述语句生成的连续输出如下所示:
100.824u 0.096s 1:40.80 100.1% 0+0k 0+0io 0pf+0w
101.020u 0.000s 1:40.93 100.0% 0+0k 0+0io 0pf+0w
78.472u 0.000s 1:18.37 100.1% 0+0k 0+0io 0pf+0w
78.628u 0.000s 1:18.52 100.1% 0+0k 0+0io 0pf+0w
100.992u 0.004s 1:40.86 100.1% 0+0k 0+0io 0pf+0w
101.116u 0.000s 1:40.98 100.1% 0+0k 0+0io 0pf+0w
所以,从78.472秒到101.02秒的大范围。如果我再次运行测试,核心的性能与之前的性能相匹配。令人惊讶的是,当我运行程序而不将进程绑定到核心时,平均时间非常接近平均值。
基于将核心绑定到进程,我可能忽略了理解优化的重要一点。我将非常感谢您解决这个问题。
问候,MCY。