Откуда берётся число
%st в top — это доля времени, когда ваше виртуальное CPU было готово к выполнению, но не получало физическое ядро, по данным гипервизора. Этот счётчик существует, потому что гостевая система иначе не может отличить медленное ядро от ядра, которое ей просто не досталось.
top -bn1 | head -3
vmstat 1 5
mpstat -P ALL 1 5Исходное значение, для тех, кто строит графики самостоятельно, — это восьмое поле строки cpu в /proc/stat, измеряется в USER_HZ:
grep -w cpu /proc/statПочему здесь оно нулевое
Ядра выделяются один раз. vCPU вашего инстанса привязан к физическому ядру, которое не входит ни в чью чужую аллокацию, на хосте без оверподписки, так что очереди ждать негде. Не маленькое число, не кредитный баланс, который заканчивается на четвёртый день месяца — просто нечего красть.
Если у вас оно не нулевое — это дефект, и мы ждём тикет. Приложите вывод mpstat -P ALL 5 12 и ID инстанса.
Почему у других цифры не нулевые
Burstable-планы построены на steal time. Несколько гостей делят ядро, у каждого свой кредитный баланс, и когда баланс исчерпан, планировщик отдаёт ядро другому. Если продавать честно — это легитимный продукт для нагрузок, которые простаивают. Но это не про нас. Мы удалили дешёвый тариф в 2021 году, и вместе с ним ушёл оверселлинг.
Что проверять, если машина всё равно тормозит
Steal — первое, на что смотрят все, и редко в нём дело. По порядку вероятности:
Очередь выполнения
vmstat 1 5Больше готовых к выполнению потоков, чем ядер, в столбце r, означает, что CPU просто закончился. Никакая настройка не создаст ещё одно ядро.
Диск
iostat -x 1 5%iowait растёт, а user time остаётся низким — это хранилище, а не процессор.
Ваша собственная cgroup
Вот что застаёт людей врасплох. Контейнер с квотой CPU изнутри процесса ощущается точно как steal time, но при этом показывает нулевой steal, потому что ограничение ваше, а не наше:
cat /sys/fs/cgroup/cpu.statnr_throttled и throttled_usec растут — значит, потолок ставит ваша собственная оркестрация. Поднимите его или уберите.
Частота
Boost-частоты зависят от нагрузки, и однопоточный тест — честный способ увидеть, где вы на самом деле находитесь:
apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runСравнивайте число событий в секунду с другим инстансом, а не с числом из чьего-то блога 2019 года.
Гостевые и вложенные столбцы
%guest и %gnice ненулевые только если вы запускаете виртуальные машины внутри инстанса. Вложенная виртуализация доступна на старших планах EPYC и на bare metal; проверьте устройство, прежде чем проектировать под него:
ls -l /dev/kvmКоротко
Высокий r при user time около ста процентов — это CPU. Высокий %iowait — это диск. cpu.stat считает троттлинг — ваша собственная квота. Ненулевой steal — это мы, и так быть не должно.