Comando "top" de Linux: ¿Qué somos nosotros, sy, ni, id, wa, hi, si y st (para uso de CPU)?

195

Cuando publico topen Linux, obtengo un resultado similar a este:

Captura de pantalla de la parte superior

Una de las líneas tiene información de uso de CPU representada así:

Cpu(s): 87.3%us,  1.2%sy,  0.0%ni, 27.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Si bien conozco las definiciones de cada una de ellas (más abajo), no entiendo qué significan exactamente estas tareas.

  • hi - ¿Qué significa dar servicio a las interrupciones de hardware?
  • si - ¿Qué significa dar servicio a las interrupciones de software?
  • st - dicen que es el "tiempo de CPU en espera involuntaria de la CPU virtual mientras el hipervisor está prestando servicio a otro procesador (o)% de tiempo de CPU robado de una máquina virtual".

Pero, ¿qué significa realmente? ¿Alguien puede ser más claro?

Hice una lista de todos us, sy, ni, etc, ya que podría ayudar a otros en busca de la misma. Esta información no está en las páginas del manual.

us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user nice cpu time (or) % CPU time spent on low priority processes
id: idle cpu time (or) % CPU time spent idle
wa: io wait cpu time (or) % CPU time spent in wait (on disk)
hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts
si: software irq (or) % CPU time spent servicing/handling software interrupts
st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
soy yo
fuente

Respuestas:

92

hies el tiempo dedicado a procesar interrupciones de hardware. Las interrupciones de hardware son generadas por dispositivos de hardware (tarjetas de red, controlador de teclado, temporizador externo, sensores de hardware, ...) cuando necesitan señalar algo a la CPU (los datos han llegado, por ejemplo).

Dado que esto puede suceder con mucha frecuencia, y dado que esencialmente bloquean la CPU actual mientras se están ejecutando, los controladores de interrupción de hardware del núcleo están escritos para ser lo más rápidos y simples posible.

Si es necesario realizar un procesamiento largo o complejo, estas tareas se aplazan mediante una llamada de mecanismo softirqs. Estos se programan de forma independiente, pueden ejecutarse en cualquier CPU, incluso pueden ejecutarse simultáneamente (nada de eso es cierto para los controladores de interrupción de hardware).

La parte acerca de los IRQ duros que bloquean la CPU actual, y la parte acerca de softirqspoder ejecutar en cualquier lugar no son exactamente correctos, puede haber limitaciones, y algunos IRQ duros pueden interrumpir a otros.

Como ejemplo, una interrupción de hardware de "datos recibidos" de una tarjeta de red podría simplemente almacenar la información "la tarjeta ethX necesita ser atendida" en algún lugar y programar a softirq. El softirqsería lo que desencadena el enrutamiento de paquetes real.

sirepresenta el tiempo empleado en estos softirqs.

Una buena lectura sobre el softirqmecanismo (con un poco de historia también) es " Voy a hacerlo más tarde" de Matthew Wilcox : Softirqs, Tasklets, mitades inferiores, colas de tareas, colas de trabajo y temporizadores (PDF, 64k).

st, "robar tiempo", solo es relevante en entornos virtualizados. Representa el momento en que la CPU real no estaba disponible para la máquina virtual actual: el hipervisor la "robó" de esa VM (ya sea para ejecutar otra VM o para sus propias necesidades).

El documento de contabilidad de tiempo de CPU de IBM tiene más información sobre el tiempo de robo y la contabilidad de CPU en entornos virtualizados. (Está dirigido al hardware de tipo zSeries, pero la idea general es la misma para la mayoría de las plataformas).

Estera
fuente
muy claro. Entonces, si conecto un nuevo sistema de sonido, auriculares, etc. (cualquier hardware para el caso) también causa una interrupción de hardware, ¿verdad?
its_me
2
Sí, esa podría ser una forma de que su conjunto de chips de sonido indique que "algo sucedió". Pero enchufar un auricular puede ser manejado completamente por el chip de sonido en sí mismo (redirigiendo la salida de sonido de la salida principal a los auriculares, por ejemplo), por lo que podría no generar una interrupción en la CPU principal. Sin embargo, escribir una tecla en su teclado generará interrupciones (desde su dispositivo concentrador USB si tiene un teclado USB). Ver también cat /proc/interrupts(man man procfor doc. Sobre ese archivo).
Mat
15
  • nosotros - Tiempo pasado en el espacio del usuario
  • sy - Tiempo pasado en el espacio del kernel
  • ni: tiempo dedicado a ejecutar procesos de usuario (prioridad definida por el usuario)
  • id: tiempo dedicado a operaciones inactivas
  • wa: tiempo dedicado a esperar en periféricos de E / S (por ejemplo, disco)
  • hola: tiempo dedicado a manejar rutinas de interrupción de hardware. (Cada vez que una unidad periférica quiere atención de la CPU, literalmente tira de una línea para indicarle a la CPU que la repare)
  • si: tiempo dedicado a manejar rutinas de interrupción de software. (un fragmento de código, llama a una rutina de interrupción ...)
  • st: tiempo dedicado a esperas involuntarias por parte de una CPU virtual mientras el hipervisor da servicio a otro procesador (robado de una máquina virtual)
Simon Rigét
fuente
2

El valor "st" puede explicarse simplemente utilizando una instancia T2.micro EC2 de AWS.

En la documentación de AWS puede leer que solo obtiene un 10% de rendimiento de referencia por VCPU. Esto significa que si tiene un proceso que consumiría mucho tiempo de CPU, el valor "st" se mantendrá alrededor de 90 ya que solo se le permite usar el 10% de la VCPU. La suma de los otros valores se mantendrá alrededor de 10.

Por lo tanto, AWS está utilizando el hipervisor para permitirle solo acceder a una cierta cantidad de potencia informática. Te ralentiza intencionalmente, ya que solo estás usando un tipo de instancia de bajo nivel.

Espero que esto haga las cosas un poco más fáciles de entender.

draufunddran
fuente