gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:42 27 4
gpt4 key购买 nike

我想在执行高性能 Linpack 基准测试时测量双 socket 机器的温度和频率。

我编写了一个 shell 脚本 sensor.sh,我在后台使用 sh sensors.sh & 启动它,然后继续进行基准测试。

for ((;;))
do
awk 'BEGIN{ORS=" ";} $2=="MHz" {print $4} END {print "\n"}' /proc/cpuinfo >> cpuf.dat

awk 'BEGIN{ORS=" ";} {print $1} END {print "\n"}' /sys/devices/platform/coretemp.?/hwmon/hwmon?/temp*_input >> cput.dat
sleep .1
done

我得到了我的输出文件,但是时间戳彼此之间的间隔不是 0.1 秒。我猜系统很忙,shell 脚本进程没有经常执行。 HPL 说它有大约 1100 秒的运行时间,此时我的 temperature.dat 文件生成了大约 4600 个条目。

有没有其他方法可以在执行基准程序时测量温度和频率并将输出存储在 .dat 文件中?

最佳答案

你的脚本效率很低,需要很多单独的进程来获得一些 CPU 时间才能运行下一个 sleep .1 所以是的,系统负载会降低它的运行频率.

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


没有参数的

xargs 默认为 echo,因此它只是一种将空白字符(包括换行符)折叠为空格的低效方法。 (如果你使用 printf '%s\n' foo bar | strace -f xargs 你可以看到它实际上执行 fork + execve /bin/echo 而不是简单地打印像使用 sedtr 那样自行输出。)

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

但这仍然会有一些开销。


您可以编写一个 perl 脚本,从 sensors 进行管道传输,然后关闭/重新打开 /proc/cpuinfo 这将避免进程启动时进行的所有系统调用。

您可以让它检查当前时间并休眠到下一个 0.1 秒的倍数,而不是休眠固定时间。您可以使用 bash 来做到这一点,也一样,但这将需要运行更多的命令,并且您希望为您的基准测试引起尽可能少的上下文切换。


您也可以或改为用当前时间标记每一行,这样您就知道每个样本的来源。要在不需要启动另一个外部进程的情况下执行此操作,请使用 bash 的 $EPOCHREALTIME。像 { echo -n "$EPOCHREALTIME ";哇……; } >> cpuf.dat 如果您仍在使用 bash 而不是 Perl。

关于linux - 在 Linux 上进行基准测试时测量温度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com