Comando “top” do Linux: O que somos nós, sy, ni, id, wa, oi, si e st (para uso da CPU)?

195

Quando emito topno Linux, obtenho um resultado semelhante a este:

Captura de tela do topo

Uma das linhas tem informações de uso da CPU representadas desta forma:

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

Embora conheça as definições de cada uma delas (muito abaixo), não entendo exatamente o que essas tarefas significam.

  • hi - o que significa interrupções no hardware de serviço?
  • si - o que significa interrupção do software de serviço?
  • st - eles dizem que é o "tempo de CPU em espera involuntária pela CPU virtual enquanto o hypervisor está atendendo a outro processador (ou)% de tempo de CPU roubado de uma máquina virtual".

Mas o que isso realmente significa? Alguém pode ser mais claro?

I listados todos us, sy, ni, etc, porque poderia ajudar os outros que procuram o mesmo. Esta informação não está nas páginas do 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
wsou eu
fonte

Respostas:

92

hié o tempo gasto no processamento de interrupções de hardware. Interrupções de hardware são geradas por dispositivos de hardware (placas de rede, controlador de teclado, timer externo, sensores de hardware, ...) quando eles precisam sinalizar algo para a CPU (dados chegaram, por exemplo).

Como isso pode acontecer com muita freqüência e, como eles essencialmente bloqueiam a CPU atual enquanto estão em execução, os manipuladores de interrupção do hardware do kernel são escritos para serem o mais rápido e simples possível.

Se for necessário executar um processamento longo ou complexo, essas tarefas serão adiadas usando uma chamada de mecanismo softirqs. Eles são agendados de forma independente, podem ser executados em qualquer CPU, podem ser executados simultaneamente (nada disso se aplica aos manipuladores de interrupção de hardware).

A parte sobre IRQs rígidos que bloqueiam a CPU atual e a parte sobre softirqsa capacidade de executar em qualquer lugar não são exatamente corretas, pode haver limitações e alguns IRQs rígidos podem interromper outros.

Como exemplo, uma interrupção de hardware "dados recebidos" de uma placa de rede poderia simplesmente armazenar as informações "a placa ethX precisa ser reparada" em algum lugar e agendar a softirq. O softirqque seria a coisa que aciona o encaminhamento do pacote real.

sirepresenta o tempo gasto neles softirqs.

Uma boa leitura sobre o softirqmecanismo (com um pouco de história também) é o de Vou fazer mais tarde, de Matthew Wilcox : Softirqs, Tasklets, Metades inferiores, Filas de tarefas, Filas de trabalho e Timers (PDF, 64k).

st, "tempo de roubo", é relevante apenas em ambientes virtualizados. Representa o tempo em que a CPU real não estava disponível para a máquina virtual atual - foi "roubada" dessa VM pelo hipervisor (para executar outra VM ou para suas próprias necessidades).

O documento de contabilidade de tempo de CPU da IBM possui mais informações sobre tempo de roubo e contabilidade de CPU em ambientes virtualizados. (Ele é destinado ao hardware do tipo zSeries, mas a idéia geral é a mesma para a maioria das plataformas.)

Esteira
fonte
muito claro. Então, se eu conectar um novo sistema de som, fone de ouvido etc. (qualquer hardware), isso também causará uma interrupção no hardware, certo?
its_me
2
Sim, isso poderia ser uma maneira do seu chipset de som sinalizar que "algo aconteceu". Mas conectar um fone de ouvido pode ser tratado inteiramente pelo próprio chip de som (redirecionando a saída de som da saída principal para os fones de ouvido, por exemplo), para que ele não gere uma interrupção na CPU principal. Ao digitar uma tecla no teclado, você poderá gerar interrupções (no dispositivo do hub USB, se você tiver um teclado USB). Veja também cat /proc/interrupts(man man procpara doc. Sobre esse arquivo).
Mat
15
  • us - Tempo gasto no espaço do usuário
  • sy - Tempo gasto no espaço do kernel
  • ni - Tempo gasto na execução de processos do usuário com prioridade (prioridade definida pelo usuário)
  • id - Tempo gasto em operações inativas
  • wa - Tempo gasto em espera em periféricos de E / S (por exemplo, disco)
  • oi - Tempo gasto no gerenciamento de rotinas de interrupção de hardware. (Sempre que uma unidade periférica deseja atenção da CPU, ela literalmente puxa uma linha para sinalizar a CPU para fazer a manutenção)
  • si - Tempo gasto no gerenciamento de rotinas de interrupção de software. (um pedaço de código, chama uma rotina de interrupção ...)
  • st - Tempo gasto em esperas involuntárias pela CPU virtual enquanto o hypervisor está atendendo outro processador (roubado de uma máquina virtual)
Simon Rigét
fonte
2

O valor "st" pode ser simplesmente explicado usando uma instância T2.micro EC2 da AWS.

Na documentação da AWS, você pode ler que obtém apenas um desempenho de linha de base de 10% por VCPU. Isso significa que se você tiver um processo que consumiria muito tempo da CPU, o valor "st" permanecerá em torno de 90, pois você pode usar apenas 10% da VCPU. A soma dos outros valores permanecerá em torno de 10.

Portanto, a AWS está usando o hipervisor para permitir apenas o acesso a uma certa quantidade de poder de computação. Isso diminui a velocidade por intenção, pois você está usando apenas um tipo de instância de nível inferior.

Espero que isso torne as coisas um pouco mais fáceis de entender.

draufunddran
fonte