Não é tão simples assim. Com um thread ou processo que queima o tanto CPU quanto possível , ele atingirá no máximo 50% da CPU em um sistema de duas CPUs. Ou, alguns sistemas mostrarão como 100% da CPU, porque o máximo é 200% da CPU.
Se você tem dois threads rodando a 50% da CPU de um núcleo (para que eles não maximizem), talvez eles rodarão o mais rápido possível em um único núcleo, mas então você veja 100%. (Isso não leva em conta que a máquina tem outras coisas para fazer e que a comutação de contexto causa sobrecarga.)
Por exemplo, se você tem dois threads que dormem 50% do tempo e calculam os outros 50% do mesmo, uma CPU pode alternar o sono e o cálculo desses dois threads para que 100% da CPU seja usada .
Editar:
Eu pensei em mostrar alguns gráficos de exemplo que ilustram isso.
Este servidor executa 16 processos de alta CPU e algumas centenas de baixa CPU. Em março, decidi atualizá-lo para 8 CPUs / núcleos (daí o salto para 800%), principalmente porque eu tive que rodar um software extra por um tempo, o que você pode ver.
Emgrandepartedemaioajulho,4núcleospoderiamforamsuficientes.Noentanto,seiquealgunsdosmeusprocessos(fazendoprocessamentoemlote)teriamsidoatrasados.
Esteéográficodecargaqueoacompanha:
Ele se correlaciona, mas como você pode ver, não é apenas porcentagem / 100.
Você deseja que esses gráficos sejam capazes de tomar decisões fundamentadas.
Edite 2, sobre seus gráficos:
Interessante. Com o que esses gráficos foram feitos? Ambos representam os dados do jeito oposto ao qual estou acostumado: parece que a utilização da CPU vai para 100% para todos os núcleos no sistema, em vez de 100% por núcleo, como meus gráficos. Você pode testá-lo executando dd if=/dev/urandom of=/dev/null
por algumas horas; Isso fará com que um núcleo seja maximizado e você verá o efeito.
Os gráficos de carga mostram a carga por núcleo . Eu nunca vi isso antes. uptime
, htop
, munin
: todos mostram apenas load .