База знаний

Steal time, и почему у вас ноль

Steal time — это когда гипервизор признаёт, что другой гость занял ваше ядро; на выделенных ядрах нечего занимать, поэтому полезно знать, что проверять вместо этого.

Откуда берётся число

%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.stat

nr_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 — это мы, и так быть не должно.

Готовы, когда вы готовы

Выберите город. Выберите размер. Оплатите монетой.

Никаких форм о том, кто вы, никакого ожидания одобрения человеком, никаких звонков для проверки. Счёт оплачен — и учётные данные приходят на почту.