v4
2026-10-18
DAMON 硬件采样访问报告讨论 · v4
反馈DAMON的PMU采样无法像PTE采样识别热内存,质疑perf-event补丁效果。
原始补丁链接
子 Patch(9)
1/9
mm/damon/paddr: remove page_fault access check primitive
移除 paddr 的 page_fault 原语、damon_report_page_fault/do_damon_page 及 memory.c 分发;因缓冲改 perf ring 后无生产者,sysfs 改 EOPNOTSUPP 并强制 page_table。
2/9
mm/damon/core: replace the access report buffer with per-context rings
用每 context、每 CPU 的 SPSC perf_rings 替换全局互斥 damon_access_reports,让 NMI 溢出处理器无锁发布,kdamond 排空并计入 region;以 busy 计数和内存屏障保证安全。
3/9
mm/damon: add perf-event overflow handler feeding the report ring
新增 perf_source.c,把 PMU 溢出样本经 damon_report_access 写入 context 的 perf ring;设置页对齐 paddr/vaddr/cpu,并用 release/acquire 清理 event context,避免竞态写已销毁 context。
4/9
mm/damon/ops-common: use probe-weighted score when probe weights are set
配置 probe weights 时,damon_hot_score 的频率子分改用 damon_probe_hits_wsum 而非 nr_accesses_mvsum,把 perf probe 命中纳入 DAMOS 优先级;64 位累加并 clamp 到 DAMON_MAX_SUBSCORE。
5/9
mm/damon: add perf_event prep type, core lifecycle, and PMU arm/disarm
新增 DAMON_PREP_PERF_EVENT,携带 perf_event_attr 子集并接入 core/perf_source;该 probe 事件驱动,不再走 apply_probes,而由 PMU 采样经 report ring 更新命中。
6/9
mm/damon/sysfs: expose perf_event prep attributes
在 sysfs preps/N 暴露 perf_event 参数,构建 damon_perf_probe_event 并在 arming 时调 damon_perf_probe_setup 开 PMU 计数;校验 freq 与 sample_period 二选一。
7/9
mm/damon/tests/drain-kunit: kunit for report rings and ring drain
为 per-context perf ring 和 kdamond 排空加 kunit,覆盖无锁环绕、无 context 样本丢弃、vaddr/paddr 归属、probe hits 每间隔最多加一、ring full 计数及 context 隔离。
8/9
mm/damon/core: cap the region merge threshold per target
按各 target 自身最大合并分数的十分之一限制 kdamond_merge_regions 阈值,避免高流量 target 抬高全局阈值后抹掉低流量 target 的冷热边界;压 max_nr_regions 的后续 pass 仍用升级阈值。
9/9
mm/damon/core: apply probe_hits_wsum filters to node_eligible_mem_bp
node_eligible_mem_bp 在仅数据属性监控时改用 scheme 的 probe_hits_wsum 过滤器判定 eligible 内存,规则同核心过滤器;地址和 target 过滤仍不参与该指标。