v3 2026-10-04

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

DAMON RFC v3:引入 perf_event 探针和 per-context 报告环,替换访问报告缓冲并调整合并阈值。

原始补丁链接

子 Patch(9)

1/9
mm/damon/paddr: remove page_fault access check primitive
移除page_fault访问检查原语:删除damon_pa_prepare_access_checks_faults、damon_report_page_fault及do_damon_page等,因后续perf事件环形缓冲区取代全局报告缓冲区,避免fault报告丢失。
2/9
mm/damon/core: replace the access report buffer with per-context rings
[Re: [RFC PATCH v3 2/9] mm/damon/core: replace the access report buffer with per-context rings] On Sat, 03 Oct 2026 14:07:55 -0700 Ravi Jonnalagadda ravis.opensrc@gmail.com wrote: > damon_report_acc
3/9
mm/damon: add perf-event overflow handler feeding the report ring
新增perf_source.c,NMI溢出处理程序通过damon_report_access()将PMU样本报告到每上下文环形缓冲区;用release/acquire存储处理teardown竞争,并设置页对齐的paddr/vaddr。
4/9
mm/damon/ops-common: use probe-weighted score when probe weights are set
在damon_hot_score()中,当有探针权重时用damon_probe_hits_wsum()替代nr_accesses_mvsum()计算频率子分数,将PMU计数纳入热评分,并用min_t防止溢出。
5/9
mm/damon: add perf_event prep type, core lifecycle, and PMU arm/disarm
添加DAMON_PREP_PERF_EVENT prep类型,携带perf_event_attr子集,使探针由PMU事件驱动而非DAMON遍历;通过cpuhp为每CPU PMU打开内核计数器。
6/9
mm/damon/sysfs: expose perf_event prep attributes
在sysfs暴露perf_event prep属性,用户可通过preps/N/配置PMU探针;damon_sysfs_set_perf_probe()构建事件并调用damon_perf_probe_setup()打开计数器,且验证sample_period/freq互斥。
7/9
mm/damon/tests/drain-kunit: kunit for report rings and ring drain
为perf报告环形缓冲区和drain添加kunit测试,覆盖注入/drain、溢出安全、上下文隔离、地址匹配及生产者返回值和满环计数。
8/9
mm/damon/core: cap the region merge threshold per target
在kdamond_merge_regions()中按目标限制合并阈值,避免高流量目标抬高阈值抹去低流量目标的冷热边界;常规遍历用目标自身最大分数的1/10,后续升级遍历不加限制。
9/9
mm/damon/core: allow both primitives disabled when a perf probe is present
当存在perf-event探针时,允许page_table和page_fault两个原语都禁用;将原语启用检查从damon_commit_sample_control()移到__damon_commit_ctx(),对事件驱动探针跳过。