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

hardware-counters — скилл для Claude Code: что делает и как установить

Помогает измерять аппаратные счётчики процессора через perf и PAPI. Скилл рассчитывает IPC, промахи кэша L1–LLC и связывает события PMU со строками кода.

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

Что делает hardware-counters

Скилл даёт ассистенту готовые сценарии для замера метрик процессора. Он подсказывает команды perf stat для снятия счётчиков, вычисления IPC и CPI, а также расчёта MPKI для выявления проблем с памятью. Если стандартных псевдонимов ядра не хватает, скилл переходит к сырым кодам PMU через ocperf или libpfm4.

Для поиска узких мест скилл предлагает связывать события с исходным кодом с помощью perf record и perf annotate. Бинарник обязан быть собран с отладочными символами, иначе сопоставить адреса с конкретными строками программы не получится.

Помимо утилиты perf, скилл включает шаблоны кода на C для библиотеки PAPI и команды сборки Intel PCM через CMake. Это позволяет снимать пропускную способность шины памяти раз в секунду или встраивать замеры прямо в бинарник.

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

  • рассчитать IPC и выявить упор в память через MPKI
  • найти строки исходного кода с максимальным числом промахов LLC
  • замерить частоту неверных предсказаний переходов через perf stat
  • встроить замер аппаратных счётчиков в код на C через библиотеку PAPI
  • собрать метрики пропускной способности памяти через Intel PCM

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

  • Покажи, как через perf stat посчитать IPC и процент промахов L1 и LLC для программы ./prog
  • Как связать промахи кэша LLC-load-misses со строками исходного кода через perf annotate?
  • Напиши пример на C для замера инструкций и циклов через библиотеку PAPI

Как установить hardware-counters

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill hardware-counters -a claude-code

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

~/.claude/skills/hardware-counters/SKILL.md

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

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

Вопросы о hardware-counters

Как установить hardware-counters в Claude Code?

Выполните команду npx skills add mohitmishra786/low-level-dev-skills --skill hardware-counters -a claude-code.

Для чего нужен скилл hardware-counters?

Он даёт агенту инструкции по сбору и анализу аппаратных событий PMU. Скилл помогает рассчитывать задержки памяти, ветвления и профилировать код через perf, PAPI или Intel PCM.

Что необходимо для сопоставления событий со строками в perf annotate?

Программу обязательно нужно скомпилировать с флагом отладочной информации -g. Без отладочных символов perf annotate не сможет связать ассемблерные инструкции с исходным кодом.

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

SKILL.md · MIT
---
name: hardware-counters
description: Hardware performance counter skill for low-level CPU analysis. Use when collecting PMU events with perf stat, using the PAPI library, measuring cache miss rates and branch misprediction ratios, computing IPC, or correlating PMU events to source lines. Activates on queries about hardware counters, PMU events, perf stat -e, PAPI, cache miss rate, branch misprediction, IPC measurement, or CPU performance events.
---

# Hardware Performance Counters

## Purpose

Guide agents through hardware performance counter analysis: collecting PMU events with `perf stat -e`, using the PAPI library for portable counter access, interpreting cache miss rates and branch misprediction ratios, computing IPC, and correlating events to source lines with `perf annotate`.

## Triggers

- "How do I measure cache miss rate with perf?"
- "How do I count branch mispredictions?"
- "How do I compute IPC (instructions per clock) with perf?"
- "How do I use the PAPI library for hardware counters?"
- "How do I see which source lines cause the most cache misses?"
- "How do I measure memory bandwidth with performance counters?"

## Workflow

### 1. perf stat — basic counter collection

```bash
# Basic hardware event summary
perf stat ./prog

# Output:
#  Performance counter stats for './prog':
#
#      1,234,567,890      instructions
#        456,789,012      cycles
#         12,345,678      cache-misses         #    1.23 % of all cache refs
#         23,456,789      branch-misses        #    2.34 % of all branches
#
#       0.456789012 seconds time elapsed

# Derived metrics (computed from the output)
# IPC = instructions / cycles = 1,234,567,890 / 456,789,012 ≈ 2.70
# CPI = cycles / instructions ≈ 0.37
```

