Já deve estar familiarizado com cargas e médias da carga (load averages) em sistema Linux. Estes valores podem ser observados com os comandos uptime e top, como se mostra a seguir:
load average: 0.09, 0.05, 0.01
A maioria das pessoas tem uma ideia de qual é o significado destes números: Eles representam as médias da carga observadas em períodos progressivamente mais longos de tempo (média no último um, cinco, e quinze minutos), e quanto menores estes números melhor.
Números grandes representam problemas ou uma máquina a trabalhar acima da sua capacidade e com performances baixas.
Mas qual é o limite? O que se pode considerar BOM e MAU em termos de valor para a carga (load) de uma máquina. Quando é que nos devemos preocupar em relação a valores de carga e, quando é que se torna imperativo lutar por corrigi-los o mais rápido possível.
Primeiro, um pequeno enquadramento sobre o que estes valores significam na realidade. Vamos começar com um caso simples: Uma máquina com um único núcleo de processamento (single-core processor).
Um processador com um único núcleo (single-core) é como uma via de trafego simples. Imagine que é um operador de trafego duma ponte. Por vezes a sua ponte está cheia com uma fila de carros alinhados para a atravessar. Você deve informar os utentes sobre como o trafego se está a comportar na sua ponte. Um bom indicador é, informar quantos carros estão à espera num determinado tempo. Se não houver carros à espera, os condutores, que se aproximam, sabem que podem atravessar sem demoras. Se, pelo contrário, existirem muitos carros à espera, os condutores ficam avisados para demoras.
Vamos agora definir a terminologia do sistema de informação a usar pelo operador da ponte:
0.00 Significa que não há trefego na ponte. De facto, valores entre 0.00 e 1.00 significam que não há carros parados para atravessar a ponte, isto é, qualquer carro que chega à ponte, pode atravessa-la sem demora.
1.00 Significa que se atingiu o ponto máximo de escoamento sem demoras. Este valor não é mau, no entanto, indica-nos que qualquer aumento de trafego irá gerar demoras e atrasos.
Mais que 1.00 significa atrasos. Quanto? bem, depende do valor. 2.00 significa que estão a chegar o dobro dos carros que a ponte tem capacidade de escoar, 3.00 significa que estão a chegar 3 vezes mais carros que a ponte tem capacidade e por aí a diante.
= load of 1.00
= load of 0.50
= load of 1.70
Isto é basicamente o que se passa com a carga de CPU. Os processos são os carros e a CPU é a ponte. Cada processo usa um pedaço de tempo, de CPU ou à espera de usar a CPU. O Unix refere-se a isto como o comprimento da fila de execução: a soma do número de processos que estão a correr no momento mais o número de processos que estão na fila cara serem executados.
Assim, tal como na ponte, a carga de CPU ideal deverá estará abaixo de 1.00. Valores temporários acima de 1.00 podem não ser o fim do mundo, mas se a carga se for tornando consistente acima de 1.00 deve preocupar-se com o assunto.
Como já referido anteriormente, uma carga de CPU de 1.00 indica-nos que estamos no máximo sem perda de performance, no entanto, este valor não tem margem de tolerância. O ideal é apontar para valores de 0.70.
O que acontece com sistemas multiprocessamento?
No caso de sistemas com vários processadores, a carga deve ser vista em relação ao número de processadores disponíveis. 1.00 Indica 100% de utilização para um processador, 2.00 indica 100% de utilização para dois processadores ou dual-core e 4.00 indica 100% de utilização para 4 processadores ou quad-core.
Múltiplos processadores Vs múltiplos núcleos
Em termos de performance, uma máquina com dois processadores é equivalente a outra com um processador com dois núcleos (dual-core)? Sim, analisando as coisas um pouco superficialmente. Existem muitas outras coisas a levar em consideração, mas, apesar desses pontos mais delicados, para fins de dimensionamento até o valor da carga de CPU, o número total de núcleos é o que importa, independentemente do número de processadores físicos esses núcleos estão espalhados.