Hello community,
I wrote a user-space program called dama (damon autotune) to autotune the 'min_age' parameter of damon_reclaim, which is currently in the alpha stage.
the core goal of the current algorithm is to intentionally reduce workingset refaults. the specific implementation can be found in 'core.c: reclaim_min_age_calc()'.
benchmark & test results:
i've conducted benchmarks on an e5-1225 v5 machine. the test scripts and raw data are available in the 'record/8gib' directory of the repo.
i've attached three sets of test results (from 05/22, 05/24, and 05/25):
05/22 & 05/24:
comparing default (damon_reclaim enabled with its default 120s min_age), fixed (10s), and dama.
05/25 (default-only):
since the default behavior showed significant fluctuations, i ran the default benchmark three times consecutively (with reboots in between) to capture the variance.
result ASCII:
2026-05-22 Fri DAMON_RECLAIM min_age autotune - Default: 120s (Fixed) - DAMA: DAMon Autotune Note that DAMON is [Bytes / 4096]. |--------------------------------------------------| | | DEFAULT | FIXED (10s) | DAMA | |--------------------------------------------------| | RECLAIMED | ---------- | ----------- | --------- | | DAMON | 899 639 | 5 301 886 | 1 496 317 | | KSWAPD | 14 938 465 | 3 137 564 | 4 669 951 | | DIRECT | 1 223 783 | 371 627 | 702 354 | | PSI | ---------- | ----------- | --------- | | CPU | 0.14 | 0.14 | 0.14 | | I/O | 0.02 | 0.02 | 0.02 | | MEM | 1.24 | 0.29 | 0.35 | | REFAULT | ---------- | ----------- | --------- | | ANON | 16 648 235 | 8 224 385 | 6 384 597 | | FAULT | ---------- | ----------- | --------- | | PGFAULT | 2 409.30 | 1 452.30 | 1 091.04 | | MAJFAULT | 2 312.15 | 1 142.40 | 886.71 | |--------------------------------------------------| 2026-05-24 Sun |-------------------------------------------------| | | DEFAULT | FIXED (10s) | DAMA | |-------------------------------------------------| | RECLAIMED | --------- | ----------- | --------- | | DAMON | 888 180 | 5 480 770 | 1 103 922 | | KSWAPD | 4 641 464 | 3 423 950 | 4 326 702 | | DIRECT | 638 522 | 194 268 | 474 074 | | PSI | --------- | ----------- | --------- | | CPU | 0.13 | 0.14 | 0.14 | | I/O | 0.03 | 0.02 | 0.02 | | MEM | 0.32 | 0.29 | 0.31 | | REFAULT | --------- | ----------- | --------- | | ANON | 5 725 492 | 8 540 535 | 5 498 761 | | FAULT | --------- | ----------- | --------- | | PGFAULT | 996.23 | 1 267.81 | 887.07 | | MAJFAULT | 795.18 | 1 186.25 | 763.71 | |-------------------------------------------------| 2026-05-25 Mon (DEFAULT-ONLY) |------------------------------------------------| | | DEFAULT-1 | DEFAULT-2 | DEFAULT-3 | |------------------------------------------------| | RECLAIMED | ---------- | --------- | --------- | | DAMON | 927 430 | 932 334 | 1 093 053 | | KSWAPD | 11 912 877 | 4 250 849 | 4 259 237 | | DIRECT | 785 248 | 540 011 | 594 386 | | PSI | ---------- | --------- | --------- | | CPU | 0.15 | 0.14 | 0.13 | | I/O | 0.02 | 0.02 | 0.02 | | MEM | 0.43 | 0.30 | 0.29 | | REFAULT | ---------- | --------- | --------- | | ANON | 13 279 621 | 5 336 618 | 5 544 832 | | FAULT | ---------- | --------- | --------- | | PGFAULT | 1 985.02 | 846.19 | 869.14 | | MAJFAULT | 1 844.31 | 741.15 | 770.06 | |------------------------------------------------| observations from the charts:
- dama significantly reduces refault (anon) compared to the default behavior.
- it dramatically lowers the memory pressure stall information (psi mem) compared to default.
- in fault metrics (pgfault / majfault), dama also shows much better and more consistent performance than default, though fixed (10s) occasionally reclaims more via damon.
question:
since this is currently in alpha, how can i design a more robust test suite or benchmark to see if it meets real-world, production-level needs? what specific workloads would you recommend i test this against?
any feedback on the code or the methodology is highly appreciated!
project link: https://github.com/aethernet65535/dama
[link] [comments]