我正在进行科学计算,需要关注每个核心的 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 语句中的闪烁光标功能是因为数字在负载下可以长时间保持静止。