19 pontos por GN⁺ 2025-09-04 | Ainda não há comentários. | Compartilhar no WhatsApp
  • 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.

Ainda não há comentários.