---
tags: [linux, cheatsheet, tooling]
verified: 2026-09-02
---

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

[← Назад к обзору](./linux-perf-tools.md)

---

## mpstat

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

```bash
# Все 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.

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

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

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

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

---

## offcputime

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

```bash
# 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.

```bash
# Профилирование всей системы, 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: время, затраченное на программные и аппаратные прерывания.

```bash
# Время в 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 нагрузок.

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

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

---

## top / atop / htop

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

```bash
# 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.

```bash
# Процессы с наибольшим потреблением 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+). Позволяют менять алгоритм планирования без перекомпиляции ядра.

```bash
# Запуск 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 планировщика.

```bash
# Статистика активного планировщика через сервер 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`.

---

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

- [Linux — средства диагностики производительности](./linux-perf-tools.md) — обзорная карта инструментов
- [Linux — мониторинг и отладка](./linux-monitoring-debugging.md) — методология и интерпретация метрик
- [Linux — справочник команд: память](./linux-tldr-memory.md) — смежный слой диагностики
