Por que os servidores não funcionam sempre no máximo?

12

Essa é uma pergunta que tem me incomodado há algum tempo, e parece que não consigo encontrar nada online que fale sobre isso. Eu tenho um servidor executando o VMware Hypervisor ESXi. Quando inicializo máquinas virtuais, elas geralmente levam de 2 a 3 minutos para inicializar; Não é um tempo terrivelmente longo, mas não instantâneo. No entanto, quando olho para os logs de desempenho no servidor, nem o uso do processador, RAM ou disco está em torno de 100%; normalmente, eles medem em torno de 60% -80%. Então, se o servidor tem trabalho a fazer, por que ele não faz isso em 100%?

Parece-me que a qualquer momento, o componente que está limitando o desempenho deve ser executado em 100%. Por exemplo, se eu tiver um disco rígido muito lento, ele quase sempre deverá ser executado em 100%. Portanto, pelo menos uma das áreas (processador, RAM, disco e rede) deve estar sempre em 100%, a menos que o servidor esteja totalmente ocioso.

Por que não é esse o caso?

    
por Kernel Stearns 09.01.2017 / 21:11

3 respostas

17

A latência será um dos motivos. O atraso entre "disco me dá esses dados que eu preciso antes que eu possa fazer qualquer outra coisa" e o tempo que os dados retornam deixará a CPU inativa por esse tempo.

Os recursos provavelmente são executados em 100%, mas por períodos muito breves. A 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. Então, quando você vê um disco a 25% em um período de 2 segundos, isso provavelmente significa que ele estava funcionando a 100% por 0,5 segundos e depois ocioso o resto do tempo.

Como o EEAA apontou, sistemas multicore tornam isso um pouco mais complexo. Um software de thread único em uma CPU que pode executar quatro threads só pode atingir 25% em velocidade máxima. Mesmo o software multithreaded raramente atinge 100%, porque os dados precisam fluir (geralmente) do disco rígido para a RAM, para o cache, para a CPU. Manter esse pipeline cheio é difícil e tende a acontecer principalmente com cargas de trabalho previsíveis, como a codificação de vídeo. Nesse caso, o sistema operacional pode observar padrões de leitura e recuperar dados antes de serem necessários, colocando-os em caches apropriados, como o cache de disco na RAM.

    
por 09.01.2017 / 21:23
16

Você está pensando sobre isso de uma forma muito simplista, o que está fazendo com que você faça algumas suposições incorretas, que eu vou tentar esclarecer.

Primeiro, e potencialmente mais simples, em um sistema multicore, para entender o uso da CPU, você deve levar em conta se a carga do processo é multithreaded e se foi projetada para tirar proveito de vários núcleos. Se esse não for o caso, dependendo da combinação de processos em execução, talvez você nunca veja 100% de uso. Ever.

Em segundo lugar, você precisa considerar o desempenho do dispositivo IO. Como o seu sistema sabe, por exemplo, quantos IOps seus dispositivos são capazes? Não faz. Uma métrica mais significativa para você assistir é seu valor iowait durante a inicialização (que pode ser difícil de obter durante o processo de inicialização) ou as filas de disco / latência durante a inicialização (que devem ser mais fáceis de obter do seu hipervisor). Se você vir filas ou um pico de latência, é provável que seus dispositivos de E / S sejam um fator que contribui para seus problemas de desempenho.

    
por 09.01.2017 / 21:27
11

Eu tenho trabalhado com o servidor por cerca de 20 anos, geralmente não é uma coisa boa quando um componente está rodando a 100% o tempo todo.

Por exemplo, digamos que você tenha um banco de dados SQL que não deseja alternar para o disco, mas que deseja executar totalmente sem memória.

Se o seu banco de dados é de 24GB e o sistema operacional precisa de 8GB você não gostaria de alocar apenas 32GB de RAM para a máquina, existem muitas coisas que podem dar errado, código ruim, DDOS, uso pesado de aplicativos, quem sabe, não tendo nenhum head room, como você saberia que o servidor está com problemas?

Nós temos cerca de 2000 servidores em nosso data center, nós gostamos de ver todos eles rodando a 75% da CPU e RAM, o espaço hhd está em nossa SAN, então é uma bola completamente diferente de cera. Também temos alertas para nos dizer quando atingem 85% de CPU ou RAM, e alarmes para nos informar quando atingem 90%.

    
por 10.01.2017 / 17:00