Esta é uma pergunta que me incomoda há um tempo, e não consigo encontrar nada online que fale sobre isso. Eu tenho um servidor executando o VMware Hypervisor ESXi. Quando eu inicializo máquinas virtuais, elas geralmente levam de 2 a 3 minutos para serem inicializadas; não muito tempo, mas não instantâneo. No entanto, quando olho os logs de desempenho no servidor, nem o uso do processador, RAM ou disco é de cerca de 100%; geralmente eles calculam a média entre 60% e 80%. Então, se o servidor tem trabalho a fazer, por que não o faz em 100%?
Parece-me que, a qualquer momento, o componente que limita o desempenho deve ser executado a 100%. Por exemplo, se eu tiver um disco rígido muito lento, ele quase sempre deve correr a 100%. Portanto, pelo menos uma das áreas (processador, RAM, disco e rede) deve sempre estar em 100%, a menos que o servidor esteja completamente ocioso.
Por que não é esse o caso?
fonte
Respostas:
A latência será um dos motivos. O atraso entre "o disco me fornece esses dados necessários antes que eu possa fazer qualquer outra coisa" e o tempo que os dados retornam deixam a CPU ociosa por esse tempo.
Os recursos provavelmente funcionam a 100%, mas por períodos muito breves. Uma inicialização do sistema operacional seguirá o padrão geral de "processar ou decidir algo, buscar algo do disco, fazer algo na memória, fazer algo com um dispositivo", repetindo várias vezes por segundo. Portanto, quando você vê um disco a 25% em um período de 2 segundos, isso provavelmente significa que ele estava rodando a 100% por 0,5 segundos e fica ocioso o resto do tempo.
Conforme apontado pela EEAA, os sistemas multicore tornam isso um pouco mais complexo. Um único software de thread em uma CPU que pode executar quatro threads pode atingir apenas 25% em execução na velocidade máxima. Mesmo o software multithread raramente pode atingir 100%, porque os dados precisam fluir (geralmente) do disco rígido, para a RAM, para o cache e a CPU. Manter esse pipeline cheio é difícil e costuma ocorrer principalmente com cargas de trabalho previsíveis, como codificação de vídeo. Nesse caso, o sistema operacional pode observar padrões de leitura e recuperar dados antes que sejam necessários, colocando-os em caches apropriados, como o cache de disco na RAM.
fonte
Você está pensando nisso de uma maneira muito simplista, o que está fazendo com que você faça algumas suposições incorretas, que tentarei esclarecer.
Primeiro, e potencialmente de maneira mais simples, em um sistema multicore, para entender o uso da CPU, é necessário levar em consideração se a carga do processo é multithread ou não e foi projetada para tirar proveito de vários núcleos. Se não for esse o caso, dependendo da combinação de processos em execução, talvez você nunca veja 100% de uso. Sempre.
Segundo, você precisa considerar o desempenho do dispositivo IO. Como seu sistema sabe, por exemplo, quantas IOps seus dispositivos são capazes? Não faz. Uma métrica mais significativa para você observar é o seu
iowait
valor durante a inicialização (que pode ser difícil de obter durante o processo de inicialização) ou as filas / latência do disco durante a inicialização (que deve ser mais fácil de obter com o hipervisor). Se houver filas ou aumento de latência, é provável que seus dispositivos de E / S sejam um fator que contribui para seus problemas de desempenho.fonte
Trabalho com servidor há cerca de 20 anos. Geralmente, não é uma coisa boa quando um componente está sendo executado a 100% o tempo todo.
Por exemplo, digamos que você tenha um banco de dados SQL que não deseja trocar para o disco, mas que deseja ficar totalmente sem memória.
Se seu banco de dados tem 24 GB e o sistema operacional precisa de 8 GB, você não deseja alocar apenas 32 GB de RAM para a máquina, existem muitas "coisas" que podem dar errado, código incorreto, DDOS, uso intenso de aplicativos, quem sabe, não tendo espaço para a cabeça, como você saberia que o servidor está com problemas?
Temos cerca de 2000 servidores em nosso data center, gostamos de vê-los todos rodando a cerca de 75% da CPU e da RAM, o espaço hhd está em nossa SAN, de modo que é uma bola de cera completamente diferente. Também temos alertas para nos dizer quando atingem 85% da CPU ou RAM e alarmes para nos dizer quando atingem 90%.
fonte