用途:引导分析 Linux 内核内部机制,包括 CFS 与 EEVDF 调度器、运行队列与 vruntime、buddy 分配器与 SLUB、vmalloc 与 kmalloc 的区别、VFS 的 dentry/inode/file 对象、页缓存与预读、内存区域、OOM killer 启发式以及 /proc/meminfo 解读。
适用时机:诊断调度延迟或 CPU 分配不公;判断大块内核分配的 kmalloc 失败与 vmalloc 取舍;分析页缓存行为与预读效果;内存压力下解读 /proc/meminfo;排查 OOM killer 选谁;阅读 kernel/sched/、mm/、fs/ 源码。
调度器:Linux 的 CFS 类调度使用 EEVDF,6.6(2023)作为选项合入,6.12(2024 年 11 月)完成 CFS→EEVDF 过渡;6.6–6.11 需先确认实际调度器。核心概念(运行队列、vruntime/lag)沿用。命令:chrt -p <pid>;cat /proc/<pid>/sched;cat /sys/kernel/debug/sched/debug;perf sched record -a -- sleep 5;perf sched latency;sysctl kernel.sched_latency_ns 等。
内存:buddy 分配器按 2 的幂次阶分配物理页,区域含 ZONE_DMA/DMA32/NORMAL/MOVABLE;命令 cat /proc/buddyinfo、cat /proc/zoneinfo。SLUB 是默认 kmalloc 后端,使用每 CPU 的 slab 缓存;kmalloc 适合约 ≤128KB(依架构)物理连续分配,kzalloc 清零,vmalloc 适合大块虚拟连续分配,get_free_pages 直接分配页。
VFS 与页缓存:路径查找涉及 dentry 缓存、inode 元数据与 file 状态;可查 cat /proc/mounts、sysctl vm.vfs_cache_pressure、ls /proc/<pid>/fd | wc -l;页缓存可用 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches(仅测试且破坏性能)、blockdev --getra/--setra、cat /proc/<pid>/smaps_rollup。
诊断:/proc/meminfo 中 MemAvailable 低且 Cached 高多为页缓存可回收;AnonPages 高且 SwapFree 低有 OOM 风险;Slab 异常大需查 /proc/slabinfo;Dirty 高说明回写慢。OOM 相关可用 cat /proc/<pid>/oom_score、oom_score_adj(-1000 到 1000,需 root),dmesg | grep -i "out of memory"、journalctl -k | grep -i oom。
限制:部分命令需 debugfs、CONFIG_SLUB_DEBUG 或 root 权限;EEVDF 行为依内核版本而异。价格、平台支持等信息暂未提供。