“CPU usage” e “load average”

Usuários novatos do Linux confundem essas duas medidas. Afinal, no Windows, só a primeira é informada no Task Manager… CPU Usage corresponde não ao uso da CPU, mas ao percentual do processamento que não está sendo feito pelo kernel. Ou, melhor, é a medida de quanto o task scheduler não está controlando o chaveamento de tarefas. É por isso que uma aplicação “em loop” costuma causar 100% “de uso” de CPU. O processamento está 100% nas mãos da aplicação, não no scheduler. É claro que isso tem a consequência de tornar o ambiente gráfico menos “responsivo”…

Ao ver a barrinha da CPU no task manager subindo o usuário do Windows deveria pensar: “O Windows não está tendo chance de chavear as tarefas!”, mas nunca pensar: “A CPU tá executando à carga máxima”… Afinal, a CPU sempre está executando à carga máxima… A CPU não pára (a não ser quando algum dispositivo requisite os barramentos para realizar DMA – mas, mesmo isso é pouco frequente, graças aos chipsets — e, não, interrupções e exceções não contam, já que não “interrompem”, de fato, a CPU).

O que o Linux (e, acredito, outras variações do Unix) nos dá, além do percentual de “uso” é a carga média (load average). Essa medida é melhor entendida se usarmos a analogia do trânsito automotivo. Imagine uma avenida com carros enfileirados. Cada carro pode ou não estar funcionando com carga máxima (à máxima velocidade), mas o que interessa mesmo é se o trânsito está fluindo, se não há espera, como no caso de um semáforo…

O “load average” nos diz isso… Se o sistema tiver uma CPU com apenas um core, a carga máxima, sem “enfileiramento” de tarefas, deve ser 1. Com duas CPUs (ou 2 cores), no máximo 2, e assim por diante. Se tivermos apenas uma CPU e o load average for maior que 1, isso significa que existem tarefas numa fila de espera. Há um “congestionamento” de tarefas. A figura abaixo ilustra o ponto:

Os carrinhos azuis são as tarefas... fácil, né?

Repare que se o load average é 1.7, sete tarefas ficam “em espera” quanto as outras 10 estão “fluindo”. No fluxo, quando o load average é 1.0, note que todas as tarefas são executadas e nenhuma é colocada em espera. E, no primeiro caso, existe tempo de sobra para execução de outras tarefas…

Existem 3 medidas de load average. Uma de minuto em minuto, outra de 5 em 5 minutos e ainda outra de 15 em 15 minutos. Os utilitários top e uptime te informarão esses valores:

 $ uptime
 18:43:47 up 2 days,  7:10,  1 user,  load average: 0.78, 0.28, 0.13

No meu exemplo, às 18:43:47, meu sistema está up a 2 dias e 7 horas. e as médias de carga de 1 minuto, 5 minutos e 15 minutos são, respectivamente 0.78, 0.28 e 0.13. Acontece que meu computador é um quad core. Isso significa que minhas avenidas têm 4 vias. A carga máxima de minha CPU poderá chegar até 4 sem “gargalos” no “trânsito” das tarefas.

Um valor ideal, empírico, para um servidor, é manter as médias de carga, no máximo, em torno de 70% do total de CPUs (ou cores). Isso deixa as CPU com 30% de liberadade para executar tarefas do kernel, por exemplo. Meu load average máximo (no quad core) poderia chegar, de forma ideal, até a 2.8.

Anúncios

2 comentários sobre ““CPU usage” e “load average”

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s