¿Carga de CPU + frecuencia por núcleo en el terminal de linux?

0

Estoy haciendo computación científica y necesito controlar la frecuencia de cpu y la carga de cada núcleo (hay 2 núcleos, en Ubuntu 14.04 w / Gnome3). Puedo ver la frecuencia con este script 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 

La salida se ve así: CPU MHz: 800 2401

Y ver la carga actual de la CPU con:

glances -1rmnd

Me gustaría obtener la carga actual para cada núcleo (en, por ejemplo,%) junto con la frecuencia en la misma ventana de terminal y un formato compacto. Idealmente se vería así:

CPU MHz: 800 2401 Load: 12% 100%

Cualquier consejo es bienvenido, incluso diferentes soluciones, o programas. Saludos / J

Jonatan Öström
fuente

Respuestas:

0

Bueno, encontré una solución después de googlear y obtener ayuda. Voy a publicar si para referencia. Este es mi script de bash modificado:

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

Utilizando sar -P ALL 1 1 desde el sysstat paquete le da una copia impresa de las cosas de procesamiento. awk selecciona las filas 5 y 6, y la columna 3, mientras tr '\n' '\t' transforma una nueva línea en una pestaña. La salida en una ventana de terminal es:

        _cpu0_ _cpu1_
MHz:     2000   2400 
Load:    3.92   1.00

La función de cursor parpadeante de la sentencia if se debe a que los números pueden ser estáticos durante mucho tiempo bajo carga.

Jonatan Öström
fuente