Когда сервер вдруг начинает тормозить без видимой нагрузки, первый подозреваемый — троттлинг CPU: либо температурный, либо CPU застрял на низком P-state из-за лимита по питанию. top тут не поможет — он видит только проценты занятости, а не реальную частоту. turbostat читает всё это прямо из MSR-регистров процессора: частоту, residency в idle-состояниях, температуру пакета и потребление — без прослойки в виде усреднённых метрик планировщика.

Инструмент идёт в составе linux-cpupower (Debian/Ubuntu) или kernel-tools (RHEL-семейство) — отдельно ставить не нужно, если уже стоит cpupower. Запускается с правами root, потому что читает MSR:

sudo turbostat --interval 5

Без команды в аргументах turbostat печатает статистику каждые 5 секунд бесконечно; если передать команду — он выполнит её и выведет одну сводку по завершении:

sudo turbostat sleep 10

Два поля, на которые стоит смотреть в первую очередь: Avg_MHz — средняя частота с учётом простоя (годится для общей картины), и Bzy_MHz — частота именно во время работы, в состоянии C0. Если Bzy_MHz заметно ниже номинальной частоты процессора под нагрузкой — это и есть признак либо теплового троттлинга, либо упора в лимит по питанию (RAPL). Колонки CPU%c1, CPU%c6 и подобные показывают процент времени в аппаратных idle-состояниях — если ядро почти не доходит до глубоких C-state под нагрузкой, это нормально, а вот залипание в глубоком idle при высокой утилизации — повод смотреть на планировщик или governor.

Для перекрёстной проверки троттлинга есть ещё счётчики ядра в /sys/devices/system/cpu/cpu*/thermal_throttle/core_throttle_count — растущее число там подтверждает то, что turbostat уже показал по PkgTmp и просадке Bzy_MHz.

#linux #perf