De onde vem o número
%st em top é a parcela do tempo em que sua CPU virtual estava executável, mas não agendada em um núcleo físico, conforme relatado pelo hipervisor. O contador existe porque um convidado não consegue, de outra forma, distinguir entre um núcleo lento e um núcleo que nunca recebeu.
top -bn1 | head -3
vmstat 1 5
mpstat -P ALL 1 5O valor bruto, para quem quiser plotar por conta própria, é o oitavo campo da linha cpu em /proc/stat, contado em USER_HZ:
grep -w cpu /proc/statPor que é zero aqui
Os núcleos são alocados uma única vez. Uma vCPU na sua instância é fixada a um núcleo físico que não está na alocação de mais ninguém, em um host sem oversubscription, então não há fila para esperar. Não é um número baixo, não é um saldo de créditos que acaba no quarto dia do mês — nada para roubar.
Se o seu não for zero, isso é um defeito e queremos o ticket. Inclua uma execução de mpstat -P ALL 5 12 e o ID da instância.
Por que os números dos outros não são zero
Planos burstable são construídos sobre steal time. Vários convidados compartilham um núcleo, cada um mantém um saldo de créditos, e quando o saldo esvazia, o agendador entrega o núcleo a outra pessoa. Vendido honestamente, é um produto legítimo para cargas de trabalho ociosas. Não é este. Excluímos o nível barato em 2021 e o overselling foi junto.
O que verificar quando a máquina parece lenta mesmo assim
Steal é a primeira coisa que todos olham e raramente é a resposta. Em ordem de probabilidade:
Fila de execução
vmstat 1 5Mais threads executáveis do que núcleos, na coluna r, significa que você simplesmente ficou sem CPU. Nenhuma quantidade de ajuste inventa outro núcleo.
Disco
iostat -x 1 5%iowait subindo enquanto o tempo de usuário permanece baixo aponta para armazenamento, não para o processador.
Seu próprio cgroup
Este é o que pega as pessoas. Um contêiner com cota de CPU parece exatamente steal time de dentro do processo e reporta steal zero, porque o limite é seu e não nosso:
cat /sys/fs/cgroup/cpu.statnr_throttled e throttled_usec subindo significa que a cota definida pelo seu próprio orquestrador é o teto. Aumente ou remova.
Frequência
Os clocks de boost se movem com a carga de trabalho, e um teste de thread única é a forma honesta de ver onde você realmente está:
apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runCompare o número de eventos por segundo com outra instância, em vez de um número do blog de alguém de 2019.
Colunas de convidado e aninhado
%guest e %gnice são diferentes de zero apenas quando você está executando máquinas virtuais dentro da sua instância. Virtualização aninhada está disponível nos planos EPYC maiores e em bare metal; verifique o dispositivo antes de projetar em torno dele:
ls -l /dev/kvmA versão curta
r alto com tempo de usuário perto de cem por cento é a CPU. %iowait alto é o disco. cpu.stat contando throttles é sua própria cota. Steal não zero é nosso, e não deveria acontecer.