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

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

Скилл помогает анализировать планировщики CFS и EEVDF, аллокаторы памяти и работу VFS в Linux. Пригодится при разборе падений kmalloc, нехватки памяти и задержек задач.

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

Что делает kernel-internals

Ассистент получает структурированные инструкции по низкоуровневым подсистемам ядра Linux. Скилл охватывает работу планировщиков CFS и EEVDF, структуру очередей задач, вычисление задержек через perf sched, а также внутренности аллокаторов страниц buddy и SLUB. В правилах расписана разница между kmalloc для физически непрерывных буферов и vmalloc для крупных виртуальных областей.

В блок памяти включены правила чтения /proc/meminfo, разбор поведения дискового кэша и эвристика OOM killer для выбора процесса-жертвы. Также описана иерархия VFS: объекты dentry, inode и открытые файлы.

Для сбора задержек планировщика через файл /sys/kernel/debug/sched/debug в системе обязательно нужна смонтированная debugfs.

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

  • разобрать причины отказа kmalloc из-за фрагментации памяти
  • найти источник задержек в очереди планировщика EEVDF
  • оценить риски срабатывания OOM killer по метрикам памяти
  • настроить упреждающее чтение и очистку кэша VFS

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

  • Помоги выяснить, почему приложению не хватает физической памяти и срабатывает OOM killer.
  • Объясни поведение планировщика EEVDF в ядре 6.12 и покажи команды для снятия трассировки через perf.
  • Сравни вызовы kmalloc и vmalloc для нового модуля ядра с большим непрерывным буфером.

Как установить kernel-internals

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill kernel-internals -a claude-code

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

~/.claude/skills/kernel-internals/SKILL.md

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

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

Вопросы о kernel-internals

Как установить kernel-internals в Claude Code?

Выполните команду npx skills add mohitmishra786/low-level-dev-skills --skill kernel-internals -a claude-code. Также файл инструкции можно разместить по пути ~/.claude/skills/kernel-internals/SKILL.md.

Для каких задач нужен этот скилл?

Он даёт агенту контекст по работе подсистем памяти Linux, дискового кэша, виртуальной файловой системы VFS и планировщиков задач. Это нужно при исследовании узких мест производительности и отладке модулей ядра.

С какими версиями ядра работает планировщик EEVDF?

Планировщик EEVDF появился как опция в ядре 6.6, а полный переход с CFS завершился в релизе 6.12. На более старых ядрах инструкция предлагает сначала проверить текущий активный планировщик через команду uname -r.

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

SKILL.md · MIT
---
name: kernel-internals
description: Linux kernel internals skill for scheduler, memory, and VFS subsystems. Use when analyzing CFS/EEVDF scheduling, buddy/SLUB allocators, page cache, memory zones, OOM killer, or interpreting /proc/meminfo. Activates on queries about kernel scheduler, vruntime, SLUB, vmalloc, page cache, or OOM killer.
---

# Kernel Internals

## Purpose

Guide agents through Linux kernel internals: the CFS and EEVDF schedulers, runqueues and vruntime, the buddy allocator and SLUB, vmalloc vs kmalloc, VFS dentry/inode/file objects, page cache and readahead, memory zones, OOM killer heuristics, and `/proc/meminfo` interpretation.

## When to Use

- Diagnosing scheduling latency or unfair CPU distribution
- Understanding kmalloc failures vs vmalloc for large kernel allocations
- Analyzing page cache behavior and readahead effectiveness
- Interpreting `/proc/meminfo` during memory pressure
- Debugging OOM killer victim selection
- Reading kernel source in `kernel/sched/`, `mm/`, or `fs/`

## Workflow

### 1. Scheduler — CFS and EEVDF

Linux uses **EEVDF** (Earliest Eligible Virtual Deadline First) for CFS-class scheduling. EEVDF was merged as an option in **6.6** (2023); the gradual CFS→EEVDF transition **completed in 6.12** (Nov 2024). On older 6.6–6.11 kernels, verify which scheduler is active. Core concepts (runqueues, vruntime/lag) carry over:

```
Per-CPU runqueue (struct rq)
├── cfs_rq — fair-class tasks sorted by vruntime/deadline
├── rt_rq  — real-time tasks (FIFO/RR)
└── dl_rq  — SCHED_DEADLINE tasks
```

Key metrics:

```bash
# Task scheduling info
chrt -p <pid>
cat /proc/<pid>/sched

# Runqueue latency (scheduler debugging)
cat /sys/kernel/debug/sched/debug  # requires debugfs

# Trace scheduler events
perf sched record -a -- sleep 5
perf sched latency
```

