Linux 终端中 CPU 负载 + 每核频率?

Linux 终端中 CPU 负载 + 每核频率?

我正在进行科学计算,需要关注每个核心的 CPU 频率和负载(Ubuntu 14.04 上有 2 个核心,带有 Gnome3)。我可以使用以下 bash 脚本查看频率:

echo ""
while true; do
 if [ ! -z $ind ] ; then ind=; else ind="."; fi
 f0=$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq)
 f1=$(sudo cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq)
 printf " CPU MHz: %5i %5i $ind \r" $(($f0/1000)) $(($f1/1000)) 
 sleep 0.5
done 

输出如下所示: CPU MHz: 800 2401

并使用以下命令查看 CPU 当前负载:

glances -1rmnd

我想在同一个终端窗口以紧凑格式获取每个核心的当前负载(例如 %)以及频率。理想情况下它看起来像这样:

CPU MHz: 800 2401 Load: 12% 100%

欢迎任何建议,即使是不同的解决方案或程序。干杯/J

答案1

我在谷歌上搜索并获得一些帮助后找到了一个解决方案。我会发布它以供参考。这是我修改后的 bash 脚本:

while true; do
 load=$(sar -P ALL 1 1 | awk 'NR==5,NR==6 {print $3}' | tr '\n' '\t')
 if [ ! -z $ind ] ; then ind=; else ind="_"; fi
 f0=$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq)
 f1=$(sudo cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq)
 clear
 echo ""
 printf "\t_cpu0_ _cpu1$ind\n"
 printf "MHz:\t%5i  %5i \n" $(($f0/1000)) $(($f1/1000)) 
 printf "Load:\t $load"
done

使用包sar -P ALL 1 1中的sysstat命令可以打印出处理内容。awk选择第 5 行和第 6 行以及第 3 列,同时tr '\n' '\t'将换行符转换为制表符。终端窗口中的输出为:

        _cpu0_ _cpu1_
MHz:     2000   2400 
Load:    3.92   1.00

if 语句中的闪烁光标功能是因为数字在负载下​​可以长时间保持静止。

相关内容