Библиотека — Linux — справочник команд: CPU и планировщик [X]
Шифр
linux-tldr-cpu-scheduler
Разделы
cheatsheet linux tooling
Сверено
2 сентября — в этот день утверждения статьи сверялись с первоисточниками, а не правился текст
Объём
4 344 знака · 11 разделов · чтения около 5 минут

Linux — справочник команд: CPU и планировщик


← Назад к обзору


mpstat

Утилизация по каждому CPU. Первый шаг при диагностике CPU bottleneck.

# Все CPU, каждую секунду
mpstat -P ALL 1

# Только агрегат, 5 итераций
mpstat 1 5

# Статистика прерываний по каждому CPU (/proc/interrupts и /proc/softirqs)
mpstat -P ALL -I ALL 1

Ключевые колонки: %usr (user), %sys (kernel), %iowait (ожидание I/O), %steal (отобрано гипервизором), %idle.


runqlen

eBPF: длина очереди планировщика. Показывает, сколько потоков ждут CPU.

# Гистограмма длины очереди, интервал 1 секунда
runqlen 1

# С разбивкой по CPU
runqlen -C 1

# 10 итераций
runqlen 1 10

Если очередь стабильно > 0, система насыщена по CPU.


offcputime

eBPF: анализ времени, проведённого потоками вне CPU (блокировки, I/O, сон). Комплемент к on-CPU профилированию.

# Off-CPU стеки для всей системы, 5 секунд
offcputime 5

# Только для конкретного PID
offcputime -p 1234 5

# Вывод в формате flame graph
offcputime -f 5 > /tmp/offcpu.stacks
# Далее: flamegraph.pl < /tmp/offcpu.stacks > offcpu.svg

# Минимальный порог — только блокировки > 1 мс
offcputime -m 1000 5

profile

eBPF: семплирование стеков CPU. Основа для flame graphs.

# Профилирование всей системы, 10 секунд
profile 10

# Только для конкретного PID, с частотой 99 Hz
profile -p 1234 -F 99 10

# Вывод в формате folded stacks (для flamegraph.pl)
profile -f 10 > /tmp/cpu.stacks

# Только ядро / только userspace
profile -K 10    # только kernel
profile -U 10    # только user

softirqs / hardirqs

eBPF: время, затраченное на программные и аппаратные прерывания.

# Время в softirq по типу, каждую секунду
softirqs 1

# Распределение (гистограмма) вместо средних
softirqs -d 1

# Аналогично для hardirq
hardirqs 1
hardirqs -d 1

Типичный use-case: высокий %si в mpstat → softirqs покажет, кто виноват (NET_RX, BLOCK, TIMER).


criticalstat

Измерение задержек критических секций ядра (preempt-off, irq-off). Для realtime и latency-sensitive нагрузок.

# Секции с выключенными прерываниями дольше 100 мкс (режим по умолчанию)
criticalstat -d 100

# То же для секций с выключенной вытесняемостью
criticalstat -p -d 100

top / atop / htop

Мониторинг процессов. Разные trade-off: top — встроен везде, htop — удобнее интерактивно, atop — ведёт историю.

# top: сортировка по CPU, batch mode (для скриптов)
top -b -n 1 -o %CPU | head -20

# htop: фильтр по имени процесса (интерактивно — F4)
htop -p $(pgrep -d, nginx)

# atop: ретроспективный анализ из лога
atop -r /var/log/atop/atop_20260227

# atop: запись лога каждые 10 секунд
atop -w /tmp/atop.log 10

ps / pidstat

Снимок процессов и статистика по PID.

# Процессы с наибольшим потреблением CPU
ps aux --sort=-%cpu | head -10

# Детальная статистика по процессу: CPU, memory, I/O, context switches
pidstat -p 1234 -u -r -d -w 1

# Все потоки процесса
pidstat -p 1234 -t 1

# Переключения контекста по всей системе (voluntary + involuntary)
pidstat -w 1

sched_ext 🟢

Подключаемые BPF-планировщики (kernel 6.12+). Позволяют менять алгоритм планирования без перекомпиляции ядра.

# Запуск scx_rusty (NUMA-aware планировщик)
scx_rusty

# scx_lavd — для десктопных нагрузок (latency-optimized)
scx_lavd

# scx_layered — многослойный, с правилами по cgroup/comm
scx_layered file:/etc/scx/layers.json

# Проверить, какой sched_ext активен
cat /sys/kernel/sched_ext/root/ops

scx_stats 🟢

Интроспекция активного sched_ext планировщика.

# Статистика активного планировщика через сервер scx_stats
scx_rusty --monitor 1

# Включён ли sched_ext
cat /sys/kernel/sched_ext/state

# Счётчики событий активного планировщика
cat /sys/kernel/sched_ext/root/events

Причину аварийного выключения печатает сам бинарник планировщика при выходе; тот же отладочный дамп доступен через tracepoint sched_ext_dump и по SysRq-D.


Связанные заметки

Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.

Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.