`vruntime` — virtual runtime tracking CPU time consumed; lower vruntime = more eligible for CPU.

```bash
# CFS tunables
sysctl kernel.sched_latency_ns
sysctl kernel.sched_min_granularity_ns
sysctl kernel.sched_wakeup_granularity_ns
```

### 2. EEVDF specifics

EEVDF picks the task with the earliest eligible virtual deadline, improving latency fairness for short time-slice tasks. Tasks with positive lag are eligible; the scheduler selects the earliest virtual deadline among eligible tasks.

```bash
# Check kernel version (EEVDF transition complete in 6.12+)
uname -r

# Scheduler documentation
# docs.kernel.org/scheduler/sched-eevdf.html
```

### 3. Memory subsystem — buddy allocator

Physical pages allocated in power-of-two order (order 0 = 4KB, order 1 = 8KB, ...).

```
ZONE_DMA / ZONE_DMA32 / ZONE_NORMAL / ZONE_MOVABLE
└── free_area[MAX_ORDER] — buddy lists per order
```

```bash
# Buddy allocator stats
cat /proc/buddyinfo

# Per-zone page counts
cat /proc/zoneinfo | head -80
```

### 4. SLUB allocator

Default kmalloc backend — per-CPU caches (slabs) for common sizes.

```bash
# SLUB debug (requires CONFIG_SLUB_DEBUG)
cat /sys/kernel/slab/*/objects 2>/dev/null | head

# kmalloc size classes visible in /proc/slabinfo
cat /proc/slabinfo | head -20
```

| API | Use when |
|-----|----------|
| `kmalloc(size, GFP_KERNEL)` | ≤ ~128KB (arch-dependent), physically contiguous |
| `kzalloc(size, flags)` | Zeroed kmalloc |
| `vmalloc(size)` | Large, virtually contiguous (may be physically fragmented) |
| `get_free_pages()` | Direct page allocation |

```c
// Kernel module allocation example
void *buf = kmalloc(4096, GFP_KERNEL);
if (!buf)
    return -ENOMEM;
kfree(buf);
```

### 5. Highmem

On 32-bit or specific configs, `ZONE_HIGHMEM` holds pages not permanently mapped in kernel virtual address space. On 64-bit x86/arm64, essentially all RAM is in `ZONE_NORMAL`.

```bash
grep -i highmem /proc/zoneinfo
```

### 6. VFS layer

```
Path lookup: /home/user/file.txt
├── dentry cache (dcache) — directory entry tree
├── inode — metadata (permissions, size, ops)
└── file — per-open-file state (offset, flags)
```

```bash
# Mounted filesystems
cat /proc/mounts

# Inode/dentry cache pressure
sysctl vm.vfs_cache_pressure   # higher = reclaim caches sooner

# File descriptor usage
ls /proc/<pid>/fd | wc -l
```

### 7. Page cache and readahead

```bash
# Drop caches (testing only — destructive to perf)
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

# Readahead tuning
blockdev --getra /dev/sda
blockdev --setra 4096 /dev/sda

# Per-file cache status
cat /proc/<pid>/smaps_rollup
```

Page cache pages appear as `Cached` in meminfo. Dirty pages await writeback.

### 8. /proc/meminfo interpretation

```bash
cat /proc/meminfo
```

| Field | Meaning |
|-------|---------|
| `MemTotal` | Total usable RAM |
| `MemFree` | Completely unused pages |
| `MemAvailable` | Estimate of allocatable memory (includes reclaimable cache) |
| `Cached` | Page cache + tmpfs |
| `Buffers` | Block device metadata cache |
| `SwapTotal` / `SwapFree` | Swap space |
| `Dirty` | Pages pending writeback |
| `AnonPages` | Anonymous (heap/stack) pages |
| `Slab` | Kernel object cache |
| `SReclaimable` | Reclaimable slab |
| `SUnreclaim` | Kernel structures (not easily reclaimed) |

```
Memory pressure diagnosis
├── MemAvailable low + Cached high → page cache reclaim candidate
├── AnonPages high + SwapFree low → OOM risk
├── Slab huge → kernel object leak; check /proc/slabinfo
└── Dirty high → slow writeback; check I/O scheduler
```

### 9. OOM killer

```bash
# OOM score per process (higher = more likely victim)
cat /proc/<pid>/oom_score
cat /proc/<pid>/oom_score_adj   # -1000 to 1000, admin adjustment

# OOM events in kernel log
dmesg | grep -i "out of memory"
journalctl -k | grep -i oom
```

