blob: 9e6857517f5fa9a136fae6d084224ccdb4d3146c [file] [log] [blame]
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# This script shows example usage of damo for access-aware tiered memory
# management. The script assumes the system has two NUMA nodes of id 0 and 1,
# and node 0 is faster than node 1, for all CPUs. The script asks DAMON to
# migrate hot pages in node 1 to node 0 (promote), while migrating cold pages
# in node 0 to node 1 (demote). The hotness and coldness thresholds are
# auto-tuned aiming ~99.6 percent of node 0 memory utilization. The basic idea
# behind the tiering policy is came from TPP[1]. This script is also
# implemented for DAMON's auto-tune based memory tiering support[2].
#
# To run this, the kernel should have the auto-tuned memory tiering support of
# DAMON[2], which was landed into the mainline since v6.16-rc1.
#
# [1] https://dl.acm.org/doi/10.1145/3582016.3582063
# [2] https://lkml.kernel.org/r/20250420194030.75838-1-sj@kernel.org
set -e
bindir=$(realpath $(dirname "$0"))
damo_bin="$bindir/../damo"
if [ ! -f "$damo_bin" ]
then
echo "damo not found at $damo_bin"
exit 1
fi
"$damo_bin" module stat write enabled N
"$damo_bin" start \
--numa_node 0 --monitoring_intervals_goal 4% 3 5ms 10s \
--damos_action migrate_cold 1 --damos_access_rate 0% 0% \
--damos_apply_interval 1s \
--damos_quota_interval 1s --damos_quota_space 200MB \
--damos_quota_goal node_mem_free_bp 0.5% 0 \
--damos_filter reject young \
--numa_node 1 --monitoring_intervals_goal 4% 3 5ms 10s \
--damos_action migrate_hot 0 --damos_access_rate 5% max \
--damos_apply_interval 1s \
--damos_quota_interval 1s --damos_quota_space 200MB \
--damos_quota_goal node_mem_used_bp 99.7% 0 \
--damos_filter allow young \
--damos_nr_quota_goals 1 1 --damos_nr_filters 1 1 \
--nr_targets 1 1 --nr_schemes 1 1 --nr_ctxs 1 1