К основному содержанию
скилл CX Codex

linux-perf — скилл для Claude Code: профилирование CPU через perf

Ведёт агента по perf на Linux: сэмплирование, счётчики железа, поиск горячих функций и сборка флеймграфов. Полезен, когда программа тормозит, а непонятно где.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill linux-perf -a claude-code
Открыть на GitHub

Что делает linux-perf

Скилл описывает работу с perf по шагам: сначала проверка прав, потом perf stat для быстрых счётчиков, затем perf record для сэмплирования и perf report для разбора. Отдельные разделы — perf annotate по горячим инструкциям, живой perf top и выгрузка в флеймграфы через perf script и инструменты FlameGraph.

Есть таблица типовых сбоев. Скажем, кадры [unknown] обычно значат, что бинарник собран без frame pointer или без отладочной информации, а Permission denied упирается в уровень kernel.perf_event_paranoid. Советует понизить его до 1 на время сессии через sudo sysctl -w kernel.perf_event_paranoid=1 или прописать в /etc/sysctl.d/99-perf.conf.

Заранее понадобится сам perf: в Debian и Ubuntu это linux-perf, в Fedora и RHEL — perf. Целевую программу лучше собрать с -g -O2 -fno-omit-frame-pointer, иначе разбор стека вызовов упрётся в отсутствие символов. Для счётчиков и трассировочных точек нужен root либо пониженный paranoid.

Какие задачи решает

  • найти функцию, которая съедает больше всего CPU
  • измерить промахи кэша и IPC на конкретном бинарнике
  • разобрать, почему в отчёте сплошные кадры [unknown]
  • собрать флеймграф из данных perf record
  • посмотреть, где процесс ждёт, а не считает

Примеры запросов агенту

  • Собери профиль моей программы через perf record -g и покажи горячие функции в perf report
  • Почему perf stat показывает IPC меньше 1.0? Что это значит для моего кода?
  • Сделай флеймграф из perf.data — прогони perf script и собери SVG через FlameGraph

Как установить linux-perf

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill linux-perf -a claude-code

2Вручную: положить файлы

~/.claude/skills/linux-perf/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/linux-perf/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора62

static-analysis Настраивает статический анализ кода на C и C++ через clang-tidy, cppcheck и scan-build. Скилл помогает отобрать проверки и убрать ложные срабатывания. CX Codex +1 1 200установок gdb Ведёт агента по сессии GDB: точки останова, просмотр переменных, разбор падений, реверс-отладка и удалённая отладка через gdbserver. CX Codex +1 936установок llvm Скилл для работы с LLVM IR: генерация промежуточного представления, прогон пассов через opt, понижение до ассемблера через llc и разбор упущенных оптимизаций. CX Codex +1 899установок core-dumps Учит агента включать core dumps, грузить их в GDB или LLDB и снимать стек без повторного запуска упавшей программы. CX Codex +1 764установок clang Настраивает компилятор Clang, флаги оптимизации и линковщик lld в проектах на C и C++. Помогает включить статический анализ и ThinLTO. CX Codex +1 722установок gcc Подсказывает агенту флаги GCC для debug и release, разбирает ошибки компиляции и настраивает LTO с PGO. CX Codex +1 690установок cross-gcc Проведёт агента через настройку кросс-компиляции на GCC: триплеты, sysroot, pkg-config, тесты под QEMU и разбор типовых ошибок. CX Codex +1 682установок valgrind Ведёт агента по инструментам Valgrind: Memcheck ищет утечки и use-after-free, Cachegrind и Callgrind показывают промахи кэша и граф вызовов, Massif — рост кучи. CX Codex +1 678установок

Похожие

perf-profiler composio-community Скилл запускает утилиты профилирования, находит узкие места по процессору и памяти и формирует флейм-графики с точной привязкой к строкам кода. CX Codex +1 1 600установок pyroscope grafana Скилл для непрерывного профилирования приложений через Grafana Pyroscope: флейм-графы CPU, памяти и аллокаций прямо в диалоге с агентом. CX Codex +1 4 700установок debian-linux-triage официальный github Скилл помогает разбирать проблемы Debian Linux через apt, systemd и dpkg, учитывая AppArmor и firewall. Подойдёт для диагностики с пошаговой проверкой. 9 197установок fedora-linux-triage официальный github Скилл помогает разбирать проблемы Fedora через dnf, systemd и проверки SELinux. Подойдёт, когда нужен пошаговый план диагностики с командами. 8 800установок linux-lateral-movement yaklang Плейбук по боковому перемещению в Linux: перехват SSH-агента, сбор ключей и учёток, туннели, D-Bus и переиспользование sudo-сессии. CX Codex +1 3 600установок linux-administration devops-skills Скилл для работы с Linux-серверами: пакеты, службы, диски, процессы, cron и логи. Пригодится, когда агент должен выполнять команды на сервере, а не только писать код. CX Codex +1 770установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о linux-perf

Как установить linux-perf в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill linux-perf -a claude-code. Скилл окажется в ~/.claude/skills/linux-perf/SKILL.md.

Что делает linux-perf?

Проводит агента через профилирование CPU утилитой perf: сэмплирование, аппаратные счётчики, поиск горячих функций и выгрузка в флеймграфы.

Что нужно, чтобы perf заработал?

Пакет linux-perf в Debian и Ubuntu или perf в Fedora и RHEL. Для счётчиков и трассировочных точек нужен root либо пониженный kernel.perf_event_paranoid.

Исходный текст

SKILL.md · MIT
---
name: linux-perf
description: Linux perf profiler skill for CPU performance analysis. Use when collecting sampling profiles with perf record, generating perf report, measuring hardware counters (cache misses, branch mispredicts, IPC), identifying hot functions, or feeding perf data into flamegraph tools. Activates on queries about perf, Linux performance counters, PMU events, off-CPU profiling, perf stat, perf annotate, or sampling-based profiling on Linux.
---