OOM killer selects based on `oom_score` considering memory usage, child processes, and `oom_score_adj`. Protect critical daemons:

```bash
# Protect process from OOM (requires root)
echo -1000 | sudo tee /proc/<pid>/oom_score_adj
```

## Common Problems

| Symptom | Cause | Fix |
|---------|-------|-----|
| `kmalloc: allocation failed` | Fragmentation or size too large | Use `vmalloc`; reduce pressure; `GFP_ATOMIC` only when needed |
| High iowait, low MemAvailable | Page cache thrashing | Increase RAM; tune `vfs_cache_pressure` |
| OOM kills wrong process | High memory user with low adj | Set `oom_score_adj`; use cgroups `memory.max` |
| Scheduling unfairness | RT tasks starving CFS | Check `chrt`; isolate CPUs with `isolcpus` |
| SLUB corruption | Use-after-free in module | Enable KASAN; audit with `slub_debug` |
| Slow file reads | Readahead too small | Increase readahead; check backing device |

## Related Skills

- `skills/kernel/device-drivers` — char/platform drivers using these subsystems
- `skills/kernel/kernel-debugging` — ftrace, kgdb for internals investigation
- `skills/low-level-programming/linux-kernel-modules` — LKM development basics
- `skills/kernel/kernel-testing` — KUnit for subsystem unit tests
- `skills/profilers/linux-perf` — perf sched and memory profiling
- `skills/observability/ebpf` — trace scheduler and memory events from userspace

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

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

Все скиллы по теме «DevOps и инфраструктура» →
kernel-exploitation yaklang Справочник по анализу уязвимостей ядра Linux для ИИ-агента. Помогает настроить окружение в QEMU и разобрать механизмы защиты ядра вроде KASLR и SMEP. CX Codex +1 3 600установок analyzing-linux-kernel-rootkits mahipal Скилл ищет признаки руткитов уровня ядра в дампах памяти Linux и на работающей системе. Пригодится для расследований и форензики. CX Codex +1 442установок magpie-kernel-evaluator amd Гоняет бенчмарки LLM-инференса через Magpie, разбирает трейсы в TraceLens и ведёт от узкого ядра до проверенного варианта. CX Codex +1 870установок kernel-cli kernel Скилл подсказывает агенту, как ставить и использовать Kernel CLI: сессии браузеров, деплой приложений, профили, прокси и ключи. CX Codex +1 481установок performance-tuning devops-skills Скилл для настройки производительности Linux: подбор параметров ядра, поиск узких мест, работа с планировщиком I/O и памятью. Пригодится, когда сервер тормозит или готовится к нагрузке. CX Codex +1 403установок kernel-agent-browser kernel Скилл настраивает работу agent-browser с облачными браузерами Kernel. Помогает обходить блокировки ботов и сохранять сессии с помощью семантических селекторов. CX Codex +1 1 200установок

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

device-tree Помогает ИИ писать описания оборудования на DTS/DTSI и разбираться с ошибками сопоставления драйверов в ядре Linux. CX Codex +1 314установок datasheet-and-refmanual-reading Учит агента читать даташиты и reference manual микроконтроллеров: где искать карту регистров, биты, дерево тактирования и errata. CX Codex +1 314установок compiler-optimizations-deep Разбирает причины неудачной автовекторизации, сброса регистров на стек и настраивает профильную оптимизацию PGO или BOLT при сборке проектов на C и C++. CX Codex +1 311установок cpu-pipelines-and-hazards Объясняет стадии конвейера CPU, конфликты данных и управления, проброс и простои. Пригодится, когда непонятно, почему горячий цикл тормозит. CX Codex +1 311установок interrupts-and-exceptions-baremetal Скилл помогает настраивать прерывания Cortex-M NVIC, писать неблокирующие ISR и разбирать причины HardFault. Пригодится при разработке прошивок под микроконтроллеры без ОС. CX Codex +1 306установок gpu-memory-model Объясняет модели памяти GPU, расхождения варпов и конфликты банков памяти. Помогает находить узкие места в ядрах CUDA и HIP. CX Codex +1 304установок qemu-kvm Ведёт агента по запуску виртуальных машин на QEMU с ускорением KVM: флаги, virtio-устройства, проброс VFIO и загрузка своих ядер. CX Codex +1 304установок bus-drivers-i2c-spi Помогает писать клиентские драйверы Linux для датчиков и PMIC на шинах I2C и SPI: регистрация, regmap, привязка к device tree. CX Codex +1 304установок

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

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