From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04C58C7EE30 for ; Tue, 1 Jul 2025 08:54:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E7896B00A7; Tue, 1 Jul 2025 04:54:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9C0CA6B00A8; Tue, 1 Jul 2025 04:54:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 887896B00A9; Tue, 1 Jul 2025 04:54:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 7674D6B00A7 for ; Tue, 1 Jul 2025 04:54:29 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3B6B28032F for ; Tue, 1 Jul 2025 08:54:29 +0000 (UTC) X-FDA: 83615084658.03.C075998 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id 45B4C10000A for ; Tue, 1 Jul 2025 08:54:27 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; spf=pass (imf05.hostedemail.com: domain of yunjeong.mun@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=yunjeong.mun@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751360067; a=rsa-sha256; cv=none; b=X93n2IU6C93kNzDHIsQXk9jwLx5H3nwDVm9P8n8lWib0tW4X6Px/JT9vxG/MF4Mw1akiad C6qAoyC7e9Sx1Yt+44jhOd1J6n89a215G/ut4y/zN74n5BEd+evmlqD2Wx9KZ01SKD0xFs RNDP7mWIr1XYR3p7IHzREC2kTySWp90= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of yunjeong.mun@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=yunjeong.mun@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751360067; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nkWExpphQJ9YHlVOxu4v8dbT+fkJvH8MbsGgEQAZGCc=; b=Z4/RcCCSku0VMkzQCSzDuUIgPuClFjWmGfAGY38Q8J/VAiVMywDgAjOzsWQzQiUdH3lqCq iBRTvLwk5+rtsnaUBrX1okdu7WafKdbjr2bVIXHu6iscx5nzGiALzbIZGhICj6r2BAjzwi 6SPfs+FZXrubkdBF9npwuShch9SOXL0= X-AuditID: a67dfc5b-681ff7000002311f-79-6863a23dd9db From: Yunjeong Mun To: sj@kernel.org Cc: akpm@linux-foundation.org, damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel_team@skhynix.com, honggyu.kim@sk.com Subject: [RFC PATCH 2/2] samples/damon: add `migrate_hot` and `migrate_cold` knobs Date: Tue, 1 Jul 2025 17:54:17 +0900 Message-ID: <20250701085417.1734-3-yunjeong.mun@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250701085417.1734-1-yunjeong.mun@sk.com> References: <20250701085417.1734-1-yunjeong.mun@sk.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKLMWRmVeSWpSXmKPExsXC9ZZnka7touQMg5dTLS3mrF/DZvHk/29W i8u75rBZ3Fvzn9Xi8Nc3TA6sHptWdbJ5bPo0id3jxIzfLB4vNs9k9Pi8SS6ANYrLJiU1J7Ms tUjfLoEr49Ovv+wFHfIVa1afYmxgPC/ZxcjJISFgIjFx33omGPvzl4usIDabgIbEwUMnmUFs EQFBif7HM4DiXBzMAnMZJY6cec8IkhAWCJKYeP08UBEHB4uAqsTsx1EgYV4Bc4nrf6cwQszU lGi4dA9sPqeAhcSJmc/A4kJANff/zmeHqBeUODnzCQuIzSwgL9G8dTYzRO8cNokvTeIQtqTE wRU3WCYw8s9C0jILScsCRqZVjEKZeWW5iZk5JnoZlXmZFXrJ+bmbGIGBuaz2T/QOxk8Xgg8x CnAwKvHwzjiZlCHEmlhWXJl7iFGCg1lJhJdPNjlDiDclsbIqtSg/vqg0J7X4EKM0B4uSOK/R t/IUIYH0xJLU7NTUgtQimCwTB6dUA6PMDHeHUGWdnaIhyleW/9hrP2GOH/Pzi99+3uG6nHyP fe++nbMrZ8lufn6q/MK1FMnZh1fa9Udcvf5uqdi5AJtOJ5n9ehprLqb+uOvQqW3kc2PfjEeS 9za8L8lX2/rpv+XaO9371gqeqUwyyjK4cK/5yWkNh3X6FX4N+1S6j1VfjAgoOlHzanaTEktx RqKhFnNRcSIAZ+lwLkgCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGLMWRmVeSWpSXmKPExsXCNUNWR9d2UXKGwaIPGhZz1q9hs3jy/zer xednr5ktDs89yWpxedccNot7a/6zWhz++obJgd1j06pONo9Nnyaxe5yY8ZvF48XmmYwe3257 eCx+8YHJ4/MmuQD2KC6blNSczLLUIn27BK6MT7/+shd0yFesWX2KsYHxvGQXIyeHhICJxOcv F1lBbDYBDYmDh04yg9giAoIS/Y9nAMW5OJgF5jJKHDnznhEkISwQJDHx+nmgIg4OFgFVidmP o0DCvALmEtf/TmGEmKkp0XDpHhOIzSlgIXFi5jOwuBBQzf2/89kh6gUlTs58wgJiMwvISzRv nc08gZFnFpLULCSpBYxMqxhFMvPKchMzc0z1irMzKvMyK/SS83M3MQJDb1ntn4k7GL9cdj/E KMDBqMTDa5CXlCHEmlhWXJl7iFGCg1lJhJdPNjlDiDclsbIqtSg/vqg0J7X4EKM0B4uSOK9X eGqCkEB6YklqdmpqQWoRTJaJg1OqgfERu657xuXi72cVH97I+d6lsIJp+7X91zzVbVL5nx65 wdL7p2qS1t3ylFlTzj3Y/P/nErPTBdvedxdsLV7Ct5uXS+WS/N5PZ7wXNHO+7Vi+hpnP5bOT 659VfUr9jP4Hf+x1nffJTnyi4nKxCd7pJuxVK5at33cjKTPiDtP7Jsn5YUL1Lvu3dj1WYinO SDTUYi4qTgQAgu2CGDkCAAA= X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 45B4C10000A X-Stat-Signature: 5kk9hhqe97txic4n4ow8abrihp4yyxeb X-HE-Tag: 1751360067-558657 X-HE-Meta: U2FsdGVkX1/KtfL8ZAIiyxoYODfS8PfmlbVxLHljaOYfFFnWyrzBh+JgB6vPewkqlHJnsZUZWG87zN817fcoNq6IDgiTrFl84peka8VyEIGVhq7xTZ88VgLbPmgmNfYvkclceN7BlyWD5QXHu1vG9le2LImOUNR81LopVa5Ig+HXHT6SVcjzrh85jk4rp+Rpq/DYYGKH2Q7ICoYiyE5+ieF/8TTE9bpu9dcYoWvs3OUR/eTfj5bjf//qM7S7nTtrpQ/JtqgbbpDO3vnn0+B7p7A65TobFEbyXiV8zbOOtpiZ9M7EGy6Kb6AtidVSEbCKaJCfYdjzCNjuucEWT2QK20B/4OimS9m1VYsctYFo/DyOTig/eGLwMSOJL4fSHD1i+hmtp8OChKpl2xdgp9KBxXbQ+uHgrxA166obS18YJYVNrN4FG4ZyXp0MWupwnejLBT4S+DmwDbyKVJFJo/cuaOVHvRZMXIryuYRap1HHnMQz57Y0TFyGhF3LDXkYJnnL13vIGSu/JaPXmrsHER+rxP/9xLIXmLb9U+5uFrflZM4e/JbSm3KhrlWH2eEW3x1BX39IxqszabvuCRzzJvC6uEsFoxnXL+Jc7zRi/wx4TRyWxg9SxKbWCsXmxbxGwE9VQEiPRS04HzIba9FPZqHM6XFVyYuQtJZd/EsjqwIWlTEWTaV0oXQ12GjXHZ/01qbvgRFpvZ7dZK2JGAqSfiLSnIZ9uQOv7x3Sv2PCZhZIXAHdFa3zDf0eTwvaSy0vculI8urgpKjaG/FS8AG+P+fTmwCJj80+UX7xtib5XroBtX2powaXbYeVUlp6Qw2vzrSb2BPqrQBjSHGOZPBA7t3dYPdmK5s3Xgi3Xpgy1StLmA6KhiI6IhKjBmPT/zvrb1uCP8SW1KyIBvhQnyRRMACP/g/dKKk0zgPrAE6tbUmtYmffbfgIg/qZKhX3nh7uG5B9CuTt9bjDZZN8E7HJtPi shuLKkPV iE+Ro/809vaFYan4If9yMsv6TZMl5gy9zicbTHhfUZUzcKuTcfa5v0NGi4qT1binzZLtZar14bgfW9nyOHU5VQ56zLQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: This patch introduces two new konbs for promotion/demotion: `migrate_hot` and `migrate_cold`. It receives node ids for migration in a comma-separated format as ``. The usage is as follows: # demote pages from nid 0 to nid 1 $ echo 0,1 > /sys/module/mtier/parameters/migrate_cold # promote pages from nid 1 to nid 0 $ echo 1,0 > /sys/module/mtier/parameters/migrate_hot Susggested-by: Honggyu Kim Signed-off-by: Yunjeong Mun --- samples/damon/mtier.c | 68 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/samples/damon/mtier.c b/samples/damon/mtier.c index ba6938a89c21..55d2edb84d7e 100644 --- a/samples/damon/mtier.c +++ b/samples/damon/mtier.c @@ -11,6 +11,7 @@ #include #include #include +#include static unsigned long node0_mem_used_bp __read_mostly = 9970; module_param(node0_mem_used_bp, ulong, 0600); @@ -18,6 +19,32 @@ module_param(node0_mem_used_bp, ulong, 0600); static unsigned long node0_mem_free_bp __read_mostly = 50; module_param(node0_mem_free_bp, ulong, 0600); +static int get_migrate_hot( + char *val, const struct kernel_param *kp); + +static const struct kernel_param_ops migrate_hot_ops = { + .set = param_set_charp, + .get = get_migrate_hot, +}; + +static char *migrate_hot __read_mostly = ""; +module_param_cb(migrate_hot, &migrate_hot_ops, &migrate_hot, 0600); +MODULE_PARM_DESC(migrate_hot, + "Specify source and destination node id as a comma-seperated pair"); + +static int get_migrate_cold( + char *val, const struct kernel_param *kp); + +static const struct kernel_param_ops migrate_cold_ops = { + .set = param_set_charp, + .get = get_migrate_cold, +}; + +static char *migrate_cold __read_mostly = ""; +module_param_cb(migrate_cold, &migrate_cold_ops, &migrate_cold, 0600); +MODULE_PARM_DESC(migrate_cold, + "Specify source and destination node id as a comma-seperated pair"); + static int damon_sample_mtier_enable_store( const char *val, const struct kernel_param *kp); @@ -37,6 +64,30 @@ struct region_range { phys_addr_t end; }; +static int parse_migrate_node(int *src, int *dst, bool promote) { + char *comma; + char buf[32]; + + if (promote) + strscpy(buf, migrate_hot, sizeof(buf)); + else + strscpy(buf, migrate_cold, sizeof(buf)); + + comma = strchr(buf, ','); + if (!comma) + return -EINVAL; + + *comma = '\0'; + comma++; + + if (kstrtoint(buf, 0, src)) + return -EINVAL; + if (kstrtoint(comma, 0, dst)) + return -EINVAL; + + return 0; +} + static int numa_info_init(int target_node, struct region_range *range) { if (!node_online(target_node)) { @@ -64,6 +115,7 @@ static struct damon_ctx *damon_sample_mtier_build_ctx(bool promote) struct damos_quota_goal *quota_goal; struct damos_filter *filter; struct region_range addr; + int src, dst; ctx = damon_new_ctx(); if (!ctx) @@ -94,8 +146,10 @@ static struct damon_ctx *damon_sample_mtier_build_ctx(bool promote) goto free_out; damon_add_target(ctx, target); - int ret = promote ? numa_info_init(1, &addr) : numa_info_init(0, &addr); - if (ret) + if (parse_migrate_node(&src, &dst, promote)) + goto free_out; + + if (numa_info_init(src, &addr)) goto free_out; region = damon_new_region(addr.start, addr.end); @@ -171,6 +225,16 @@ static void damon_sample_mtier_stop(void) damon_destroy_ctx(ctxs[1]); } +static int get_migrate_hot(char *buf, const struct kernel_param *kp) +{ + return scnprintf(buf, PAGE_SIZE, "%s", migrate_hot); +} + +static int get_migrate_cold(char *buf, const struct kernel_param *kp) +{ + return scnprintf(buf, PAGE_SIZE, "%s", migrate_cold); +} + static int damon_sample_mtier_enable_store( const char *val, const struct kernel_param *kp) { -- 2.34.1