本文へ移動
cccskills
無料GitHub で公開

kernel-memory-management

Use when using kmalloc, vmalloc, or the page allocator, sizing kmalloc allocations, working with SLUB or the buddy allocator, or debugging memory zones and kernel OOM.

インストール方法を見る

含まれるファイル(2)

  • SKILL.md4.8 KB
  • agents/openai.yaml245 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Kernel memory management

Contract

FieldBound contract
TriggerAllocating kernel memory in a driver or subsystem: kmalloc versus vmalloc, GFP flags, the buddy allocator, SLUB caches, DMA-coherent buffers, or OOM and slab corruption debugging.
AuthorityRead-only. Writes nothing. Chat output only. No remote mutation.
Side effectReturns allocation choices and debug commands. No source files are modified.
DoneThe allocator choice per allocation site, the GFP flag per context, and a debug path for any reported memory symptom are delivered.

Inputs

  1. Allocation sites (required): each buffer with its size, lifetime, and the context that allocates it.
  2. Hardware requirement (optional): which buffers feed a DMA device, and the device's addressing limits.
  3. Failure report (optional): OOM kills, slab corruption reports, or allocation failures under load.

Procedure

  1. Pick the allocator per site from the contiguity and size facts.

    Physically contiguous needed (device DMA)?
    ├── Yes: dma_alloc_coherent() or the CMA pool
    └── No
        ├── Small buffer: kmalloc / kzalloc
        ├── Large buffer, virtual contiguity is enough: vmalloc / vzalloc
        └── Whole pages with manual layout: alloc_pages() / __free_pages()
    

    kmalloc returns physically contiguous memory from SLUB caches; above the largest cache the call falls back to the page allocator, which still yields contiguous pages up to the allocator's order limit. Check the real limits per architecture and page size in include/linux/slab.h (KMALLOC_MAX_CACHE_SIZE, KMALLOC_MAX_SIZE) instead of quoting a fixed byte ceiling. vmalloc gets virtual contiguity from scattered pages and must not back device DMA without dma_map_*. Done when: every site names its allocator and the reason.

  2. Match the GFP flag to the context.

    GFP flagContext
    GFP_KERNELProcess context, may sleep
    GFP_ATOMICIRQ or spinlock held; draws from smaller reserves
    GFP_DMALegacy 32-bit devices limited to the DMA zone

    Done when: no sleeping allocation can run in an atomic context, and atomic allocations are small and rare.

  3. Inspect SLUB state when allocation behavior needs evidence.

    cat /proc/slabinfo           # per-cache counts; root-readable
    cat /sys/kernel/slab/kmalloc-1k/object_size
    

    SLUB is the only in-tree SLAB allocator since kernel 6.12 removed the legacy SLAB backend; the kernel floor here (LTS 6.18, mainline 7.2) has no SLAB. Done when: the cache sizes behind a hot allocation path are known from the running system.

  4. Use the page allocator for page-granular structures.

    struct page *page = alloc_pages(GFP_KERNEL, order);
    void *addr = page_address(page);
    __free_pages(page, order);
    

    An order of n allocates 2^n pages. Zone selection (ZONE_DMA, ZONE_NORMAL, ZONE_MOVABLE) lives in include/linux/mmzone.h. Done when: the order and the free call match the allocation.

  5. Handle NUMA deliberately on multi-node systems. kmalloc already prefers the local node; bind hot per-node structures with alloc_pages_node(). In user space, control placement with numactl or mbind for HPC paths. Done when: per-node placement is stated for each latency-critical buffer.

  6. Debug the reported symptom from evidence.

    cat /proc/meminfo
    cat /proc/slabinfo
    dmesg | grep -i oom
    

    For use-after-free and corruption hunts, build with CONFIG_SLUB_DEBUG and CONFIG_KASAN. Route deeper work: virtual-memory-paging-and-tlb for paging mechanics, mmio-and-bit-manipulation for register-level access around mapped buffers, dma-baremetal for bare-metal DMA setup. Done when: the symptom maps to one row of the failure table.

Failure and recovery

SymptomCauseRecovery
Large kmalloc failsAbove the allocator's contiguous limitMove to vmalloc, or redesign around pages; check KMALLOC_MAX_SIZE.
Device reads garbage from a buffervmalloc memory handed to DMAAllocate with dma_alloc_coherent, or map with dma_map_*.
OOM killer firesUnbounded cache growthCap pool sizes; use a shrinker.
Slab corruption reportUse-after-free or double freeEnable KASAN; audit kfree pairing.
Sleep warning under loadGFP_KERNEL in atomic contextSwitch that site to GFP_ATOMIC or defer the work.

Output

The allocator choice with reasons per site; the GFP flag per context; the SLUB inspection evidence; the page-allocation orders; the NUMA placement plan; the debug transcript for the reported symptom; the routing to related skills.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

af-xdp

無料

Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

agents-md

無料

Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

OutlineDriven のスキルをすべて見る

このスキルの問題を報告する