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 6BB00C77B7C for ; Wed, 2 Jul 2025 20:14:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 08C218D0007; Wed, 2 Jul 2025 16:14:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 03C878D0001; Wed, 2 Jul 2025 16:14:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E472A8D0007; Wed, 2 Jul 2025 16:14:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D08118D0001 for ; Wed, 2 Jul 2025 16:14:49 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 9ECD91A0433 for ; Wed, 2 Jul 2025 20:14:49 +0000 (UTC) X-FDA: 83620427898.25.83F3FC9 Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170]) by imf14.hostedemail.com (Postfix) with ESMTP id 99AB4100006 for ; Wed, 2 Jul 2025 20:14:47 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KP8PXReW; spf=pass (imf14.hostedemail.com: domain of bijan311@gmail.com designates 209.85.219.170 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751487287; 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:dkim-signature; bh=05WnykoPBN9POS7hBQ+YMPJeI35+H/yepYgR/cq36tw=; b=1w+NPyoqjRZHuQQ06WruvGYC5YytKpNyOqEe+oszgdeyAGZmnFrGZOowk3JpWiF3JCT8SV Yg0XYjOI19xW/gjK1SmqQFnKlS/jLGAXRQ1pECrLLv1mX9kF5xPfimzoICis49b+e+A9dP LtYSUfGjB0dkTVXi2Jwl9aoIvR4VoXY= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KP8PXReW; spf=pass (imf14.hostedemail.com: domain of bijan311@gmail.com designates 209.85.219.170 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751487287; a=rsa-sha256; cv=none; b=71ULa7xWnprVORT1Q4SvSMiAaqK+FVEze+cx+eXwNiBvCUjdWqwF5F/QMWB2khe/slqPPa 6fA463L9tf9W3USjtvG4Mo6LJn1slrc2i6alUw8yVcI11zfMDZcIPWtqSNgwZIck9GwKAE 3aWcGuBBuNpknA1yTN29USS0+OKIP8k= Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-e898de36cfbso422528276.1 for ; Wed, 02 Jul 2025 13:14:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487287; x=1752092087; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=05WnykoPBN9POS7hBQ+YMPJeI35+H/yepYgR/cq36tw=; b=KP8PXReW5o7GYMH9/SUq+wRwRaHuLC6M0lRV5omKIaQJG1LDpRizrOfM983E0Zk/tp nhOhkMWTb2KWoP8pJWcNbY4oVkf/UZRDiOA72Xs207UguZ/GU5mlR7jHre+qw6XFYGay VVYB1tjoG8GtSvRDX7EoryqiHOsaRdgV1dkFfHdZfRLS7UNG6bAjj5aAirQCijE9YhWQ Ks0BhVEID7j4oOu6oy8kGZmShV0YOabWLxv2H95hYkprB2VuNo14zXHEavA9t15x2pjG T0vjLCEfKR873WUKzFkv9yjUL9razRFqlkY/m46bCJI4Himjd1l57x2eGW51dOuh1bvM Vfsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487287; x=1752092087; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=05WnykoPBN9POS7hBQ+YMPJeI35+H/yepYgR/cq36tw=; b=tZ52Jw4996e0qiQXnq+pRgtXkZa8oL86GLCcOY6UJ6wPIPvt4AS6UV3BGCa7NSnxou 4aI5/2ZbUOepPHp2ZLKOExCZCzjpJiePjQ7QoaBIIlbHHOyniY8M1m2LgA7XAgAr+cEO Z+W7lGmRhHDV6rYpMppJeuTep7B1Lo87zzMlPoUoxtciY9INLQzleRQOwQP1lB/qGScY hNQqjx4G58IJsd0FEfMBld3NKaCCpDmpW8n4OI0aBRW4noljfYWSg9WIcswHqG87y9iX Dm240FtTLFIRIxMOfmrGHPVz9KbNc4Zv5si8OW62Y+Djo9+4cDVIrvjstJcvNQ56CffV z7Jw== X-Forwarded-Encrypted: i=1; AJvYcCWBICev2HqHQvvfw7C56UkEyzYMnaQSsiknS9KSj5nrT+JtYnq1Py2AGpe6lRf0GG4FTBvtwpeBpg==@kvack.org X-Gm-Message-State: AOJu0YzInuLo98EKAt2Ich9qfKXg1opPNGm9H7XXEB9gF/AlyvKlmG+K evvumwizxv+3uaT0/wROwr6wVirjJ4Dg0tR1cVQkP93HL/9t98aEh73m X-Gm-Gg: ASbGncs/Ll1vQdthS62PryOA+ylw043f8+41/HJgP6xlT9qk+LuUONmH7gXEcuJQ4X8 IMGYvlB5b5AA6KzPx36Ru4cCNsZAgMHlHDnwYBlrLv9ULbGONSuataQWFmDDSwV3JlihKBuOsvh c3hZZRgrODCcttdhhz1tEnFrfu/aS/Bh/8Ot1s3y+7A8nOjS3UE0ib0itRkNeLr8jTJ9QCOlV3U /nGypa/hBKCxFWaXweQ77NAbd2Gd6joR3xXiH2HmotrezCDDbZFbD56gqSmh2TrzeQaxEVzo37g GT51dti7jCXpx27VweVbzQDum9cQmoNiXNhlbZLW3qQje36vL1rmlZMMDuMxKoZWVJaAEtwfYPS ozFnm1OU= X-Google-Smtp-Source: AGHT+IGdUwsGEEhQL1PLrzo57URE3hxXYFvkR0VxlwJ8twSki7T8dKU9zV2AQYAft/rTiox2laS56w== X-Received: by 2002:a05:690c:64c7:b0:70d:ed5d:b4b2 with SMTP id 00721157ae682-7164d2c98demr64954917b3.13.1751487286638; Wed, 02 Jul 2025 13:14:46 -0700 (PDT) Received: from bijan-laptop.attlocal.net ([2600:1700:680e:c000:873e:8f35:7cd8:3fe3]) by smtp.gmail.com with ESMTPSA id 00721157ae682-71515cb4347sm26124157b3.83.2025.07.02.13.14.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:46 -0700 (PDT) From: Bijan Tabatabai To: damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: sj@kernel.org, akpm@linux-foundation.org, corbet@lwn.net, joshua.hahnjy@gmail.com, bijantabatab@micron.com, venkataravis@micron.com, emirakhur@micron.com, ajayjoshi@micron.com, vtavarespetr@micron.com, Ravi Shankar Jonnalagadda Subject: [RFC PATCH v3 09/13] mm/damon/vaddr: Add vaddr versions of migrate_{hot,cold} Date: Wed, 2 Jul 2025 15:13:32 -0500 Message-ID: <20250702201337.5780-10-bijan311@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250702201337.5780-1-bijan311@gmail.com> References: <20250702201337.5780-1-bijan311@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 99AB4100006 X-Stat-Signature: qgjp9sqayd5spyz1jbeuk4mqj4bugexs X-Rspam-User: X-HE-Tag: 1751487287-582808 X-HE-Meta: U2FsdGVkX18Beio8FxdiMM4YB68wc3EPyJD9psvf+nabYyikEX/NqdJIJajQq9K7Rq1WuQ3ZQz4XWoGHuDjT9kxokY/g94bd4jXWKsmIPGf7EqsLGm0Z4hzQBYxpj2apBjZXv4mCjHR/qDgAlI4/qMAnol1vCcfyUTmx5LNNtdaX9iBDpy+BHuajnsbrZo2lKn92AxlbxbyHMFeeX0eeiD5fYK7KnUQhb55XZxBzYN1fEB5OfIegsGWJrSRo/ljm2lV400ndNQUqZFsL2UujYpjqmr4tJK/gDyYaXjQLcDLQtv9Ct9nC753eQ7sPhOqDYImfml2fLiMNqe20CONCD8qZqvHQMY5f2SkRcV2RmAzPaLp3TeDafBgz+qcZ+t5Ic32E+bLLMFuGhEx+3kd9WXbS9K6auv1QDijc4pc8TpCoEcBOiWI2KikKMUXhhRX7zumlsGPFbN6DvkpkcckZNO2qIjRs7gmlX+oVhpoWWEmOd0esI9nrGQlAmk/2wZ2qTo/rlFiblEAXOF2qRp6QBwWJnskU+gCFwmB5DSciPrFLGKM8KlVSTR+emvxBhVjk060Wjypw+CdNbUIAjGZ3k82Mhw/cdIszQbiwLvyO2kMK1pom+r+zjnxrF8h/zs29c2s2Vk2V/D3SSAHH+JwLtNvOtlsfvshcUF+f39aSH5nEHLABnZqpFFstRSPffxkn7ztaZSpHcM7wSFTvGWl9j/N0xqLfdNcPxoqGXJMhYyqWD+DH05lAPJLi+mfJcCj/Q1JS19XDcHpRAbQ7hr3AilAQVPXGROihkJeFT8CYM7h+ybyNZV4k8481Z+Jm5biyYhXKBTyCackDyNF5zEXh3qdftLqAvwKYCMXXfHoDDwDmlUwmZ4BjVYOeVb9vmpqIKDfhg1P2oUn7lZiWXJPOw/M4Z8PtOISlMcw7fzWIQk/gF2DC3aHOV6QGS5CawZogT0Fq40aYrCiot2IwuvW OpF4Nvh6 JeliuQXIuuzDLH9LdnGnTgrkh8ME00VvZPmtPPZhQhfSOjEDkoW1P0g6y3MSJjkf7cohpZ8GR8FUrj93+HlfIHoLbSrmJhiEzuOj1TzA6aAw5fPLnGZaQaap7zR2482BdL6tXbZoYxfc2GKf7g6iCJjc7RikYy9OtTkGyokzjwpDpXJkMsNMjlrTzlhkW34HKuXy3Ym1GSXjX8HYAorVfzgJ6LhotxntmA2J5mw4VJqDm+T4LmMzrTur1Bnuv+tyu7Q3aJmpxRcK06SDWmtGC9XWHsmPAW+64uLK/eeONxLh/lb3zjqxsSUre/VskYz4P3H/4NKJoT4s65VHnZne+cxV1dUQ6w/zAARZdZ8d8kfi3Cs3IES/VP0ECjKXbjGe5C+7F0Liqkxg1sVgjQV5RweKRW3QYB4Fzq3EDNbK0rTu57jCmjGsdFiM1FvXr8lBFnD5dxHnRiQlLAJf5NJ9pWjv2NPnYNWlKARDag6xAMd+YauiftxITMRzE3N4vzPNFpUvkRnf8l7SuPL9VB1y2r8nSr3U5fHn8Jjp03jQUZRQIwVxMRsQkQ2xGdAfKPjwjwMIfODktDjq326fYGCPmo2brchy4j0gb4T59Jf0vfPo0GvMJ2a2AwEIFpg/N9g1Np2Clusb68b8oj1E= 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: From: Bijan Tabatabai migrate_{hot,cold} are paddr schemes that are used to migrate hot/cold data to a specified node. However, these schemes are only available when doing physical address monitoring. This patch adds an implementation for them virtual address monitoring as well. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai --- mm/damon/vaddr.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 46554e49a478..5cdfdc47c5ff 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -15,6 +15,7 @@ #include #include +#include "../internal.h" #include "ops-common.h" #ifdef CONFIG_DAMON_VADDR_KUNIT_TEST @@ -610,6 +611,65 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) return max_nr_accesses; } +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +static int damos_va_migrate_pmd_entry(pmd_t *pmd, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct list_head *migration_list = walk->private; + struct folio *folio; + spinlock_t *ptl; + pmd_t pmde; + + ptl = pmd_lock(walk->mm, pmd); + pmde = pmdp_get(pmd); + + if (!pmd_present(pmde) || !pmd_trans_huge(pmde)) + goto unlock; + + folio = damon_get_folio(pmd_pfn(pmde)); + if (!folio) + goto unlock; + + if (!folio_isolate_lru(folio)) + goto put_folio; + + list_add(&folio->lru, migration_list); + +put_folio: + folio_put(folio); +unlock: + spin_unlock(ptl); + return 0; +} +#else +#define damos_va_migrate_pmd_entry NULL +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ + +static int damos_va_migrate_pte_entry(pte_t *pte, unsigned long addr, + unsigned long enxt, struct mm_walk *walk) +{ + struct list_head *migration_list = walk->private; + struct folio *folio; + pte_t ptent; + + ptent = ptep_get(pte); + if (pte_none(*pte) || !pte_present(*pte)) + return 0; + + folio = damon_get_folio(pte_pfn(ptent)); + if (!folio) + return 0; + + if (!folio_isolate_lru(folio)) + goto out; + + list_add(&folio->lru, migration_list); + +out: + folio_put(folio); + return 0; +} + /* * Functions for the target validity check and cleanup */ @@ -653,6 +713,41 @@ static unsigned long damos_madvise(struct damon_target *target, } #endif /* CONFIG_ADVISE_SYSCALLS */ +static unsigned long damos_va_migrate(struct damon_target *target, + struct damon_region *r, struct damos *s, + unsigned long *sz_filter_passed) +{ + LIST_HEAD(folio_list); + struct task_struct *task; + struct mm_struct *mm; + unsigned long applied = 0; + struct mm_walk_ops walk_ops = { + .pmd_entry = damos_va_migrate_pmd_entry, + .pte_entry = damos_va_migrate_pte_entry, + .walk_lock = PGWALK_RDLOCK, + }; + + task = damon_get_task_struct(target); + if (!task) + return 0; + + mm = damon_get_mm(target); + if (!mm) + goto put_task; + + mmap_read_lock(mm); + walk_page_range(mm, r->ar.start, r->ar.end, &walk_ops, &folio_list); + mmap_read_unlock(mm); + mmput(mm); + + applied = damon_migrate_pages(&folio_list, s->target_nid); + cond_resched(); + +put_task: + put_task_struct(task); + return applied * PAGE_SIZE; +} + static unsigned long damon_va_apply_scheme(struct damon_ctx *ctx, struct damon_target *t, struct damon_region *r, struct damos *scheme, unsigned long *sz_filter_passed) @@ -675,6 +770,9 @@ static unsigned long damon_va_apply_scheme(struct damon_ctx *ctx, case DAMOS_NOHUGEPAGE: madv_action = MADV_NOHUGEPAGE; break; + case DAMOS_MIGRATE_HOT: + case DAMOS_MIGRATE_COLD: + return damos_va_migrate(t, r, scheme, sz_filter_passed); case DAMOS_STAT: return 0; default: @@ -695,6 +793,10 @@ static int damon_va_scheme_score(struct damon_ctx *context, switch (scheme->action) { case DAMOS_PAGEOUT: return damon_cold_score(context, r, scheme); + case DAMOS_MIGRATE_HOT: + return damon_hot_score(context, r, scheme); + case DAMOS_MIGRATE_COLD: + return damon_cold_score(context, r, scheme); default: break; } -- 2.43.5