Carregar (computação) - Load (computing)

htop exibindo uma carga de computação significativa (superior direito: Carga média: )

Na computação UNIX , a carga do sistema é uma medida da quantidade de trabalho computacional que um sistema de computador executa. A média de carga representa a carga média do sistema durante um período de tempo. Ele aparece convencionalmente na forma de três números que representam a carga do sistema durante os últimos períodos de um, cinco e quinze minutos.

Cálculo de carga estilo Unix

Todos os sistemas Unix e semelhantes ao Unix geram uma métrica adimensional de três números de "média de carga" no kernel . Os usuários podem consultar facilmente o resultado atual de um shell Unix executando o uptimecomando:

$ uptime
 14:34:03 up 10:43,  4 users,  load average: 0.06, 0.11, 0.09

Os comandos we topmostram os mesmos três números médios de carga, assim como uma variedade de utilitários de interface gráfica do usuário . No Linux , eles também podem ser acessados ​​lendo o /proc/loadavgarquivo.

Um computador ocioso tem um número de carga 0 (o processo ocioso não é contado). Cada processo usando ou esperando pela CPU (a fila pronta ou fila de execução ) aumenta o número de carga em 1. Cada processo que termina diminui em 1. A maioria dos sistemas UNIX conta apenas os processos em execução (na CPU) ou executáveis (esperando pela CPU ) estados . No entanto, o Linux também inclui processos em estados de suspensão ininterrupta (geralmente aguardando atividade do disco ), o que pode levar a resultados marcadamente diferentes se muitos processos permanecerem bloqueados em E / S devido a um sistema de E / S ocupado ou paralisado. Isso, por exemplo, inclui o bloqueio de processos devido a uma falha do servidor NFS ou mídia muito lenta (por exemplo, dispositivos de armazenamento USB 1.x). Tais circunstâncias podem resultar em uma média de carga elevada que não reflete um aumento real no uso da CPU (mas ainda dá uma ideia de quanto tempo os usuários têm que esperar).

Os sistemas calculam a média da carga como a média móvel exponencialmente amortecida / ponderada do número da carga . Os três valores da média de carga referem-se aos últimos um, cinco e quinze minutos de operação do sistema.

Matematicamente falando, todos os três valores sempre calculam a média de toda a carga do sistema desde a inicialização do sistema. Todos eles decaem exponencialmente, mas decaem em velocidades diferentes : decaem exponencialmente em e após 1, 5 e 15 minutos, respectivamente. Assim, a carga média de 1 minuto consiste em 63% (mais precisamente: 1 - 1 / e ) da carga do último minuto e 37% (1 / e ) da carga média desde a partida, excluindo o último minuto. Para as médias de carga de 5 e 15 minutos, a mesma proporção de 63% / 37% é calculada em 5 minutos e 15 minutos, respectivamente. Portanto, não é tecnicamente preciso que a média de carga de 1 minuto inclua apenas os últimos 60 segundos de atividade, pois inclui 37% da atividade do passado, mas é correto afirmar que inclui principalmente o último minuto.

Interpretação

Para sistemas de CPU única que são limitados pela CPU , pode-se pensar na média de carga como uma medida de utilização do sistema durante o respectivo período de tempo. Para sistemas com múltiplas CPUs, deve-se dividir a carga pelo número de processadores para obter uma medida comparável.

Por exemplo, pode-se interpretar uma média de carga de "1,73 0,60 7,98" em um sistema de CPU única como:

  • no último minuto, o sistema ficou sobrecarregado em 73% em média (1,73 processos executáveis, de modo que 0,73 processos tiveram que esperar por uma volta para um único sistema de CPU em média).
  • durante os últimos 5 minutos, a CPU ficou ociosa em média 40% do tempo.
  • durante os últimos 15 minutos, o sistema ficou sobrecarregado em média 698% (7,98 processos executáveis, de modo que 6,98 processos tiveram que esperar por uma volta para um único sistema de CPU em média).

Isso significa que este sistema (CPU, disco, memória, etc.) poderia ter feito todo o trabalho programado para o último minuto se fosse 1,73 vezes mais rápido.

Em um sistema com quatro CPUs, uma carga média de 3,73 indicaria que existiam, em média, 3,73 processos prontos para rodar, e cada um poderia ser escalonado em uma CPU.

Em sistemas UNIX modernos, o tratamento de threading em relação às médias de carga varia. Alguns sistemas tratam threads como processos para fins de cálculo da média de carga: cada thread esperando para ser executado adicionará 1 à carga. No entanto, outros sistemas, especialmente sistemas que implementam o chamado threading M: N , usam estratégias diferentes, como contar o processo exatamente uma vez para fins de carregamento (independentemente do número de threads), ou contar apenas os threads atualmente expostos pelo usuário. agendador de thread para o kernel, que pode depender do nível de simultaneidade definido no processo. O Linux parece contar cada thread separadamente, adicionando 1 à carga.

Carga da CPU vs utilização da CPU

