- Em geral, o limite de desempenho de um servidor é avaliado pela % de uso de CPU em ferramentas de monitoramento como
top, mas na prática esse indicador não reflete o desempenho de forma linear
- Em testes com stress-ng em um ambiente com Ryzen 9 5900X, quando o uso estava em 50%, a carga de trabalho real chegava a 60~100%, mostrando uma grande discrepância em relação ao indicador
- As principais causas são hyper-threading e turbo boost, já que o compartilhamento de recursos entre núcleos lógicos e a variação da frequência de clock distorcem a métrica
- Por isso, em vez de usar apenas o uso de CPU, um indicador mais preciso é comparar benchmarks da carga de trabalho realmente processável com a vazão atual
- Interpretar o uso de CPU de forma linear gera grandes erros na estimativa de desempenho, então é necessário um método baseado em benchmark no planejamento do sistema
Incompatibilidade entre o valor de uso de CPU do servidor e a vazão real
- Ao operar um servidor, muita gente quer verificar se ele está perto da utilização máxima
- Em geral, consulta-se o maior valor entre uso de rede, memória e CPU em ferramentas de monitoramento como
top
- Mas, na prática, existe o problema de o valor de uso de CPU e a quantidade de trabalho que pode ser processada não crescerem de forma linear
Ambiente e método de teste
- Experimento baseado em Ubuntu Desktop + Ryzen 9 5900X (12 núcleos/24 threads)
- Precision Boost Overdrive (Turbo) ativado
- Simulação de várias cargas com stress-ng (1~24 workers, 1~100% de uso)
- Métricas medidas: uso de CPU reportado pelo sistema e volume real de cálculo (Bogo ops)
Resumo dos resultados
- Carga geral de CPU: com 50% de uso, vazão real de 60~65%
- Operações inteiras de 64 bits: com 50% de uso, vazão de 65~85%
- Operações de matriz (Matrix math): com 50% de uso, vazão de 80~100%
- Na prática, mesmo quando workers adicionais não contribuem para o desempenho, o uso de CPU continua subindo
Análise das causas
-
Hyper-threading
- Estrutura com 12 núcleos físicos + 12 núcleos lógicos
- Até 12 workers são alocados de forma ideal nos núcleos físicos, mas acima disso há compartilhamento de núcleos lógicos, o que reduz o desempenho
- Especialmente em operações SIMD (operações de matriz), não há ganho de desempenho por falta de recursos compartilháveis
-
Turbo boost
- Em baixa carga, 4.9GHz → em carga total, 4.3GHz, ou seja, queda de 15% no clock
- Isso causa distorção na fórmula de cálculo do uso de CPU (= busy cycles / total cycles)
- Como o denominador (número total de ciclos) diminui, o aumento do uso é superestimado em relação ao trabalho real
Implicações
- Uso de CPU não é um indicador absoluto de desempenho
- Ao dimensionar capacidade de servidor e prever desempenho:
- 1. Medir a vazão máxima com benchmark
- 2. Monitorar a vazão em tempo real
- 3. Comparar os dois valores para avaliar se está perto do limite de desempenho
- Como há grande variação conforme a arquitetura da CPU (AMD vs Intel), a eficiência do hyper-threading e o funcionamento do turbo, é necessária análise por processador
Conclusão
- O uso de CPU é apenas a proporção de ciclos ocupados, e não reflete com precisão o desempenho real de processamento
- Com uso eficiente, mesmo "50% de uso" pode já representar 80~100% do desempenho máximo
- Portanto, monitoramento de desempenho e planejamento de sistema devem se concentrar em vazão de trabalho baseada em benchmark, e não no uso de CPU
Ainda não há comentários.