### 2. Specifying PMU events with -e

```bash
# Specific hardware events
perf stat -e instructions,cycles,cache-misses,branch-misses ./prog

# L1/L2/L3 cache events
perf stat -e \
  L1-dcache-loads,L1-dcache-load-misses,\
  L2-loads,L2-load-misses,\
  LLC-loads,LLC-load-misses \
  ./prog

# Memory bandwidth (Intel)
perf stat -e \
  uncore_imc/cas_count_read/,\
  uncore_imc/cas_count_write/ \
  ./prog

# TLB misses
perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses ./prog

# Branch misprediction rate
perf stat -e branches,branch-misses ./prog
# Rate = branch-misses / branches × 100%

# Available events (varies by CPU)
perf list hardware          # generic hardware events
perf list cache             # cache events
perf list pmu               # raw PMU events for your CPU
```

### 3. Key metrics and thresholds

| Metric | Formula | Healthy | Concerning |
|--------|---------|---------|-----------|
| IPC | instructions / cycles | > 2.0 (modern x86) | < 1.0 |
| L1 miss rate | L1-misses / L1-accesses | < 1% | > 5% |
| LLC miss rate | LLC-misses / LLC-accesses | < 1% | > 10% |
| Branch miss rate | branch-misses / branches | < 1% | > 5% |
| MPKI | misses per 1K instructions | — | L3 MPKI > 10 = memory bound |

```bash
# Compute MPKI (Misses Per Kilo-Instructions)
perf stat -e instructions,LLC-load-misses ./prog
# MPKI = LLC-load-misses / (instructions / 1000)
```

### 4. Raw PMU events (CPU-specific)

For events not in the generic aliases, use raw event codes:

```bash
# Intel: use perf list or look up in Intel SDM
# Format: rXXYY where XX=umask, YY=event code
perf stat -e r0124 ./prog    # example Intel raw event

# List Intel events with ocperf (OpenCL Perf Events)
pip install ocperf
ocperf.py list | grep "mem_load"

# Use libpfm4 for event names
pfm_ls | grep "MEM_LOAD"
perf stat -e $(pfm_ls | grep "MEM_LOAD_RETIRED.L3_MISS") ./prog

# AMD: similar approach
perf stat -e r04041 ./prog   # AMD raw event
```

### 5. Source-level annotation with perf record/annotate

```bash
# Record with hardware events
perf record -e LLC-load-misses -g ./prog

# Annotate: show source lines sorted by cache miss count
perf annotate --stdio

# Interactive (requires debug symbols)
perf report
# Press 'a' on a function to annotate it

# Combined: record hotspot + annotate
perf record -e cycles:u -g ./prog
perf annotate --symbol=my_function --stdio 2>/dev/null | head -40

# Example annotate output:
# Percent | Source code
#   45.23 |     for (int i = 0; i < N; i++)
#    3.12 |         sum += data[i];   ← cache miss here (strided access)
```

### 6. PAPI — Portable API for hardware counters

PAPI provides a portable C API across different CPU architectures:

```c
#include <papi.h>
#include <stdio.h>

int main(void) {
    int Events[] = {PAPI_TOT_INS, PAPI_TOT_CYC,
                    PAPI_L2_TCM,  PAPI_BR_MSP};
    long long values[4];

    if (PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT) {
        fprintf(stderr, "PAPI init failed\n");
        return 1;
    }

    PAPI_start_counters(Events, 4);

    // --- Code to measure ---
    do_work();
    // -----------------------

    PAPI_stop_counters(values, 4);

    printf("Instructions:      %lld\n", values[0]);
    printf("Cycles:            %lld\n", values[1]);
    printf("IPC:               %.2f\n", (double)values[0]/values[1]);
    printf("L2 cache misses:   %lld\n", values[2]);
    printf("Branch mispred:    %lld\n", values[3]);

    return 0;
}
```

```bash
# Build with PAPI
gcc -O2 -g -o prog prog.c -lpapi

# Available PAPI events on your system
papi_avail -a | head -30
papi_native_avail | grep "L3"    # native events with "L3"
```