O estudo comparativo de diferentes índices de carga realizado por Ferrari et al. relataram que as informações de carga da CPU com base no comprimento da fila da CPU têm um desempenho muito melhor no balanceamento de carga em comparação com a utilização da CPU. O motivo pelo qual o comprimento da fila da CPU se saiu melhor é provavelmente porque, quando um host está muito carregado, sua utilização da CPU provavelmente fica perto de 100% e não é capaz de refletir o nível de carga exato da utilização. Em contraste, os comprimentos da fila da CPU podem refletir diretamente a quantidade de carga em uma CPU. Por exemplo, dois sistemas, um com 3 e outro com 6 processos na fila, são ambos muito propensos a ter utilizações próximas a 100%, embora sejam obviamente diferentes.

Calculando a carga da CPU

Em sistemas Linux, a média de carga não é calculada em cada tique do relógio, mas orientada por um valor de variável que é baseado na configuração de frequência HZ e testada em cada tique do relógio. Esta configuração define a taxa de tique do relógio do kernel em Hertz (vezes por segundo), e o padrão é 100 para tiques de 10ms. As atividades do kernel usam esse número de ticks para cronometrar-se. Especificamente, a função timer.c :: calc_load (), que calcula a média de carga, executa a cada LOAD_FREQ = (5 * HZ + 1) tiques, ou aproximadamente a cada cinco segundos:

unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks)
{
   unsigned long active_tasks; /* fixed-point */
   static int count = LOAD_FREQ;

   count -= ticks;
   if (count < 0) {
      count += LOAD_FREQ;
      active_tasks = count_active_tasks();
      CALC_LOAD(avenrun[0], EXP_1, active_tasks);
      CALC_LOAD(avenrun[1], EXP_5, active_tasks);
      CALC_LOAD(avenrun[2], EXP_15, active_tasks);
   }
}

A matriz avenrun contém a média de 1 minuto, 5 minutos e 15 minutos. A CALC_LOADmacro e seus valores associados são definidos em sched.h:

#define FSHIFT   11		/* nr of bits of precision */
#define FIXED_1  (1<<FSHIFT)	/* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ+1)	/* 5 sec intervals */
#define EXP_1  1884		/* 1/exp(5sec/1min) as fixed-point */
#define EXP_5  2014		/* 1/exp(5sec/5min) */
#define EXP_15 2037		/* 1/exp(5sec/15min) */

#define CALC_LOAD(load,exp,n) \
   load *= exp; \
   load += n*(FIXED_1-exp); \
   load >>= FSHIFT;

O cálculo "amostrado" de médias de carga é um comportamento um tanto comum; O FreeBSD também atualiza o valor a cada cinco segundos. O intervalo geralmente é considerado não exato, de modo que não coletam processos que estão programados para disparar em um determinado momento.

Uma postagem na lista de discussão do Linux considera seu +1 insuficiente para evitar artefatos Moire dessa coleção e sugere um intervalo de 4,61 segundos. Essa alteração é comum entre os kernels do sistema Android , embora a expressão exata usada presuma um HZ de 100.

Outros comandos de desempenho do sistema

Outros comandos para avaliar o desempenho do sistema incluem:

  • uptime - a confiabilidade do sistema e a média de carga
  • top - para uma visão geral do sistema
  • vmstat - vmstat relata informações sobre processos executáveis ​​ou bloqueados, memória, paginação, bloqueio de E / S, traps e CPU.
  • htop - visualizador de processo interativo
  • dstat, atop - ajuda a correlacionar todos os dados de recursos existentes para processos, memória, paginação, bloco de E / S, traps e atividade da CPU.
  • iftop - visualizador de tráfego de rede interativo por interface
  • nethogs - visualizador de tráfego de rede interativo por processo
  • iotop - visualizador I / O interativo
  • iostat - para estatísticas de I / O de armazenamento
  • netstat - para estatísticas de rede
  • mpstat - para estatísticas de CPU
  • tload - gráfico de média de carga para terminal
  • xload - carregar gráfico de média para X
  • /proc/loadavg - arquivo de texto contendo média de carga

Veja também

links externos

  • Brendan Gregg (8 de agosto de 2017). "Médias de carga do Linux: resolvendo o mistério" . Página visitada em 22 de janeiro de 2018 .
  • Neil J. Gunther . "Média de carga do UNIX - Parte 1: Como funciona" (PDF) . TeamQuest . Página visitada em 12 de agosto de 2009 .
  • Andre Lewis (31 de julho de 2009). "Compreendendo a carga da CPU do Linux - quando você deve se preocupar?" . Retirado em 21 de julho de 2011 . Explicação usando uma analogia de tráfego ilustrada.
  • Ray Walker (1 de dezembro de 2006). "Examinando a média de carga" . Linux Journal . Retirado em 21 de julho de 2011 .
  • Karsten Becker. "Conjunto de ferramentas de monitoramento de carga do Linux OSS" . LoadAvg.

Referências