在Linux上进行基准测试时测量温度

时间:2019-06-01 16:19:29

标签: linux benchmarking temperature

我想在执行高性能Linpack基准测试时测量两个插口机的温度和频率。

我编写了一个Shell脚本sensor.sh,该脚本以sh sensors.sh &在后​​台开始,然后进行基准测试。

for ((;;))
do
 sensors | grep Core | awk '{print $3}' | tr '+' ' '  | tr '°C' ' ' | xargs >> temperature.dat
 cat /proc/cpuinfo | grep "cpu MHz" | tr "cpu MHz : " " " | xargs >> frequency.dat
 sleep .1
done

我得到了我的输出文件,但是时间戳彼此相隔不了0.1s。我猜系统很忙,而shell脚本进程却很少执行。 HPL表示它的运行时间约为1100秒,这一次我的temperature.dat文件生成了约4600个条目。

执行基准测试程序时,还有另一种方法可以测量温度和频率并将输出存储在.dat文件中吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试以高优先级运行代码,因此它不会受到基准测试负载的影响。但是您需要以root用户身份运行才能使用负面的美感。

nice -n -10 bash
for ((;;))
do
 sensors | grep Core | awk '{print $3}' | tr '+' ' '  | tr '°C' ' ' | xargs >> temperature.dat
 cat /proc/cpuinfo | grep "cpu MHz" | tr "cpu MHz : " " " | xargs >> frequency.dat
 sleep .1
done
exit

答案 1 :(得分:0)

您的脚本效率很低,在运行下一个sleep .1之前,需要很多单独的进程来获取一些CPU时间,因此,是的,系统负载将使其运行频率降低。

此外,sensors相对昂贵;也许使用命令行选项使其仅检查CPU温度。或者我认为可以直接从/proc/sys中的文件获得CPU温度。


我认为没有参数的xargs就像无用的cat一样。

您可以对文本处理使用更高效的命令,这些命令需要更少的CPU时间,并且可以通过更少的单独进程进行管道传输来减少上下文切换。例如sensors仅传送到一个执行所有文本处理的awk命令中。还有sed -n s / cpu MHz:// p {/proc/cpuinfo >> frequency.dat`,以避免不必要地使用cat(和xargs)。

但这仍然会有一些开销。


您可以编写一个perl脚本,该脚本从sensors进行管道传输,然后关闭/重新打开/proc/cpuinfo

您可以让它检查当前时间并一直睡眠直到0.1秒的下一个倍数。您也可以使用bash进行此操作,但是,它可以检查当前时间并保持睡眠状态这将需要运行更多的命令,并且您希望使基准测试的上下文切换尽可能少。