v2 2026-09-11

DAMON 硬件采样访问报告讨论 · v2

为 DAMON 加入缺页访问检查原语、per-probe 报告环和 perf 溢出处理器,支持 PMU 驱动热页探测。

原始补丁链接

子 Patch(9)

1/9
mm/damon/vaddr: support page fault access check primitive
在 DAMON vaddr 中实现页错误采样原语,在采样地址的 VMA 上安装 marker 并让 prepare_access_checks 按原语分派,使虚拟地址上下文也能用缺页访问检查。
2/9
mm/damon/core: read the CPU number with preemption disabled
在 damon_report_page_fault 中禁用抢占读取 CPU 号并贯穿上报,避免 preemptible 下 smp_processor_id 警告,同时保证 CPU 与 per-CPU ring 选择一致。
3/9
mm/damon/paddr: lock the folio for the page fault primitive rmap walk
paddr 缺页原语的 rmap_walk 无条件锁定 folio,并确保释放查找到的引用,修复匿名 folio 未锁导致 marker 安装失败的问题。
4/9
mm/damon: add damos_node_eligible_mem_bp tracepoint
新增 damos_node_eligible_mem_bp 每 tick 跟踪点,输出节点可迁移内存带宽配额目标的 target/current,帮助观测和判断分层循环收敛。
5/9
mm/damon/core: add per-probe-class report rings and unified drain
为 NMI 安全上报引入按 probe 类型分区的 per-CPU SPSC ring:缺页用全局 ring,perf 用 per-ctx ring,销毁 ctx 前释放事件,统一 drain 避免 mutex 与 UAF。
6/9
mm/damon: add perf-event overflow handler feeding the report ring
新增 ops 无关的 perf_source,把 PMU 溢出样本经 NMI 安全 ring 转成 DAMON 访问报告,支持 paddr/vaddr 与 CPU 热插拔,event_driven probe 不再走 apply_probes。
7/9
mm/damon/ops-common: use probe-weighted score when probe weights are set
DAMON 热评分在配置 probe 权重时改用 damon_probe_hits_wsum 计算频率子分,把 perf 硬件事件计数纳入分层,并 clamp 防溢出;否则沿用页表访问率。
8/9
mm/damon: add perf_event prep for PMU-driven hotness probes
新增 DAMON_PREP_PERF_EVENT 预置动作,让用户空间配置 PMU 采样属性,event_driven probe 由 perf 溢出经 report ring 提供命中,不再走页表扫描。
9/9
mm/damon/tests/drain-kunit: kunit for report rings and unified drain
Add kunit coverage for the report rings (the global page-fault ring and a per-context perf ring) and the unified drain: ring inject/drain, overflow safety on wrap, the damon_report_access() producer +