Common PAPI presets:

| Preset | Event |
|--------|-------|
| `PAPI_TOT_INS` | Total instructions |
| `PAPI_TOT_CYC` | Total cycles |
| `PAPI_L1_DCM` | L1 data cache misses |
| `PAPI_L2_TCM` | L2 total cache misses |
| `PAPI_L3_TCM` | L3 total cache misses |
| `PAPI_BR_MSP` | Branch mispredictions |
| `PAPI_TLB_DM` | Data TLB misses |
| `PAPI_FP_INS` | Floating point instructions |
| `PAPI_VEC_INS` | Vector/SIMD instructions |

### 7. Intel PCM (Performance Counter Monitor)

```bash
# Intel PCM — system-wide counters, no root required on modern kernels
git clone https://github.com/intel/pcm
cd pcm && cmake -S . -B build && cmake --build build

# Measure memory bandwidth
./build/bin/pcm-memory 1    # sample every 1 second

# Core utilization + IPC
./build/bin/pcm 1

# Cache miss breakdown per socket
./build/bin/pcm 1 -csv | head -20
```

## Related skills

- Use `skills/profilers/intel-vtune-amd-uprof` for guided microarchitecture analysis
- Use `skills/profilers/linux-perf` for perf record/report and flamegraph generation
- Use `skills/low-level-programming/cpu-cache-opt` for applying cache optimization patterns
- Use `skills/low-level-programming/simd-intrinsics` for improving FLOPS/cycle metrics

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

Похожие скиллы

Все скиллы по теме «Бэкенд и API» →
mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок claude-api официальный anthropics Справочник по Anthropic SDK и API Claude для генерации кода без устаревших параметров и выдуманных методов. 74 198установок lark-im larksuite Скилл подключает Lark IM к агенту: он отправляет сообщения, ищет историю, управляет чатами и файлами. Подойдёт для задач вокруг командных коммуникаций. CX Codex +1 472 900установок lark-event larksuite Слушает события Lark/Feishu и отдаёт их потоком NDJSON. Подходит для ботов, обработчиков сообщений и долгих подписчиков. CX Codex +1 466 800установок caveman-discover JuliusBrussee Находит точки вызова LLM в репозитории и размечает их воркфлоу для Caveman Cloud, чтобы расходы на токены не сливались в одну общую кучу. CX Codex +1 104 400установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок

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

cargo-workflows Скилл ведёт агента по воркспейсам Cargo, фичам, build.rs, кэшу сборки и аудиту зависимостей. Пригодится, когда Rust-проект разрастается до нескольких крейтов. CX Codex +1 558установок rust-unsafe Помогает писать и проверять unsafe-код на Rust. Разбирает правила работы с сырыми указателями, внутреннюю мутабельность и изоляцию небезопасных участков. CX Codex +1 556установок cpp-modules Скилл для работы с модулями C++20: именованные модули, партиции, header units, сборка через CMake и флаги компиляторов. CX Codex +1 555установок rust-debugging Скилл настраивает отладку Rust через GDB, LLDB, макрос dbg! и tokio-console. Помогает разбирать бэктрейсы паник и инспектировать асинхронные задачи. CX Codex +1 548установок rust-security Скилл для проверки Rust-проектов на уязвимости: cargo-audit, cargo-deny, RUSTSEC, безопасный FFI, фаззинг и Miri. CX Codex +1 544установок openocd-jtag Скилл учит агента настраивать OpenOCD, прошивать микроконтроллеры через JTAG или SWD и подключать GDB для низкоуровневой отладки. CX Codex +1 536установок cpp-coroutines Скилл обучает ИИ-агента писать и отлаживать корутины C++20. Помогает реализовать promise_type, сократить размер фрейма в куче и разобрать зависшие вызовы через GDB. CX Codex +1 531установок debug-optimized-builds Помогает разобраться, почему GDB показывает «value optimized out» и как вообще отлаживать код, собранный с оптимизацией. CX Codex +1 533установок

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

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