# Linux perf

## Purpose

Guide agents through `perf` for CPU profiling: sampling, hardware counter measurement, hotspot identification, and integration with flamegraph generation.

## Triggers

- "Which function is consuming the most CPU?"
- "How do I measure cache misses / IPC?"
- "How do I use `perf` to find hotspots?"
- "How do I generate a flamegraph from perf data?"
- "perf shows `[unknown]` or `[kernel]` frames"

## Workflow

### 1. Prerequisites

```bash
# Install
sudo apt install linux-perf    # Debian/Ubuntu (version-matched)
sudo dnf install perf          # Fedora/RHEL

# Check permissions
# By default perf requires root or paranoid level ≤ 1
cat /proc/sys/kernel/perf_event_paranoid
# 2 = only CPU stats (not kernel), 1 = user+kernel, 0 = all, -1 = no restrictions

# Temporarily lower (session only)
sudo sysctl -w kernel.perf_event_paranoid=1

# Persistent
echo 'kernel.perf_event_paranoid=1' | sudo tee /etc/sysctl.d/99-perf.conf
sudo sysctl -p /etc/sysctl.d/99-perf.conf
```

Compile the target with debug symbols for useful frame data:

```bash
gcc -g -O2 -fno-omit-frame-pointer -o prog main.c
# -fno-omit-frame-pointer: essential for frame-pointer-based unwinding
# Alternative: compile with DWARF CFI and use --call-graph=dwarf
```

### 2. perf stat — quick counters

```bash
# Basic hardware counters
perf stat ./prog

# With specific events
perf stat -e cache-misses,cache-references,instructions,cycles,branch-misses ./prog

# Wall-clock comparison: N runs
perf stat -r 5 ./prog

# Attach to existing process
perf stat -p 12345 sleep 10
```

Interpret `perf stat` output:

- **IPC** (instructions per cycle) < 1.0: memory-bound or stalled pipeline
- **cache-miss rate** > 5%: significant cache pressure
- **branch-miss rate** > 5%: branch predictor struggling

### 3. perf record — sampling

```bash
# Default: sample at 1000 Hz (cycles event)
perf record -g ./prog

# Specify frequency
perf record -F 999 -g ./prog

# Specific event
perf record -e cache-misses -g ./prog

# Attach to running process
perf record -F 999 -g -p 12345 sleep 30

# Off-CPU profiling (time spent waiting)
perf record -e sched:sched_switch -ag sleep 10

# DWARF call graphs (better for binaries without frame pointers)
perf record -F 999 --call-graph=dwarf ./prog

# Save to named file
perf record -o myapp.perf.data -g ./prog
```

### 4. perf report — interactive analysis

```bash
perf report                          # reads perf.data
perf report -i myapp.perf.data
perf report --no-children            # self time only (not cumulative)
perf report --sort comm,dso,sym      # sort by fields
perf report --stdio                  # non-interactive text output
```

Navigation in TUI:

- `Enter` — expand a symbol
- `a` — annotate (show assembly with hit counts)
- `s` — show source (needs debug info)
- `d` — filter by DSO (library)
- `t` — filter by thread
- `?` — help

### 5. perf annotate — hot instructions

```bash
# Show assembly with hit percentages
perf annotate sym_name

# From report: press 'a' on a symbol
# Or directly:
perf annotate -i perf.data --symbol=hot_function --stdio
```

High hit count on a `mov` or `vmovdqa` suggests a cache miss at that load.

### 6. perf top — live profiling

```bash
# Live top, like 'top' but for functions
sudo perf top -g

# Filter by process
sudo perf top -p 12345
```

### 7. Feed into flamegraphs

```bash
# Generate perf script output
perf script > out.perf

# Use Brendan Gregg's FlameGraph tools
git clone https://github.com/brendangregg/FlameGraph
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
./FlameGraph/flamegraph.pl out.folded > flamegraph.svg

# Open flamegraph.svg in browser
```

See `skills/profilers/flamegraphs` for reading flamegraphs and interpreting results.

### 8. Common issues

| Problem | Cause | Fix |
|---------|-------|-----|
| `Permission denied` | `perf_event_paranoid` too high | Lower paranoid level or run with `sudo` |
| `[unknown]` frames | Missing frame pointers or debug info | Recompile with `-fno-omit-frame-pointer` or use `--call-graph=dwarf` |
| `[kernel]` everywhere | Kernel symbols not visible | Use `sudo perf record`; install `linux-image-$(uname -r)-dbgsym` |
| `No kallsyms` | Kernel symbols unavailable | `echo 0 | sudo tee /proc/sys/kernel/kptr_restrict` |
| Empty report for short program | Program exits too fast | Use `-F 9999` or instrument longer workload |
| DWARF unwinding slow | Large DWARF stack | Limit with `--call-graph dwarf,512` |

### 9. Useful events

```bash
# List all available events
perf list

# Common hardware events
cycles
instructions
cache-references
cache-misses
branch-instructions
branch-misses
stalled-cycles-frontend
stalled-cycles-backend

# Software events
context-switches
cpu-migrations
page-faults

# Tracepoints (requires root)
sched:sched_switch
syscalls:sys_enter_read
```

For a counter reference and interpretation guide, see [references/events.md](references/events.md).

## Related skills

- Use `skills/profilers/flamegraphs` for SVG flamegraph generation and reading
- Use `skills/profilers/valgrind` for cache simulation and memory profiling
- Use `skills/compilers/gcc` or `skills/compilers/clang` for PGO from perf data (AutoFDO)

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой