Mientras se ejecuta mencoder
con subprocesos = 4 (en una CPU de cuatro núcleos). He notado que htop
no muestra su verdadero uso de CPU, pero top
sí.
Parece que htop solo informa sobre un núcleo . ¿Es esto un error / limitación de htop ? ¿Que esta pasando aqui?
No hay otras entradas para mencoder aparecer en ps
o htop
o top
. Supongo que 100% significa que 1 núcleo está al máximo, pero incluso esto me parece extraño; ¿Qué pasa con los otros núcleos?
Actualización: salida agregada del "Monitor del sistema"
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
Respuestas:
Como usted mismo ha dicho, puede presionar Hpara mostrar hilos de usuario.
Solo para referencia futura (y por diversión), ¡calculemos la utilización de la CPU!
Un poco de historia:
En un sistema operativo moderno, hay un Programador. Su objetivo es garantizar que todos los procesos y sus hilos obtengan una parte justa del tiempo de computación. No entraré demasiado en la programación (es realmente complicado). Pero al final hay algo llamado una cola de ejecución . Aquí es donde todas las instrucciones de todos los procesos se alinean para esperar a que se ejecute su turno.
Cualquier proceso pone sus "tareas" en la cola de ejecución, y una vez que el procesador está listo, las saca y las ejecuta. Cuando un programa se va a dormir, por ejemplo, se elimina de la cola de ejecución y regresa al "final de la línea" una vez que está listo para ejecutarse nuevamente.
La clasificación en esta cola tiene que ver con la prioridad de los procesos (también llamada "buen valor", es decir, un proceso es bueno con los recursos del sistema).
La longitud de la cola determina la carga del sistema. Una carga de 2.5, por ejemplo, significa que hay 2.5 instrucciones para cada instrucción que la CPU puede manejar en tiempo real .
En Linux, por cierto, esta carga se calcula en intervalos de 10 ms (por defecto).
Ahora en los valores de porcentaje de utilización de la CPU:
Imagine que tiene dos relojes, uno se llama
t
y representa el tiempo real . Mide un segundo por cada segundo. El otro reloj que llamamosc
. Solo se ejecuta si hay procesamiento que hacer. Eso significa que solo cuando un proceso calcula algo funciona el reloj. Esto también se llama tiempo de CPU. Todos y cada uno de los procesos en el sistema 'tienen' uno de esos.La utilización del procesador ahora se puede calcular para un solo proceso:
o para todos los procesos:
En una máquina multinúcleo, esto puede resultar en un valor de 3.9, por supuesto, porque la CPU puede calcular cuatro segundos de cálculo por segundo, si se utiliza perfectamente.
Wikipedia proporciona este ejemplo:
Aquí hay un pequeño fragmento de Python que hace esto
En un mundo perfecto, se podría inferir de esto que la carga del sistema es 100 - 66.93 = 33,1%. (Pero en realidad eso estaría mal debido a cosas complejas como la espera de E / S, ineficiencias de programación, etc.)
A diferencia de la carga , estos cálculos siempre darán como resultado un valor entre 0 y el número de procesadores, es decir, entre 0 y 1 o 0 a 100%. Ahora no hay forma de diferenciar entre una máquina que ejecuta tres tareas, que utilizan 100% de CPU, y una máquina que ejecuta un millón de tareas, y apenas realiza trabajo en una sola de ellas, también al 100%. Si, por ejemplo, está tratando de equilibrar un montón de procesos en muchas computadoras, la utilización de la CPU es casi inútil. Cargar es lo que quieres allí.
Ahora, en realidad, hay más de uno de esos relojes de tiempo de procesamiento. Hay uno para esperar en E / S, por ejemplo. Por lo tanto, también podría calcular la utilización de recursos de E / S.
Puede que esto no haya sido útil con respecto a la pregunta original, pero espero que sea interesante. :)
fuente