Por que há tão poucos processos “em execução”?

6

Em todos os BSD / Linux / MacOS e Solaris, fiz uma observação - não importa o quão ocupado o sistema seja, top sempre informa muito poucos (geralmente 1-2) processos em execução.

De acordo com meu entendimento limitado, um processo está no estado "em execução" se estiver usando o tempo da CPU ou aguardando que o tempo da CPU esteja disponível.

Então, aqui está um cenário: eu uso o SSH para tunelizar o VNC e, em seguida, executar top na máquina remota, em um emulador de terminal:

  • top em si está listado como um processo "em execução" (compreensível)
  • sshd está listado, mas não "em execução"
  • Xvnc está listado, mas não "em execução"

Mas sshd está tunelando o tráfego VNC, Xvnc é o que me mantém atualizado com o conteúdo da tela, como eles podem não estar usando o tempo da CPU?

Se eles estão usando o tempo de CPU, então como eles não estão "rodando"?

    
por Howard 29.11.2013 / 14:19

2 respostas

6

Eu acredito que esta é uma questão de timing. top verifica o estado da CPU a cada N segundos. No momento em que a verificação é executada, top terá como ativo, pois está ativamente verificando o estado do sistema. Uma boa maneira de ver isso em ação é diminuir o tempo de atualização de top e observar seus processos se movendo! Como sugerido em man top :

   o  The  user  interface,  through  prompts and help, intentionally
      implies that the delay interval is limited to tenths of a  sec‐
      ond.   However,  you're  free to set any desired delay.  If you
      want to see Linux at his scheduling best, try a  delay  of  .09
      seconds or less.

      For this experiment, under x-windows open an xterm and maximize
      it.  Then do the following:
        . provide a scheduling boost and tiny delay via:
            nice -n -10 top -d.09
        . keep sorted column highlighting Off so as to
          minimize path length
        . turn On reverse row highlighting for emphasis
        . try various sort columns (TIME/MEM work well),
          and normal or reverse sorts to bring the most
          active processes into view

      What you'll see is a very busy Linux  doing  what  he's  always
      done  for you, but there was no program available to illustrate
      this.

Se você tentar isso, verá mais processos entrando no modo R . Você também pode tentar executar top no modo em lote algumas vezes e coletar os processos marcados como em execução:

sudo nice -n -10 top -d.09 -bn 100 | awk '$8~/R/{print $NF}' | sort -u

No meu sistema sob sua carga atual (que inclui um túnel ssh aberto) recebo os seguintes processos:

cinnamon
firefox
kworker/0:1
kworker/1:2
kworker/2:2
kworker/3:0
plugin-containe
ssh
tint2
top
Xorg
    
por 29.11.2013 / 14:36
4

A maioria dos processos está esperando que algo aconteça, um pacote vindo da rede, uma E / S de disco para ser concluída, um ser humano digitando em seu teclado ou usando o mouse hoje em dia, com CPUs tão rápidas sendo a norma.

Inicie um processo de computação intensiva, como um processamento de imagem ou filme, e ele será exibido como em execução.

É claro que top , ao analisar os processos, sempre se encontrará em execução por razões óbvias.

Observe que o status exibido não é um valor médio, mas um instantâneo, por isso, até mesmo processos muito mais ocupados do que top podem sempre ser exibidos em repouso por motivos de amostragem.

    
por 29.11.2013 / 14:24