From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B426D2F5C4E; Wed, 2 Jul 2025 20:14:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487245; cv=none; b=HlcKLWiUQ6fb2xRonRzJ+kUCS6vgOtfro1OD73Qdk5XUgwYLFU+4ADKDDT2Q0wv6Au2oc5Drw3yVr9wjfiMpLRuuLwz+iz3U5a0JcBI1O06vOD8LjAujBwCM4BROl3Dfset11nj47c4A5Vcaa7ePEv9GAXntwpJ4CfZGqDsaP4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487245; c=relaxed/simple; bh=m6rwVvWQAPY0xwQVg9qv36a7gw0jGxN4YhIiDoRIEz0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FY1OnGDvYwk5J0eCAJIqNFvXJ+fmLHo1h2lTCSmxxKCDmZgxSVWAG7JWtA/18yMoA2xl8R+i51qNauJqhWiZQsIpxbH1FjD8RRNz5cqAq6hBDFvHPFNg4o7WThHPys/VCG3/m1+Wc912IP5A5q2ptca5QGmNfMQ9vBaz1AhNICY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VYI38FoL; arc=none smtp.client-ip=209.85.128.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VYI38FoL" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-710bbd7a9e2so50866147b3.0; Wed, 02 Jul 2025 13:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487243; x=1752092043; darn=vger.kernel.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=X8vdOdUxNKsgfVTSqDg8R0nof5JK9i0IVO2A48aHJBQ=; b=VYI38FoL39PRC6DFh8BVg5u+5yiY1r8ehCmVd9tX9IQMcDtOduZiPgU6aziDSPVdr6 EgHWGDYngoD4iLrhdI8cV1jSPx6pD/GXiRyklOET+nLOk5yYf+7TJUsaz9yZORwR+Ob6 qfnKQbDLths1Duz4daoEXYAqHDyvHXfN9lGqBajIiAAIjhSXMqYdujDeZnjrDcpFktJ3 zPVXzDWMGjr5IxkEqxLyO6x0i0tp1Grvu/iRLncOsHryIZnCuO+VFReSk7IfVqTYyYyD Tn8pKSm3yaylqdW3K69VE2owiIujGnj8f2lMwbiYNCkO4e3csHwyuw0lKdiLaFr+FxH5 2h8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487243; x=1752092043; 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=X8vdOdUxNKsgfVTSqDg8R0nof5JK9i0IVO2A48aHJBQ=; b=bLiW7mECYsUHyVmQ4214+uraBCzRpKpIxVlwea10w2qoD52Hm8u4lBQ3X+y9VSgiSD 5d/lyM1SfbDPJbTtRMq7K1tzURvHhW2ZJaGgS7vfQyCwU6rIbXhNfIJRbNH0IqOs2j59 0fEYTSeO/wpECcrMLX1C8OoHNbSZXRux6o24uU6bdB3wvlt6oqEiLnkHtiCZpT8J51dM Sr+rCQQIOW3svKRuiSedbnvyCRXBS1XXzHa2mCZDy7k8EbelmRneIxExtBmrA3z1tA6D kXmWL9GibV+3eclAsuj+JuZAe/6lBP73ehK7KCZTOIfyJGVGnhQ6zLKDblxhPD9UzsUV S2wg== X-Forwarded-Encrypted: i=1; AJvYcCUS4X8QlD9nkVs6lWE08ljQsNW17PwC8Krtr6n/CbLmk+pWpNmnmZlOdQylcuCyILCkz6EeULr6Hl/R1ei5@vger.kernel.org, AJvYcCX47nI9YPeQWFoQ8XC1xSQuKnAtWjMbxjvw+2NjQ2p+fKyvqLuQoIjQIYmy6OewKFqzCwVuXjcUmes=@vger.kernel.org X-Gm-Message-State: AOJu0Yycqe1/tEiHrAErMKeLXOHam05h7B682WbbSVLewF5RlwoECVLw rv6LLPCLoKxwNSETYXaRLx4kLpZGp6yAZHLumwY0gI8URv52NMFFKUzU X-Gm-Gg: ASbGncvYB2Uspm0iRml8awI1SSG0Twy0lhbglCd6IkPZOPLGwXKTirbtHYfrz0OlFio 8dHwDFBg6c+8jROQm59x/BN9gYWL2lpYvHtoy6Yg/WcQDZgt9LFQ2A+BNwgDCT3R7MQ+zD4/Uar 8ep5t7GWWjJ214ZK+P/2pjxoKAaT1TtruBVmWoV0N3lAVyiIMcTeDN/gYLxj3mW6cTXDG5aHpuw aha20uVCmxGES2DXUIkn6nvV0qswMoQFILSteboXLdRemirHlsrZ9bPrbE8YWWo/okmOJbhaJ+V /yA2ByzZZ9s7yd/EVoLD4ZcjyJuL/3EkhHcjtAPR+K39I//160zpOdvJLkNjwci4dWJ7cxICwlb iqAOJw1c= X-Google-Smtp-Source: AGHT+IF/ow1/EWp39STigJig6Khl9tOyh6FQqrPjVZfUunx/eZoW/FNYghundzTyg76yYxu9pfn8Ew== X-Received: by 2002:a05:690c:f8b:b0:70c:bb54:cd05 with SMTP id 00721157ae682-7164d40a246mr62055307b3.19.1751487242197; Wed, 02 Jul 2025 13:14:02 -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.13.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:01 -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 Subject: [RFC PATCH v3 01/13] mm/damon: add struct damos_migrate_dests Date: Wed, 2 Jul 2025 15:13:24 -0500 Message-ID: <20250702201337.5780-2-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: SeongJae Park Introduce a new struct, namely damos_migrate_dests, for specifying multiple DAMOS' migration destination nodes and their weights. Signed-off-by: SeongJae Park Signed-off-by: Bijan Tabatabai --- include/linux/damon.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index bb58e36f019e..24d387a972dd 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -447,6 +447,22 @@ struct damos_access_pattern { unsigned int max_age_region; }; =20 +/** + * struct damos_migrate_dests - Migration destination nodes and their weig= hts. + * @node_id_arr: Array of migration destination node ids. + * @weight_arr: Array of migration weights for @node_id_arr. + * @nr_dests: Length of the @node_id_arr and @weight_arr arrays. + * + * @node_id_arr is an array of the ids of migration destination nodes. + * @weight_arr is an array of the weights for those. The weights in + * @weight_arr are for nodes in @node_id_arr of same array index. + */ +struct damos_migrate_dests { + unsigned int *node_id_arr; + unsigned int *weight_arr; + size_t nr_dests; +}; + /** * struct damos - Represents a Data Access Monitoring-based Operation Sche= me. * @pattern: Access pattern of target regions. --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f181.google.com (mail-yb1-f181.google.com [209.85.219.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86A6C2D9EE1; Wed, 2 Jul 2025 20:14:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487253; cv=none; b=RqYijY/Rby2ISoNpJTfyDSrAzCmBgsLO0Dh5FctbDZgZuhr8pB7ph2pPVuRL6hJvq3DcywH4srU+07WX/kNbPVvP66CRVbO3DfwnVWgPEoATzmzU80ieeF/9788lt2XArMaNtla461Wlza7ugmZjT85DfWkvVCVaedWEvjS8QVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487253; c=relaxed/simple; bh=U18qlnRMvF8tUiyKZU0+IbBdjXfq6BXcXM/9WyxXLgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J+fIYQNirKncwbXjCf0KcPLUudOrmG+KumVg6RtVBtdxXlgoz6vlseKOHyoP0D/KuO28lMDvqxkI6uvgCUS5rxz1wepnwkh1l7EnvHI4ou9Rr5EjEHlk9lXddph1ZueUxxxsHa0HWKkdtEU1IoY4VSVWBw9X2enMuBB1V4lBvCs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cGNHIKnJ; arc=none smtp.client-ip=209.85.219.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cGNHIKnJ" Received: by mail-yb1-f181.google.com with SMTP id 3f1490d57ef6-e8259b783f6so4162501276.3; Wed, 02 Jul 2025 13:14:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487249; x=1752092049; darn=vger.kernel.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=pvXOgWEj8gwTOX4Hs4by3xf7fHgpjkffGomgqbs6dfI=; b=cGNHIKnJDI/om6HTLITGeRvIoB9sXejlK13BJ7mKgFPajjZbH5f91K6Cx0TICeM/5H 1WL41JFx2qqKEyeeo4UYBgrmyypUMKRkK0ZezgbTLwDkheXmK1bEGcQjG1IkbHNs+ems tpuOepO1lk5xM/cIMheYSKIaqKUvVB2HG6tyGcjhj8nL5zSSHC5phgkDd/et9T/1rOxf 9gDpisCKBljkEi4VLUlH4zoPoPZx8+VIq1zmZQHXZxwtFBYYUcmsPBFdYpAFKDr5tDoG 8TMO8I4uyqPZ8ZAI9botrtZNGXZ13LkNHxa78p6a5mzZvZIizHbGom23mBZdAazFuoaN cANQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487249; x=1752092049; 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=pvXOgWEj8gwTOX4Hs4by3xf7fHgpjkffGomgqbs6dfI=; b=Wu3HReqlKNBXl2T82nlknDW/b9gRmXNJ0dDIkKipVDXXHh7cgzVB8OQcAe9Swdg+Mm aygaj38rUfDw7f7u5T99g9ImHY7Q97FsU1JMVFVzmxwpWVWCBr1t1o87Cy+n9lJvU0gT 3vPXOob++ponDivWvFi/su92Yra+hdlxg9QusXrSM73GLWNipmNGLOWsp4wHbs8iCOs2 LxMsi5rP7u4SQAN8cVwwNBy0PbDi5VY+qyeZHnM1BDBVUDzEu5ibg66lAPHY83LL4kjq 26qRHK2aDAYQaWigsFmra0C7f0cg1P0xcjziSNvgNer+gCn4QWgJ5biDgzQPjZZd2eOv 5eRQ== X-Forwarded-Encrypted: i=1; AJvYcCVAuA2GGPVpL30mLw8FyXTB2aBg+hOIalokWrUFOcNk0E3It/vjkDH5MyGcB2fDgFGgE7bAFhCZFIo=@vger.kernel.org, AJvYcCWeKYBhuXwUTZeR1J9ecY4QhKvtmyNjk9bfbteOyZ5xln6EImuY2mrTqBGs5dK85brvpGrIKu7QaAnf9kBL@vger.kernel.org X-Gm-Message-State: AOJu0YziA283EQQJtTiA4GvQKn8B8aBWUptUKJmgTDPhAOl3K+VdWWid xRJqnHFChMAi0JiBuopbmkq5cBe7RrQIZ5uQQ2MRzmJYxeQJN7CrWqbo X-Gm-Gg: ASbGncuRda4XFEVfeDKqcRtczEyxgbRDxHfGYj858HRvHRIBalFjv+78//2OSINPO5m 0stn+QtV7vVxTPScmvETjDSQS8OI35sLRLDdImTY82457UupKu7s75XzAIjz+A0ACoOHYnOV27c /ki8UZhXe73oDH7w3dtWt4la8U48lEbKkI5Af1B5lRIE6c7Zg//v7TIR1oHV/11n/YoBoPWp1Cm BzHxHi9tqN8vl2baOGWkAvUT1Dk4Z5PQVCD39884UvTFjWvNSR3LuL/rSf8bupe5j5mSdZ62O7W O2eJC3BeYv+yuxfFg3e4TPAsIBJvP/o7RDqfoHdfMEJx/MS1C0laIcR8LJpugVII3Vkea5aTtba L5FPUqAY= X-Google-Smtp-Source: AGHT+IEMpagG6TfDMWsd4PaHLbt64WDw3wuuBzpUTGHseeLoF3CNFN3ySWAagT01W26Pujp1VTRWLQ== X-Received: by 2002:a05:690c:7092:b0:709:1529:c24f with SMTP id 00721157ae682-7164d26dba4mr55420177b3.4.1751487249337; Wed, 02 Jul 2025 13:14:09 -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.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:08 -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 Subject: [RFC PATCH v3 02/13] mm/damon/core: add damos->migrate_dests field Date: Wed, 2 Jul 2025 15:13:25 -0500 Message-ID: <20250702201337.5780-3-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: SeongJae Park Add a new field to 'struct damos', namely migrate_dests, to allow DAMON API callers specify multiple migration destination nodes and their weights. Also update 'struct damos' creation and destruction functions accordingly to initialize the new field and free up the API caller-allocated buffers on those, respectively. Signed-off-by: SeongJae Park Signed-off-by: Bijan Tabatabai --- include/linux/damon.h | 13 ++++++++++--- mm/damon/core.c | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 24d387a972dd..6f0b0806236d 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -470,6 +470,7 @@ struct damos_migrate_dests { * @apply_interval_us: The time between applying the @action. * @quota: Control the aggressiveness of this scheme. * @wmarks: Watermarks for automated (in)activation of this scheme. + * @migrate_dests: Destination nodes if @action is "migrate_{hot,cold}". * @target_nid: Destination node if @action is "migrate_{hot,cold}". * @filters: Additional set of &struct damos_filter for &action. * @ops_filters: ops layer handling &struct damos_filter objects list. @@ -488,9 +489,12 @@ struct damos_migrate_dests { * monitoring context are inactive, DAMON stops monitoring either, and just * repeatedly checks the watermarks. * + * @migrate_dests specifies multiple migration target nodes with different + * weights for migrate_hot or migrate_cold actions. @target_nid is ignore= d if + * this is set. + * * @target_nid is used to set the migration target node for migrate_hot or - * migrate_cold actions, which means it's only meaningful when @action is = either - * "migrate_hot" or "migrate_cold". + * migrate_cold actions, and @migrate_dests is unset. * * Before applying the &action to a memory region, &struct damon_operations * implementation could check pages of the region and skip &action to resp= ect @@ -533,7 +537,10 @@ struct damos { struct damos_quota quota; struct damos_watermarks wmarks; union { - int target_nid; + struct { + int target_nid; + struct damos_migrate_dests migrate_dests; + }; }; struct list_head filters; struct list_head ops_filters; diff --git a/mm/damon/core.c b/mm/damon/core.c index bc2e58c1222d..a4c3cfe531df 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -407,6 +407,7 @@ struct damos *damon_new_scheme(struct damos_access_patt= ern *pattern, scheme->wmarks =3D *wmarks; scheme->wmarks.activated =3D true; =20 + scheme->migrate_dests =3D (struct damos_migrate_dests){}; scheme->target_nid =3D target_nid; =20 return scheme; @@ -449,6 +450,9 @@ void damon_destroy_scheme(struct damos *s) =20 damos_for_each_filter_safe(f, next, s) damos_destroy_filter(f); + + kfree(s->migrate_dests.node_id_arr); + kfree(s->migrate_dests.weight_arr); damon_del_scheme(s); damon_free_scheme(s); } --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 333E32F5C49; Wed, 2 Jul 2025 20:14:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487261; cv=none; b=R/eFeXFQ80yv1BOkM4E1vppowSD8PC0Pi0kc6Q5K8l36ZiGXJTdLYY/nNX1c+3nrU9J834HJoqDPaBdfA5MGAV+tsimQytarpsj+LbGj3E1PF7F+TH8eygLQlMzkUcQDTAsuMOhLBCmudZfzY2ViqWrviq+ICuzzY3ga+9LJLF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487261; c=relaxed/simple; bh=3euwdPgDUGI0g1cVnpDdDa3NasDn+36g8DZQS4wsxSM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G9Y8lS04Igty2MP23T1UArzaDsxFmAM4QsekYvcwXT0WKsb0WH7DtFG3F9TxNMhwEtgR+cFfuP7AZc4xFd4mcApUH5SLVJfkF3J1rZB0Np6zUXsjQIrBut+VHZSAgF44p30o7+BlGBQ0qR07LuNQlRE+saoOGjZwZ/+5hQ8cuLY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=P8yqgB9b; arc=none smtp.client-ip=209.85.128.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="P8yqgB9b" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-70e64b430daso53464787b3.3; Wed, 02 Jul 2025 13:14:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487258; x=1752092058; darn=vger.kernel.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=Ka2lHJKibszvD814XqK78W02tftJp26/CMGv/fNrDPI=; b=P8yqgB9b98EVjThUFLF7N+mT4LjCn/e78cx04KtTmdLNT/JJ7HGS1ET55LXZmFPkgU du2vDoOvMR6x2xIbcVr/wpSyb/G9HGb2pD+jkCt0tnZ6KKYZlGrn1wWUhsV/7UR9l0o9 XTBIwTahIxdqHySvS3BJzOIIQCw9Ux1RD58MeVEodqzuYLyQ2lPrQYCYGGjxiHD8FD9k TM9GRN96ewlGWPNHOkZIj+eCEqZTp4l2Ura0PyS2X0vilT1/JJZMsL+Vd2eaGVkf756G PYn5Svz1hnV/WYvaIeyUYTJtV+271Rje+3lP58nqfFcrYcj0BMJJq6IbLpaSQjP8eLsx PYEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487258; x=1752092058; 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=Ka2lHJKibszvD814XqK78W02tftJp26/CMGv/fNrDPI=; b=AKH6EgeCWqMKEQjSQcghwZgMGkc5oPR7WerQXCHumd8EcPdkb10q3F5F+cF+u64+gj QC825mK3IXxKDBfPLYpsH6t6t8N8X0BbOO2HAffM3GjgBGAFDBByY/wQKzWYXe2w5YAu fSj7ZIk3R6aOIfIw/+4j1dPwXxEsMAizwW4SRP4Ltdz0rYgnwFRXaWELzJZ0PbkqncTd NXb3+ieJLigwGxBZrRkpBXU8c5QG6xOZZuC9nkzd9qINcp2IrC5MNJmSzgoeXHzWQ8Lc 9ftNDsUUPSq1mrr9GQe8Y4N5ngRM8bms0kxrqR86Is5OMl57WP/TQo/J89wqSnwggcZf SfMw== X-Forwarded-Encrypted: i=1; AJvYcCWxECp0bd+RDn39fGloeRx+ywuXXCsZbrFLxxWF/FaqyFNp2rUc8oMbNfqsH9HAgt8LABB/VcdUY0A=@vger.kernel.org, AJvYcCXKo2oH1jraTCNmeYOTP2IfHC1S8BdFJ2IYeVwu0uZtnQ1Bhsm+Pct11l9N6puUsF06dqhhTQMl/AdQ8Kjg@vger.kernel.org X-Gm-Message-State: AOJu0YxMoIF/gqCQCNVDYO6iq2cCERavnvTvYsO0XViNNFup3vxd8vWG JyeVLo4eSbJDLzDywFoboAyOE3+2k30TmReIGTrq+mJ8WaM93PBS4ct7 X-Gm-Gg: ASbGncutaZMj4k2Km/xQO0tunpofcw//VQu0A3wIJFgIf7yGBuqm/deVLEj3qHIwewV Ei8+8jmy42uRoTfiH7/rkwgmJso70EFek5g0qp7rSZYeYqpFqDPut33GJ5ZC6gPpWd7dCwiGurq DOzd0WKvhhYJM/91JLkRWVodu5LPLe7Fi/Ib2wah5s/HKuafpSub0M65iMQbmw1w1PTa/TeiGlz u2jAcDK0Dmrn+gwJSUGsCby08UyiAcQoAgy8vRynoKMSpV2nNayHPPuaDGj6tRsxwvlhlT6//g7 es0qvsvhC+q5vzcZGUc1c4jIXogyMxrUYPM3EqGr/B9a5strIOKb6tpncvr3af/C0hJQV3G5DTY 6SzFWcv1UIjzDfsXThQ== X-Google-Smtp-Source: AGHT+IE3dlhWUQcRHaBMecK1cT77BYAqbxJi6TZDV3Mx4tnnVo3pxRt5aw3J+eVaop43IyeQiBIT1A== X-Received: by 2002:a05:690c:6513:b0:70f:8884:a5fc with SMTP id 00721157ae682-7164d27d031mr57275137b3.4.1751487257720; Wed, 02 Jul 2025 13:14:17 -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.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:17 -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 Subject: [RFC PATCH v3 03/13] mm/damon/sysfs-schemes: implement DAMOS action destinations directory Date: Wed, 2 Jul 2025 15:13:26 -0500 Message-ID: <20250702201337.5780-4-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: SeongJae Park DAMOS_MIGRATE_{HOT,COLD} can have multiple action destinations and their weights. Implement sysfs directory named 'dests' under each scheme directory to let DAMON sysfs ABI users utilize the feature. The interface is similar to other multiple parameters directory like kdamonds or filters. The directory contains only nr_dests file initially. Writing a number of desired destinations to nr_dests creates directories of the number. Each of the created directories has two files named id and weight. Users can then write the destination's identifier (node id in case of DAMOS_MIGRATE_*) and weight to the files. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 225 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 224 insertions(+), 1 deletion(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 601360e9b521..b9434cdaacdc 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1655,6 +1655,204 @@ static const struct kobj_type damon_sysfs_access_pa= ttern_ktype =3D { .default_groups =3D damon_sysfs_access_pattern_groups, }; =20 +/* + * dest (action destination) directory + */ + +struct damos_sysfs_dest { + struct kobject kobj; + unsigned int id; + unsigned int weight; +}; + +static struct damos_sysfs_dest *damos_sysfs_dest_alloc(void) +{ + return kzalloc(sizeof(struct damos_sysfs_dest), GFP_KERNEL); +} + +static ssize_t id_show( + struct kobject *kobj, struct kobj_attribute *attr, char *buf) +{ + struct damos_sysfs_dest *dest =3D container_of(kobj, + struct damos_sysfs_dest, kobj); + + return sysfs_emit(buf, "%u\n", dest->id); +} + +static ssize_t id_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damos_sysfs_dest *dest =3D container_of(kobj, + struct damos_sysfs_dest, kobj); + int err =3D kstrtouint(buf, 0, &dest->id); + + return err ? err : count; +} + +static ssize_t weight_show( + struct kobject *kobj, struct kobj_attribute *attr, char *buf) +{ + struct damos_sysfs_dest *dest =3D container_of(kobj, + struct damos_sysfs_dest, kobj); + + return sysfs_emit(buf, "%u\n", dest->weight); +} + +static ssize_t weight_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damos_sysfs_dest *dest =3D container_of(kobj, + struct damos_sysfs_dest, kobj); + int err =3D kstrtouint(buf, 0, &dest->weight); + + return err ? err : count; +} + +static void damos_sysfs_dest_release(struct kobject *kobj) +{ + struct damos_sysfs_dest *dest =3D container_of(kobj, + struct damos_sysfs_dest, kobj); + kfree(dest); +} + +static struct kobj_attribute damos_sysfs_dest_id_attr =3D + __ATTR_RW_MODE(id, 0600); + +static struct kobj_attribute damos_sysfs_dest_weight_attr =3D + __ATTR_RW_MODE(weight, 0600); + +static struct attribute *damos_sysfs_dest_attrs[] =3D { + &damos_sysfs_dest_id_attr.attr, + &damos_sysfs_dest_weight_attr.attr, + NULL, +}; +ATTRIBUTE_GROUPS(damos_sysfs_dest); + +static const struct kobj_type damos_sysfs_dest_ktype =3D { + .release =3D damos_sysfs_dest_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damos_sysfs_dest_groups, +}; + +/* + * dests (action destinations) directory + */ + +struct damos_sysfs_dests { + struct kobject kobj; + struct damos_sysfs_dest **dests_arr; + int nr; +}; + +static struct damos_sysfs_dests * +damos_sysfs_dests_alloc(void) +{ + return kzalloc(sizeof(struct damos_sysfs_dests), GFP_KERNEL); +} + +static void damos_sysfs_dests_rm_dirs( + struct damos_sysfs_dests *dests) +{ + struct damos_sysfs_dest **dests_arr =3D dests->dests_arr; + int i; + + for (i =3D 0; i < dests->nr; i++) + kobject_put(&dests_arr[i]->kobj); + dests->nr =3D 0; + kfree(dests_arr); + dests->dests_arr =3D NULL; +} + +static int damos_sysfs_dests_add_dirs( + struct damos_sysfs_dests *dests, int nr_dests) +{ + struct damos_sysfs_dest **dests_arr, *dest; + int err, i; + + damos_sysfs_dests_rm_dirs(dests); + if (!nr_dests) + return 0; + + dests_arr =3D kmalloc_array(nr_dests, sizeof(*dests_arr), + GFP_KERNEL | __GFP_NOWARN); + if (!dests_arr) + return -ENOMEM; + dests->dests_arr =3D dests_arr; + + for (i =3D 0; i < nr_dests; i++) { + dest =3D damos_sysfs_dest_alloc(); + if (!dest) { + damos_sysfs_dests_rm_dirs(dests); + return -ENOMEM; + } + + err =3D kobject_init_and_add(&dest->kobj, + &damos_sysfs_dest_ktype, + &dests->kobj, "%d", i); + if (err) { + kobject_put(&dest->kobj); + damos_sysfs_dests_rm_dirs(dests); + return err; + } + + dests_arr[i] =3D dest; + dests->nr++; + } + return 0; +} + +static ssize_t nr_dests_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damos_sysfs_dests *dests =3D container_of(kobj, + struct damos_sysfs_dests, kobj); + + return sysfs_emit(buf, "%d\n", dests->nr); +} + +static ssize_t nr_dests_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damos_sysfs_dests *dests; + int nr, err =3D kstrtoint(buf, 0, &nr); + + if (err) + return err; + if (nr < 0) + return -EINVAL; + + dests =3D container_of(kobj, struct damos_sysfs_dests, kobj); + + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; + err =3D damos_sysfs_dests_add_dirs(dests, nr); + mutex_unlock(&damon_sysfs_lock); + if (err) + return err; + + return count; +} + +static void damos_sysfs_dests_release(struct kobject *kobj) +{ + kfree(container_of(kobj, struct damos_sysfs_dests, kobj)); +} + +static struct kobj_attribute damos_sysfs_dests_nr_attr =3D + __ATTR_RW_MODE(nr_dests, 0600); + +static struct attribute *damos_sysfs_dests_attrs[] =3D { + &damos_sysfs_dests_nr_attr.attr, + NULL, +}; +ATTRIBUTE_GROUPS(damos_sysfs_dests); + +static const struct kobj_type damos_sysfs_dests_ktype =3D { + .release =3D damos_sysfs_dests_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damos_sysfs_dests_groups, +}; + /* * scheme directory */ @@ -1672,6 +1870,7 @@ struct damon_sysfs_scheme { struct damon_sysfs_stats *stats; struct damon_sysfs_scheme_regions *tried_regions; int target_nid; + struct damos_sysfs_dests *dests; }; =20 struct damos_sysfs_action_name { @@ -1762,6 +1961,22 @@ static int damon_sysfs_scheme_set_access_pattern( return err; } =20 +static int damos_sysfs_set_dests(struct damon_sysfs_scheme *scheme) +{ + struct damos_sysfs_dests *dests =3D damos_sysfs_dests_alloc(); + int err; + + if (!dests) + return -ENOMEM; + err =3D kobject_init_and_add(&dests->kobj, &damos_sysfs_dests_ktype, + &scheme->kobj, "dests"); + if (err) + kobject_put(&dests->kobj); + else + scheme->dests =3D dests; + return err; +} + static int damon_sysfs_scheme_set_quotas(struct damon_sysfs_scheme *scheme) { struct damon_sysfs_quotas *quotas =3D damon_sysfs_quotas_alloc(); @@ -1894,9 +2109,12 @@ static int damon_sysfs_scheme_add_dirs(struct damon_= sysfs_scheme *scheme) err =3D damon_sysfs_scheme_set_access_pattern(scheme); if (err) return err; - err =3D damon_sysfs_scheme_set_quotas(scheme); + err =3D damos_sysfs_set_dests(scheme); if (err) goto put_access_pattern_out; + err =3D damon_sysfs_scheme_set_quotas(scheme); + if (err) + goto put_dests_out; err =3D damon_sysfs_scheme_set_watermarks(scheme); if (err) goto put_quotas_access_pattern_out; @@ -1927,6 +2145,9 @@ static int damon_sysfs_scheme_add_dirs(struct damon_s= ysfs_scheme *scheme) put_quotas_access_pattern_out: kobject_put(&scheme->quotas->kobj); scheme->quotas =3D NULL; +put_dests_out: + kobject_put(&scheme->dests->kobj); + scheme->dests =3D NULL; put_access_pattern_out: kobject_put(&scheme->access_pattern->kobj); scheme->access_pattern =3D NULL; @@ -1937,6 +2158,8 @@ static void damon_sysfs_scheme_rm_dirs(struct damon_s= ysfs_scheme *scheme) { damon_sysfs_access_pattern_rm_dirs(scheme->access_pattern); kobject_put(&scheme->access_pattern->kobj); + kobject_put(&scheme->dests->kobj); + damos_sysfs_dests_rm_dirs(scheme->dests); damon_sysfs_quotas_rm_dirs(scheme->quotas); kobject_put(&scheme->quotas->kobj); kobject_put(&scheme->watermarks->kobj); --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 480092F7D15; Wed, 2 Jul 2025 20:14:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487264; cv=none; b=MR1Pl1jQE0UjcWwpEMP8bZaKJoMChPKAokJOjDoTTxN8PLq8lzbcblvybsCyi8+HtHVLg/c3VD42geWmr2a/uVzBT5cCgd5EPthIdp4ecGQnITiY8eX7WRl64IJQPoLlXShRw3Zk8434cex2bcvb+/SXyacLcxMPwsTd13l8XK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487264; c=relaxed/simple; bh=6ckvsTJ0k3MJxqXPk4gHWmVH8SQj1M0to+OoYwY2kBE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kJzURkscPl5+7UQqQZNOhSPD6qOn2t9p8b3alCDnH10YNf4bU1e6banRqRFbCJB+z2Nr3j0Wb8aC3AqzbOig9Am5YCifGqKSsz1Kddfny5UyN28UZvwVfmemWe+nL5CFRJXlasuIZado521Ddp8bVItU5xA3qr9lwj2rmKx+t58= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HUurx5cg; arc=none smtp.client-ip=209.85.128.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HUurx5cg" Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-710f39f5cb9so71377537b3.3; Wed, 02 Jul 2025 13:14:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487262; x=1752092062; darn=vger.kernel.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=YV7c5B61vQxWIW6brHrpvujjHlceZq5NHO+Y3rO8xqg=; b=HUurx5cgzeyIMTKraUYtV1RfvKmflvhzyKxM96nC8zKo3bQBZA2NQ0SzyxsYA7Othr xjo1e2iBMpDtAyVYGlzD+6fijGK2rFBh0ThU/yAnWl4DBzHy9OEeAQTNcYDv55A7fejs k/sLD6sx4pOd1WRi5wYNDV856Tz6SvsKWek07yJ4pkpz8VJHDP4WvbJzARbQ/qJ4ov2N DPsGLZcMW+uXu0nfTvhVA4r4fagGKp2AgJC8JoU4qiaxVWeh3LtwQT7YYr6WqFg+ae3L 5d/0GQa6a4v5WG1SA0S+gHvhiKEMw1jlX6Ut3vVJRuZrvUrd0N4IrTEryPtpdnKkUj42 bkgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487262; x=1752092062; 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=YV7c5B61vQxWIW6brHrpvujjHlceZq5NHO+Y3rO8xqg=; b=WbEdGZn3al6Dt3STVYdfzPfBmbFZzO+SPHqGAn8AB20Wh/ptKj7FlimeBQAa+a6KdE gonE2SlZSAJ/HiGDyOmWLZVwiUTc/ylTsXrdDqIA1ccEqgsXIZOR+R7uj0w0X8ejv14z kwsmKufajEBqt6p//1Sa9ULqI+s6ZRKDWDCf8KfpxW8lFUWqAswRnwSh/CJJbVko+LxB 4xNcCTn+v61ovHNCsSYfcpobJ9ch/sZaZg2FZ8P++IGIO6sL2wlJZZ37RIR/Sn0UdzsL v54svypTodV8pEYx6dlj40Xc5QEzyZmN/fwOWADF3QfnsQQWJyVMrCWxSsQXgjYwFK6v iJ3A== X-Forwarded-Encrypted: i=1; AJvYcCU9gYtOHJHfUWWry4tXvn/DV0ybcQf5TDAAc4aN4JNioIUjl+9LhnlspjSIuhYzeLAvXQZuGgvw2MU=@vger.kernel.org, AJvYcCXHSNTEijtFaaNklptfIR0wfVaorEweXEBoXp4OMce4wd47u+cY64CBFB8mUEBKA+SZOOrRSecFHMxfQKEf@vger.kernel.org X-Gm-Message-State: AOJu0YybjcqB1AU9P15TO+d6bXUMnloXDV9YTF1D0QF7ba3MLbeikZQr dqaGBNbBrrnxC7ojjpLSyTZmTaMFcHYGTftsytBJErR/sPMyMJXPmYQb X-Gm-Gg: ASbGnct4tGWDAmjaV0z9M/sPekcwciBOy6Dl4UuG/6h09A5EH9zPZaO6yJEeBfNQ1d5 ld9sJRNISogRl7A6THQRyaUDOi4SARsirQK6RiCIy+CbZc5B2H8t6ciwd+9mt0J2ZWlxjJ7D/PT di2afgPRPZZ8PHD6NC9Ei0KEoDNhQy0CWIBJxxObijipCSVQ4Gz121boTMN6SDCmxpTRYcCamxm P1yQG/MTDoJ1xfbQqMl/b0i9ZsTEy69dOATvvUAXNFArdZ38TvRhwaGi6IxHsCuDJB12qwRQv1q u01ikeCHwns0q5NPhPBNcbNCzLRatkOBxPG5my2l3YxPqRkD5QxQ99W6dJ9ZSuDMccnx4O3UewS I0LD0F1s= X-Google-Smtp-Source: AGHT+IHp1CXE+NbRDNbbZ1RkBJrHvXGjBoQplUW4P2ktChHA+wcWgIrifVUCN244xHgPY9Y9aBH+kg== X-Received: by 2002:a05:690c:6ac5:b0:712:36f3:f6d7 with SMTP id 00721157ae682-7165a3e0987mr5233677b3.32.1751487262117; Wed, 02 Jul 2025 13:14:22 -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.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:21 -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 Subject: [RFC PATCH v3 04/13] mm/damon/sysfs-schemes: set damos->migrate_dests Date: Wed, 2 Jul 2025 15:13:27 -0500 Message-ID: <20250702201337.5780-5-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: SeongJae Park Pass user-specified multiple DAMOS action destinations and their weights to DAMON core API, so that user requests can really work. Signed-off-by: SeongJae Park Signed-off-by: Bijan Tabatabai --- mm/damon/sysfs-schemes.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index b9434cdaacdc..74056bcd6a2c 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -2576,6 +2576,29 @@ void damos_sysfs_update_effective_quotas( } } =20 +static int damos_sysfs_add_migrate_dest(struct damos *scheme, + struct damos_sysfs_dests *sysfs_dests) +{ + struct damos_migrate_dests *dests =3D &scheme->migrate_dests; + int i; + + dests->node_id_arr =3D kmalloc_array(sysfs_dests->nr, + sizeof(*dests->node_id_arr), GFP_KERNEL); + if (!dests->node_id_arr) + return -ENOMEM; + dests->weight_arr =3D kmalloc_array(sysfs_dests->nr, + sizeof(*dests->weight_arr), GFP_KERNEL); + if (!dests->weight_arr) + /* ->node_id_arr will be freed by scheme destruction */ + return -ENOMEM; + for (i =3D 0; i < sysfs_dests->nr; i++) { + dests->node_id_arr[i] =3D sysfs_dests->dests_arr[i]->id; + dests->weight_arr[i] =3D sysfs_dests->dests_arr[i]->weight; + } + dests->nr_dests =3D sysfs_dests->nr; + return 0; +} + static struct damos *damon_sysfs_mk_scheme( struct damon_sysfs_scheme *sysfs_scheme) { @@ -2638,6 +2661,11 @@ static struct damos *damon_sysfs_mk_scheme( damon_destroy_scheme(scheme); return NULL; } + err =3D damos_sysfs_add_migrate_dest(scheme, sysfs_scheme->dests); + if (err) { + damon_destroy_scheme(scheme); + return NULL; + } return scheme; } =20 --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDF112F6FB8; Wed, 2 Jul 2025 20:14:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487269; cv=none; b=pkAw0b86rGGLEBpnjNEQ375XIcghYD7vUv7PRlS1hpZJeGztvxoytTbyuVeIr9gAyj9EFCC4kkaoVQM0TJDNIzTNC/WZDZ4mBOk2vfmmT7Ka+aHBgOsAfsQXxq0NOhTR6Mlja/4fNnNVqiy/UQ1tVI27Knr/jyX9NwWgLIbThPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487269; c=relaxed/simple; bh=u39v0zZeyjiQzeN38fl08Se0MVq9BWlAg6GHNyHASGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DHqvWM5+zKQkDDjhnMbiHSwtfXEPw4c1GRWCpumhathgZrBQysy6+ci2mVoPvsqIkAbMnyoa+KpmlurehoCd32FSMaCeqhVhvL1ecFsfaVHD8BOZLiMGVwd4gZi2aWTFMaxNTEol5tghppKk3JCuBaZZhkr0dgAYZtB8EWJy8wc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jC52YU/y; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jC52YU/y" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-70f94fe1e40so3724957b3.1; Wed, 02 Jul 2025 13:14:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487267; x=1752092067; darn=vger.kernel.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=0lrqRfIbiznaxiPBqXSvk2Fj8kr9UwyfETV9qJL2pdI=; b=jC52YU/ymUshWPmy3OJtKUuNWgIg45qx6PjLME2FIc/570Ke5rfPsr3396V+GN4TT+ MH7miwYwuzRLXJeI2IeA9BodxIHPMtj0A6K6bcKYoEoc58sMn53bmptfY+J7zjdIzKfU yYO9XnDdq7nEzNOG3O5+2Jdw4ONgBAk8bKA524ly+OzjtcBvp4sYGjvGpjcwLfZ5tJfj z06VVSHA4JKSPcoCNaRtQAAe2tE9jZQQH9T1PatRDUojd9CJ7OIjoPvMKzfs9o2wRZ2P 4NBSutlPXEvFOPFroqcuQqoZt1Jmi3jO1NxEIMtD/v63CIi179EU9ylN/ua48BeOHI0J Kbnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487267; x=1752092067; 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=0lrqRfIbiznaxiPBqXSvk2Fj8kr9UwyfETV9qJL2pdI=; b=kiDdoxMRzYZ5vM/P7TCL34bk5KxunK3JpCFl6wkM4ifekonhB1Q2lNAK9ZJes/Dop8 t0SDSoo87HusQgopHWFpKZ8mwzccDtpw4n25UriHTuAKEug3RCylReBAm3/HGK9do/w2 6Z+unKI5HZGU0LpsIn71Xv2UkYecK3+sdQD7QiCTQNFmI3BJDhJ0cLA66xx47dv+QVK6 aC+XDghOXYxwkzTtZCzyexm5VNvivONjHXCikSxKP/mWiKEriNDaPtu3Eoci8bCDt9BJ 7vi6JR4E+E0GUpTcPSS+0m1/oL6HFhjbjHgCIlPYT6ZIcsq2rutpU7CEQXkxyQryHVLZ a1Yg== X-Forwarded-Encrypted: i=1; AJvYcCVwMLmA6bAI6uPxUWY/0HX7uFhF6KraijjBsrQXUj+v3OpDbqft2nH+c/LMcJ1BXOiojDmadfC2ygc=@vger.kernel.org, AJvYcCXC/d7wlArxnGGJFxpMf07aylM9/SiZC+QY4PrAXoE82ErrsLZv1WW9Ru59KzpR27LmGFUuScmrpGz/teaT@vger.kernel.org X-Gm-Message-State: AOJu0YzqX7MN9ld5aNXgUuHK/RCdhjkj2sj76Kfc22sMrnKKvv05Vz9l 3owEzrClIQEQOx9XtioUiTmWu+ni4HxTY3Oc0nVuEqC1SD1ryMaEalB6XFUJx/ztfoQ= X-Gm-Gg: ASbGncuVgyJX/z/RfsZXReaEHsXgohwhcZGpEdESwkgp6SGGPpmtHFL5lHXXgVAqrVR Z3bpccRGchNedC87/IdpVSDecKKYu7NO3aiJWYpAlnwMJyI4h1MICtmykPp3fB4krIwupCYt1Ux FFEeRMPbxsCzdd8Q/+QMVIYStjzpsvQd0+hD9lrgy//FX6Iu0cn/qjVBcW2A+/a0PS4k0q6uFqJ yGY83yDfVwM2/CVFOtX/fiFVYz35ibK411T6i2UeMD8LO5wjkh6givIHSUcV+hAJaY31YBGR1/F mgAoNq9bMZs0diW8j6xySATQb147qa/PikuuLEXMmeqMVIvAaFnRgeG24SL2Um0op58Ly7wMscV D2o702hA= X-Google-Smtp-Source: AGHT+IGJzaqxYxk/z8axkYLbzkciZC3H6cDkoswua37kH/fx062ueaRa2kXVMDmpRDd/R39IV+DhUA== X-Received: by 2002:a05:690c:6002:b0:703:b47a:7312 with SMTP id 00721157ae682-7165918c718mr14469857b3.15.1751487266879; Wed, 02 Jul 2025 13:14:26 -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.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:26 -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 Subject: [RFC PATCH v3 05/13] Docs/ABI/damon: document schemes dests directory Date: Wed, 2 Jul 2025 15:13:28 -0500 Message-ID: <20250702201337.5780-6-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: SeongJae Park Document the new DAMOS action destinations sysfs directories on ABI doc. Signed-off-by: SeongJae Park --- .../ABI/testing/sysfs-kernel-mm-damon | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-damon b/Documentatio= n/ABI/testing/sysfs-kernel-mm-damon index 5697ab154c1f..e98974dfac7a 100644 --- a/Documentation/ABI/testing/sysfs-kernel-mm-damon +++ b/Documentation/ABI/testing/sysfs-kernel-mm-damon @@ -431,6 +431,28 @@ Description: Directory for DAMON operations set layer-= handled DAMOS filters. /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes//filters directory. =20 +What: /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes//de= sts/nr_dests +Date: Jul 2025 +Contact: SeongJae Park +Description: Writing a number 'N' to this file creates the number of + directories for setting action destinations of the scheme named + '0' to 'N-1' under the dests/ directory. + +What: /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes//de= sts//id +Date: Jul 2025 +Contact: SeongJae Park +Description: Writing to and reading from this file sets and gets the id of + the DAMOS action destination. For DAMOS_MIGRATE_{HOT,COLD} + actions, the destination node's node id can be written and + read. + +What: /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes//de= sts//weight +Date: Jul 2025 +Contact: SeongJae Park +Description: Writing to and reading from this file sets and gets the weight + of the DAMOS action destination to select as the destination of + each action among the destinations. + What: /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes//st= ats/nr_tried Date: Mar 2022 Contact: SeongJae Park --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F365D2FC3BF; Wed, 2 Jul 2025 20:14:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487274; cv=none; b=ChShHupEcEs46rkKtFwBkqX4NOCdaA2qjlL5g4lSwdzfh9X4ICNFuUSCIa/uuBylUrxu+3/CmkG8o0w5od1JdV5lvpAnCqrKAtTBjqZz/IgC9KAAJjqs5jiE46gwgYWOgG2sI71/3CYuN7iREMMRr6Tv+uSumG36UvvhIRK+ys4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487274; c=relaxed/simple; bh=zBWqLe/8w6jQy04hgGoAjOSCfh9MU/i5qTJrnQF83+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cmUYHRF9FDaQAaIbIJ1KqxQc4RvWMiw/U4snKH2eZ8+uOU+VwmDBQnq5LBAjIAxwyQE1NtIFbDzIhdyt/hMXlsPlghbL6KvmIZU1DDIZ2uR1CqehK1FEnXei6os3YGekhOT5wLK+VPzg9DZVHL9+tj861v3JhuJVm0bh1LnCpg8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fIU/Jg9h; arc=none smtp.client-ip=209.85.128.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fIU/Jg9h" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-7086dcab64bso46245197b3.1; Wed, 02 Jul 2025 13:14:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487272; x=1752092072; darn=vger.kernel.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=whp07KqijnEckNg3QoMixvcYpADgEZZkHKJXbQWF63Q=; b=fIU/Jg9hfpMDlyAGpyhIXRZ9ZkGk4E7WFoE2+d4gc1XwsLWk5UAnVn7CqBcw+DN4L5 ivs1Cj4zkk4z4ILI+VpzOmwb76Pv3koVh0+OtCXSM5z/nzz+pPSzyqolZ2IFVso387Ch cTNGQFN6SenGeNNiTLa1QlyPJnLn8+/mJEo7kwhcwv/YvdPJMXzb9LUcSoAW4DoNyn6Q N6rXl/TRtsotUEarqXapss8N0WhVfFLdZLfxJyS7WSSvxzSUAGOvmJxRt7hpYWPQyJ1S bAH2/Qw8MhJLlSkfw8CtRJJe25Au5Nl+ivhILeI0jeb+DJxpAMKnbLOwwOgQNH088Op+ XpKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487272; x=1752092072; 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=whp07KqijnEckNg3QoMixvcYpADgEZZkHKJXbQWF63Q=; b=Uo/I6j1iBf36CCfbnRwoS7DEBhZ3kIYQ1FOoC7iwftWM5s0pTQD6wZHCBy2uQZ81QB AJuctZuYwaN8A12YZ2eP9aGZ13nC9hao6XKxU8TaxFgAz/xzXPivU0buU7zB5P5pcpei E+3MGglQ6U1n2XT8CdWGdwdBcWq14xzgV36vKeT8LpF/vlDXTBxvIFwY0p5vuTeJ19b3 eX0lMeX5xFuQ+Rp5ZdfIshftG2IFEL++oEnx0ocAsC3Lo5YshSCyw6yYlSQXtfZ6CchF UuXb6vwaIfu1crl5/ACeFynKNKcyhxIjDt63WYRnRr1N69e/RBjcws8jA9P2SELicLSP fa7Q== X-Forwarded-Encrypted: i=1; AJvYcCUm31fw+jgAGCZHIJkphJI0+7BQeQpYAEiNipuTTOqNw6NwVsNGcyA8nnBEQ6WnpRfapmgUQqS40kQ=@vger.kernel.org, AJvYcCXpS9w/jBOY5Z1owZS3ETiwRuO9SV/JY8ECtofnIWRP4ZpzOJO+VXtTPlvpccaFJ3t26JVWLIyxLUJdfHrE@vger.kernel.org X-Gm-Message-State: AOJu0Yye5BVrXOw5G0hH4Q2zjmGQd8/B0o7+YhbPqf1BJg5M7CDJgvcl JdqIJEy/5bcdJxHBss3ubyF04skXHYQ3C1rsvEvDDxtcYTuil5ZrPDar X-Gm-Gg: ASbGncsFov6CAFhBcEKnpRy6XdsJTD3VBfM3c8c4+dngI5ipcOnMjnOKGxWA0CDmg5r cnJ6Cw5zla6915bNoIZmEBjqZ18mD0SCKACEcx0ND9FiS1IxK6RpOhpGqufUbnRms5gdtUTYcWK sLr7Gdj+9GWCR2viMAxRGxoshbeTn7znUGnQdlEZuszByHXDee8U6i8i4wt9QfYAM2SYhssKM0h tRSYJOtot6H18kZcN2ZjQgcJWbNzKRpunqTEOd3UydmIdsz+9AXr7OcDO6fXH/D6K6HwHSYhyNE VEmZH9oVCaV22B+/4wnEeXwwRdKxUPgVYSa+AgMIPCBw7IsSt5jGLFlafefK8temR0yR7/0GG92 pW4EwDE2yFXQlseWMMw== X-Google-Smtp-Source: AGHT+IGTS3C4MNCq+aw22xTnq01sw8nUASYU0w+f4Bsq2yNG7missxlZkISVB8+vcdsLs6QkRmv8xA== X-Received: by 2002:a05:690c:6308:b0:711:41a5:482a with SMTP id 00721157ae682-7164d46a2d2mr64613437b3.27.1751487271759; Wed, 02 Jul 2025 13:14:31 -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.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:31 -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 Subject: [RFC PATCH v3 06/13] Docs/admin-guide/mm/damon/usage: document dests directory Date: Wed, 2 Jul 2025 15:13:29 -0500 Message-ID: <20250702201337.5780-7-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: SeongJae Park Document the newly added DAMOS action destination directory of the DAMON sysfs interface on the usage document. Signed-off-by: SeongJae Park --- Documentation/admin-guide/mm/damon/usage.rst | 33 +++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/a= dmin-guide/mm/damon/usage.rst index d960aba72b82..fc5c962353ed 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -85,6 +85,8 @@ comma (","). =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`watermarks `/metric,interval_us,high,mid,low =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`{core_,ops_,}filters `/nr_filters =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,m= in,max + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`dests `/nr_dests + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/id,weight =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`stats `/nr_tried,sz_tried,nr_applied,sz_applied,= sz_ops_filter_passed,qt_exceeds =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`tried_regions `/total_bytes =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/start,end,nr_accesses,age,sz_filter_passed @@ -307,10 +309,10 @@ to ``N-1``. Each directory represents each DAMON-bas= ed operation scheme. schemes// ------------ =20 -In each scheme directory, seven directories (``access_pattern``, ``quotas`= `, -``watermarks``, ``core_filters``, ``ops_filters``, ``filters``, ``stats``,= and -``tried_regions``) and three files (``action``, ``target_nid`` and -``apply_interval``) exist. +In each scheme directory, eight directories (``access_pattern``, ``quotas`= `, +``watermarks``, ``core_filters``, ``ops_filters``, ``filters``, ``dests``, +``stats``, and ``tried_regions``) and three files (``action``, ``target_ni= d`` +and ``apply_interval``) exist. =20 The ``action`` file is for setting and getting the scheme's :ref:`action `. The keywords that can be written to and read @@ -484,6 +486,29 @@ Refer to the :ref:`DAMOS filters design documentation of different ``allow`` works, when each of the filters are supported, and differences on stats. =20 +.. _damon_sysfs_dests: + +schemes//dests/ +------------------ + +Directory for specifying the destinations of given DAMON-based operation +scheme's action. This directory is ignored if the action of the given sch= eme +is not supporting multiple destinations. Only ``DAMOS_MIGRATE_{HOT,COLD}`` +actions are supporting multiple destinations. + +In the beginning, the directory has only one file, ``nr_dests``. Writing a +number (``N``) to the file creates the number of child directories named `= `0`` +to ``N-1``. Each directory represents each action destination. + +Each destination directory contains two files, namely ``id`` and ``weight`= `. +Users can write and read the identifier of the destination to ``id`` file. +For ``DAMOS_MIGRATE_{HOT,COLD}`` actions, the migrate destination node's n= ode +id should be written to ``id`` file. Users can write and read the weight = of +the destination among the given destinations to the ``weight`` file. The +weight can be an arbitrary integer. When DAMOS apply the action to each e= ntity +of the memory region, it will select the destination of the action based o= n the +relative weights of the destinations. + .. _sysfs_schemes_stats: =20 schemes//stats/ --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7488D30114B; Wed, 2 Jul 2025 20:14:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487279; cv=none; b=hZQU5tdJbkl/sL10gE5EvJXfgIZBxX1CoQVc3vgovrPrXJa1eFC4BQja3nnZw9QQvyTazI7BiAr2WLDGiVqtGyCdkoCppxWYOjcPrCaKoLkUyajCpcId7poj3vG1iSPvAYutmcxB0oY2dtH2Iir8miTMxpsxYgJBOf0o4XJS4+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487279; c=relaxed/simple; bh=7ntNinQfVlf+pugu/WTlvuD/GFP+GYiXqJRcWk0ejH4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=si3fyzTXh236Hyg9d4Zrao9vdivufNNR+4Tsk/AqNMJ5ppSxI9dsqfAcb47r4TXacjA5HF83YAJRPSqtX8g0bQxsB0ogi0ShgImnLL0EJluB2AkSyMo07vBk5y6FjH3UoK0dEBbDnZRHZSFxzWvdYprg1a1LoHtaziBtHIK+rXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RUc6lWKn; arc=none smtp.client-ip=209.85.219.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RUc6lWKn" Received: by mail-yb1-f182.google.com with SMTP id 3f1490d57ef6-e898fb745beso151891276.1; Wed, 02 Jul 2025 13:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487276; x=1752092076; darn=vger.kernel.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=Ws2fCY+40qz7qYM2UXMSStun9zyhHrsexuHO2VyV7ZQ=; b=RUc6lWKn0fkF+1RhTc7oTkYGODDZt+ZREs0COufJevs/jWkvLCabJIb9ZOLqXxGIry 7DP5WqquMnHOfRDdJSmFAB7Kx5pCENsYb0CMtyEgXMhzHjqMGMICMZkjR5YLwlWikO3G kjdUvnvZl2A/gGeBhr/81EHfZJUXMlbKmYKW4SbOp0yz4TppP3gr9027vyPNA+ECVqJJ LDwxFNPaKw4KNilU6r4rtMpijCF02iWafiWY5sv4V5ADD9/+1dlXEBGklwNsHQt9QUyW 2tMSh7VtsWqwQtMlkOh1ZWmRXJDc1DUOcWfryYkkG3gJRAdJj+7qwJ+AuWHwtNfRMH/P Ds0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487276; x=1752092076; 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=Ws2fCY+40qz7qYM2UXMSStun9zyhHrsexuHO2VyV7ZQ=; b=Wx/DEN63433RE3wpPqDALls7DE9wgFk5IIUnjyRMKTA8SPBMfQLnMFlLe3nhJKukA7 nG6JH36X7dQzH+MfPPGOeHKwriSNxffwZrS4IaPMSk1tKsFFB3zBtWVjur8+vK923VRd EkJDEfgih70+ENmQUmNx8u9XGDis3/nrFdYu79zdVghnRf7yV038OQSwMWiY5GwGff8Q TBpMDnzAsSa7ZRH4wfFuB+OlramozGGBxR7DoDTxWPwe94O9J8BX8PTZOOVJuGJWIZnd 5BjIMcyyTDFUUG1WnnFeW+5uK16sw7u3nGtON10QWzV7McQb08QJTqVGxrCIY2bQHVeW T8qA== X-Forwarded-Encrypted: i=1; AJvYcCU/oq/ZYXXnKdkrx9wGkdqm4ltoz+MozDwERLivCTKoxj+SYQPIwWQiYUPzX31APk1LgDX79FRdt9M=@vger.kernel.org, AJvYcCXy+PAu3u3RB3mADStGAWyNt9j6fYuy4a2sxd/YqJlE/2/K1c4SMYbRF9nmIyffdOoz/54YmNIHQFYaLqsl@vger.kernel.org X-Gm-Message-State: AOJu0Yxi4/cDRJUESPmp0cVhJYHZgDZe3ueUr30uXB1qGTI8uFbb6XAG YNsAqCk2XlmICraKZxCZ2rqTAoq0JLgKyo84C0TSk41UEGGj0GrmO0bJ X-Gm-Gg: ASbGnct3ZyV3lK203OLQ7ureGImuQNLfiNPqHmZmS3KzM2jWOeGo7YtqF7628uqxGkA MfnW6bnKKrdf3D7/q21KC4AB2ZxSB59rZEoNWfN8/Gb+UHsfbu+iOg+l/6Nu/pet2raOQSM42Jm cc0Uon3+S6ukLvHbKsmAfWEgsHJKfFJDm5t6VOUTjXnEWj3e8YFbSE8pAhSyse9ZLqH90m+zlen ch3FS6B/cMF6AQpHm45nn4Gr7Vlocia+4Qlazb/O9Gf1B/sCxzKaEPcKptk/X9pSbLVa/HjKjT4 YyxpBwI9ZsbV1Mz4o5C0/TJifrxRSTJcciGln/fHGdA9MUP8RqhysRpLL+cRnMmXHPqd8ZIIW2k mwSVFWYM= X-Google-Smtp-Source: AGHT+IFMh0Zpmv4j5OzZGutnmhihaCWP4mrmEUdEh5Fn5yyRhW1DwP6dI+488wgyAG0GH6wDYQKuKQ== X-Received: by 2002:a05:690c:8686:10b0:70e:4d8:5cab with SMTP id 00721157ae682-716590c7964mr10179957b3.2.1751487276493; Wed, 02 Jul 2025 13:14:36 -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.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:36 -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 Subject: [RFC PATCH v3 07/13] mm/damon/core: Commit damos->target_nid/migrate_dests Date: Wed, 2 Jul 2025 15:13:30 -0500 Message-ID: <20250702201337.5780-8-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai When committing new scheme parameters from the sysfs, copy the target_nid and migrate_dests of the source schemes into the destination schemes. Signed-off-by: Bijan Tabatabai Reviewed-by: SeongJae Park --- mm/damon/core.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index a4c3cfe531df..0565aae8d1fa 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -943,6 +943,41 @@ static void damos_set_filters_default_reject(struct da= mos *s) damos_filters_default_reject(&s->ops_filters); } =20 +static int damos_commit_dests(struct damos *dst, struct damos *src) +{ + struct damos_migrate_dests *dst_dests, *src_dests; + + dst_dests =3D &dst->migrate_dests; + src_dests =3D &src->migrate_dests; + + if (dst_dests->nr_dests !=3D src_dests->nr_dests) { + kfree(dst_dests->node_id_arr); + kfree(dst_dests->weight_arr); + + dst_dests->node_id_arr =3D kmalloc_array(src_dests->nr_dests, + sizeof(*dst_dests->node_id_arr), GFP_KERNEL); + if (!dst_dests->node_id_arr) { + dst_dests->weight_arr =3D NULL; + return -ENOMEM; + } + + dst_dests->weight_arr =3D kmalloc_array(src_dests->nr_dests, + sizeof(*dst_dests->weight_arr), GFP_KERNEL); + if (!dst_dests->weight_arr) { + /* ->node_id_arr will be freed by scheme destruction */ + return -ENOMEM; + } + } + + dst_dests->nr_dests =3D src_dests->nr_dests; + for (int i =3D 0; i < src_dests->nr_dests; i++) { + dst_dests->node_id_arr[i] =3D src_dests->node_id_arr[i]; + dst_dests->weight_arr[i] =3D src_dests->weight_arr[i]; + } + + return 0; +} + static int damos_commit_filters(struct damos *dst, struct damos *src) { int err; @@ -983,6 +1018,11 @@ static int damos_commit(struct damos *dst, struct dam= os *src) =20 dst->wmarks =3D src->wmarks; =20 + dst->target_nid =3D src->target_nid; + err =3D damos_commit_dests(dst, src); + if (err) + return err; + err =3D damos_commit_filters(dst, src); return err; } --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f180.google.com (mail-yb1-f180.google.com [209.85.219.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7256430E83B; Wed, 2 Jul 2025 20:14:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487285; cv=none; b=pN06I2rNkmkMogeJE2k2VhR7F81RZ0dsy3nsF3ClkRmmgVPSTdXfRDs19Jx9FP7JMDyyLAfuViL1hVsoxMWTARdU4LwT1sWjY+rGrp0gvQGv9pPT9kiehy8IIxqxaMMwoNTrPrBw3cSisQyank2k+0LKT9+BOO4ugGuGX8PSa6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487285; c=relaxed/simple; bh=ya5MwjEB1xHq/yOFXYAj+pDIdDIqM4iOdvLYL2l39jY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oWN7wK7OzigiJAwio3DRKjrVjwVYmE7qvVN0rG6850vM7dMhK7+mHaNSCGxRRK3TT3YHiqewJMYwp2t9WlJ7Ov7aDwk84/5UI2yBVZm1/cGv7s5g+sWuFpazfd3keeZ5/dV8+Lv8Z8t9ieXNrPFiXCpeUpkDxdFlyVp4RKiasMI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ws4rS4bL; arc=none smtp.client-ip=209.85.219.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ws4rS4bL" Received: by mail-yb1-f180.google.com with SMTP id 3f1490d57ef6-e733a6ff491so4577269276.2; Wed, 02 Jul 2025 13:14:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487282; x=1752092082; darn=vger.kernel.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=ux7vTJe4Gmqx6TiCWWLEznlY/hR11iXVrOjLOOQ9hBo=; b=Ws4rS4bL830Phqud6A4DvuvgzKHiOIUu1g6zfWCqZK5UYpWNc7OXnZUNRI28YSlcTB qE1dYssFUtzXJjUJEwyqScQZ8SxRXWWzrnlR4IDTnqSI8YVr3nsuwsobenCCrKg/6X0g C89CBTdjOMDwEolKOHMqVRaNFxupu6DC75iq0GFgPfJLoXeGBeiyr1u00U1fH1+2dBA+ Vxn3NmI3pwyvUYa0IdcdEgcfLkchrOXQucEyBS+aPiVacjaqDe4xK0tcnV5JCSXcKG08 fP8cVOqgDhK4FU+ppt38KK9PhG2eKCHzxCgpI/sJiSZ6a+OQXe8CQ8BOspq20AUP7BnO L/3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487282; x=1752092082; 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=ux7vTJe4Gmqx6TiCWWLEznlY/hR11iXVrOjLOOQ9hBo=; b=pCvRrmYwx4h0cm8ed/zXQ4ScLCChdULFlW4Rql6GvSsJVMAqpJLciPF8QkEwbBVlXG Ed7GrkykDLiLRuyG3NKo5YbgCddr4C2KEfGhq6HaKlTwHJZUh6RG/Vgt2joXkNg1uECJ jFTABuEo3USl3IDoSpAUMQ8VzEuVdG0/+xH+TAzCRD3cCWzuPBluFk3btP7znC2/77YM hjK9vGBxAHKCNQP/JCpcbUwo2jptQTJd1OYlXFkuY1zC2p2m7ZohzmqcCZpSRPc1q7oW XkX1Uda62TkOkN/+6KmDJQ0S0aermzIz/6zEPUpg8kbV2bW5+IDEJgwFbP0upvdXkkfC 97iA== X-Forwarded-Encrypted: i=1; AJvYcCVAvChTWr4e/dSLtX+cvH3xpvinjzAgOVhhXmKuexvxkhftBC2YIaBNcLRPjUj2bwnPIOrsDIvW5AqOswnb@vger.kernel.org, AJvYcCWVyKGVibDG5kDJ6mZRUClZIVyITpsa0X2HLicIEB+Qwbc7PYKPujlCzhs4l3Z7RT8Vzyv2tnuxSBg=@vger.kernel.org X-Gm-Message-State: AOJu0YzF/ilUN6DnPPnf4jj9+YdbxxkvHsgiQ22p4XqxJNHr9Mlkx479 uk1h3jrv6fLIwF3pmsEy7LqahHFAlmXvtYKRepgh8hmr5p6RG62BhGUu X-Gm-Gg: ASbGncu2vWTpH3q77Oc50lgNZM+GaTi3xbPAdgn/BljWOvy08mW2ywvJHuAjOifvzJx QdQff4t68GM2JK0nyQS5EIrvtfkwAH3Z12N1g0ZD/SJdYUxAz/L9pdkYpB1KKr4ZQnHGD/DQPkX YlIWGdIyWKtwcYsCcXWnELCisr6Jc2EIpRq9NJlF/LHG6b51l24yzrRBSDUk+xrc+pALtxiIr34 gikF5eCh3u6Q0z1NE7hNPUOEUaYtWM/Hh/xnJAM8fQnPJTj93IPBwtVDdbPNT6o8IBVqKkm2cOL 7Mm+Gpf2hWpD7oM00IcwHm5u0fGdk4bsoed9hUqwovZCcSUTmDYZ5hDSJZozU1i1xLIXUrS0kda yk68CWCdc6YG+hRz3Mw== X-Google-Smtp-Source: AGHT+IHA+gOuV+brpZwRwERkJ7yj/jSN/p3J3iXUigSwyqpIrYWnlxAOmwngxwZ6r4wEWO6YRW3O0Q== X-Received: by 2002:a05:690c:6002:b0:70e:a1e:d9f8 with SMTP id 00721157ae682-716590c4d46mr15751777b3.22.1751487281890; Wed, 02 Jul 2025 13:14:41 -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.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:41 -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 08/13] mm/damon: Move migration helpers from paddr to ops-common Date: Wed, 2 Jul 2025 15:13:31 -0500 Message-ID: <20250702201337.5780-9-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai This patch moves the damon_pa_migrate_pages function along with its corresponding helper functions from paddr to ops-common. The function prefix of "damon_pa_" was also changed to just "damon_" accordingly. This patch will allow page migration to be available to vaddr schemes as well as paddr schemes. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai Reviewed-by: SeongJae Park --- mm/damon/ops-common.c | 120 +++++++++++++++++++++++++++++++++++++++++ mm/damon/ops-common.h | 2 + mm/damon/paddr.c | 122 +----------------------------------------- 3 files changed, 123 insertions(+), 121 deletions(-) diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c index b43620fee6bb..918158ef3d99 100644 --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -5,6 +5,7 @@ * Author: SeongJae Park */ =20 +#include #include #include #include @@ -12,6 +13,7 @@ #include #include =20 +#include "../internal.h" #include "ops-common.h" =20 /* @@ -138,3 +140,121 @@ int damon_cold_score(struct damon_ctx *c, struct damo= n_region *r, /* Return coldness of the region */ return DAMOS_MAX_SCORE - hotness; } + +static unsigned int __damon_migrate_folio_list( + struct list_head *migrate_folios, struct pglist_data *pgdat, + int target_nid) +{ + unsigned int nr_succeeded =3D 0; + struct migration_target_control mtc =3D { + /* + * Allocate from 'node', or fail quickly and quietly. + * When this happens, 'page' will likely just be discarded + * instead of migrated. + */ + .gfp_mask =3D (GFP_HIGHUSER_MOVABLE & ~__GFP_RECLAIM) | + __GFP_NOWARN | __GFP_NOMEMALLOC | GFP_NOWAIT, + .nid =3D target_nid, + }; + + if (pgdat->node_id =3D=3D target_nid || target_nid =3D=3D NUMA_NO_NODE) + return 0; + + if (list_empty(migrate_folios)) + return 0; + + /* Migration ignores all cpuset and mempolicy settings */ + migrate_pages(migrate_folios, alloc_migration_target, NULL, + (unsigned long)&mtc, MIGRATE_ASYNC, MR_DAMON, + &nr_succeeded); + + return nr_succeeded; +} + +static unsigned int damon_migrate_folio_list(struct list_head *folio_list, + struct pglist_data *pgdat, + int target_nid) +{ + unsigned int nr_migrated =3D 0; + struct folio *folio; + LIST_HEAD(ret_folios); + LIST_HEAD(migrate_folios); + + while (!list_empty(folio_list)) { + struct folio *folio; + + cond_resched(); + + folio =3D lru_to_folio(folio_list); + list_del(&folio->lru); + + if (!folio_trylock(folio)) + goto keep; + + /* Relocate its contents to another node. */ + list_add(&folio->lru, &migrate_folios); + folio_unlock(folio); + continue; +keep: + list_add(&folio->lru, &ret_folios); + } + /* 'folio_list' is always empty here */ + + /* Migrate folios selected for migration */ + nr_migrated +=3D __damon_migrate_folio_list( + &migrate_folios, pgdat, target_nid); + /* + * Folios that could not be migrated are still in @migrate_folios. Add + * those back on @folio_list + */ + if (!list_empty(&migrate_folios)) + list_splice_init(&migrate_folios, folio_list); + + try_to_unmap_flush(); + + list_splice(&ret_folios, folio_list); + + while (!list_empty(folio_list)) { + folio =3D lru_to_folio(folio_list); + list_del(&folio->lru); + folio_putback_lru(folio); + } + + return nr_migrated; +} + +unsigned long damon_migrate_pages(struct list_head *folio_list, int target= _nid) +{ + int nid; + unsigned long nr_migrated =3D 0; + LIST_HEAD(node_folio_list); + unsigned int noreclaim_flag; + + if (list_empty(folio_list)) + return nr_migrated; + + noreclaim_flag =3D memalloc_noreclaim_save(); + + nid =3D folio_nid(lru_to_folio(folio_list)); + do { + struct folio *folio =3D lru_to_folio(folio_list); + + if (nid =3D=3D folio_nid(folio)) { + list_move(&folio->lru, &node_folio_list); + continue; + } + + nr_migrated +=3D damon_migrate_folio_list(&node_folio_list, + NODE_DATA(nid), + target_nid); + nid =3D folio_nid(lru_to_folio(folio_list)); + } while (!list_empty(folio_list)); + + nr_migrated +=3D damon_migrate_folio_list(&node_folio_list, + NODE_DATA(nid), + target_nid); + + memalloc_noreclaim_restore(noreclaim_flag); + + return nr_migrated; +} diff --git a/mm/damon/ops-common.h b/mm/damon/ops-common.h index cc9f5da9c012..54209a7e70e6 100644 --- a/mm/damon/ops-common.h +++ b/mm/damon/ops-common.h @@ -16,3 +16,5 @@ int damon_cold_score(struct damon_ctx *c, struct damon_re= gion *r, struct damos *s); int damon_hot_score(struct damon_ctx *c, struct damon_region *r, struct damos *s); + +unsigned long damon_migrate_pages(struct list_head *folio_list, int target= _nid); diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index fcab148e6865..48e3e6fed636 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -13,7 +13,6 @@ #include #include #include -#include #include =20 #include "../internal.h" @@ -381,125 +380,6 @@ static unsigned long damon_pa_deactivate_pages(struct= damon_region *r, sz_filter_passed); } =20 -static unsigned int __damon_pa_migrate_folio_list( - struct list_head *migrate_folios, struct pglist_data *pgdat, - int target_nid) -{ - unsigned int nr_succeeded =3D 0; - struct migration_target_control mtc =3D { - /* - * Allocate from 'node', or fail quickly and quietly. - * When this happens, 'page' will likely just be discarded - * instead of migrated. - */ - .gfp_mask =3D (GFP_HIGHUSER_MOVABLE & ~__GFP_RECLAIM) | - __GFP_NOWARN | __GFP_NOMEMALLOC | GFP_NOWAIT, - .nid =3D target_nid, - }; - - if (pgdat->node_id =3D=3D target_nid || target_nid =3D=3D NUMA_NO_NODE) - return 0; - - if (list_empty(migrate_folios)) - return 0; - - /* Migration ignores all cpuset and mempolicy settings */ - migrate_pages(migrate_folios, alloc_migration_target, NULL, - (unsigned long)&mtc, MIGRATE_ASYNC, MR_DAMON, - &nr_succeeded); - - return nr_succeeded; -} - -static unsigned int damon_pa_migrate_folio_list(struct list_head *folio_li= st, - struct pglist_data *pgdat, - int target_nid) -{ - unsigned int nr_migrated =3D 0; - struct folio *folio; - LIST_HEAD(ret_folios); - LIST_HEAD(migrate_folios); - - while (!list_empty(folio_list)) { - struct folio *folio; - - cond_resched(); - - folio =3D lru_to_folio(folio_list); - list_del(&folio->lru); - - if (!folio_trylock(folio)) - goto keep; - - /* Relocate its contents to another node. */ - list_add(&folio->lru, &migrate_folios); - folio_unlock(folio); - continue; -keep: - list_add(&folio->lru, &ret_folios); - } - /* 'folio_list' is always empty here */ - - /* Migrate folios selected for migration */ - nr_migrated +=3D __damon_pa_migrate_folio_list( - &migrate_folios, pgdat, target_nid); - /* - * Folios that could not be migrated are still in @migrate_folios. Add - * those back on @folio_list - */ - if (!list_empty(&migrate_folios)) - list_splice_init(&migrate_folios, folio_list); - - try_to_unmap_flush(); - - list_splice(&ret_folios, folio_list); - - while (!list_empty(folio_list)) { - folio =3D lru_to_folio(folio_list); - list_del(&folio->lru); - folio_putback_lru(folio); - } - - return nr_migrated; -} - -static unsigned long damon_pa_migrate_pages(struct list_head *folio_list, - int target_nid) -{ - int nid; - unsigned long nr_migrated =3D 0; - LIST_HEAD(node_folio_list); - unsigned int noreclaim_flag; - - if (list_empty(folio_list)) - return nr_migrated; - - noreclaim_flag =3D memalloc_noreclaim_save(); - - nid =3D folio_nid(lru_to_folio(folio_list)); - do { - struct folio *folio =3D lru_to_folio(folio_list); - - if (nid =3D=3D folio_nid(folio)) { - list_move(&folio->lru, &node_folio_list); - continue; - } - - nr_migrated +=3D damon_pa_migrate_folio_list(&node_folio_list, - NODE_DATA(nid), - target_nid); - nid =3D folio_nid(lru_to_folio(folio_list)); - } while (!list_empty(folio_list)); - - nr_migrated +=3D damon_pa_migrate_folio_list(&node_folio_list, - NODE_DATA(nid), - target_nid); - - memalloc_noreclaim_restore(noreclaim_flag); - - return nr_migrated; -} - static unsigned long damon_pa_migrate(struct damon_region *r, struct damos= *s, unsigned long *sz_filter_passed) { @@ -527,7 +407,7 @@ static unsigned long damon_pa_migrate(struct damon_regi= on *r, struct damos *s, addr +=3D folio_size(folio); folio_put(folio); } - applied =3D damon_pa_migrate_pages(&folio_list, s->target_nid); + applied =3D damon_migrate_pages(&folio_list, s->target_nid); cond_resched(); s->last_applied =3D folio; return applied * PAGE_SIZE; --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f173.google.com (mail-yb1-f173.google.com [209.85.219.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7E95315512; Wed, 2 Jul 2025 20:14:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487289; cv=none; b=AxG5K8umkuDxprsXtAMJaGEfBdSPGlA7WwOR5xjjk7KxGzWjvsMjDwU9ZFmUK67AhiXF+M2IcOoK/66j9u9Ctdh9S/XmVOUR8jmXlX9uhDyeZn2c3/jCGp8Ef1N4/1hxjObRu8WvKe1enFE6JqMTFZVPX9OCqGuqRVDJ8mEL9C8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487289; c=relaxed/simple; bh=7RP+GRfK/ULjv/KYbouJDYllocI5iwEuWCFqA5tp+To=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NwDOZ2fIDF/Gr70AzUfj4yKlW9tn8hgGte5nMJR0JpeBS4RO5p1TJWQzlaeelIN6SZcjmWtyS1O0685+Nh52bkHHIp1fxZJQMtN+9fHijnwPx0DwJvyDi2PYNed5vkkT62MFaZlMJPdhZ6L00WrWO3GRmKIRE80uYiS3/Nr37oE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PnM23zPL; arc=none smtp.client-ip=209.85.219.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PnM23zPL" Received: by mail-yb1-f173.google.com with SMTP id 3f1490d57ef6-e812c817de0so4175698276.0; 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=vger.kernel.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=PnM23zPL/KEdHazzHS8CAM7CpNdNKkaELX6NpHYaC6wO7hH40spMuKPrKMzkdR+bGv 7Bflt+QjyY4xpNHwXuL4WirLNRnnhg7zMSRPnZxhM510cgV9Qs/zs/w7Juw7J3rGNji9 /mVD4zL+Q9YEQJDaSoI1ACv3ovIUu0nD6hGSe8WktP9fa1FcxkXjRwTNlrOvmHIh3TGW RBQHmEx1ft0757PW7uzdy+V5X3Jkk0izRQSfENnCoJZs6qdnrzX9pNUUOlB5xURHuyqg GTI8FXJbh8Ji6eJiBOrnCOeAb2Bbh42yktiOiyNZkPFBXrC2WPYvqUOBkt0OIkuvlGib n2Mw== 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=HIH/CMC+EBvxGcpJQruKBTc1mySRgSNX12rtes/+LyJhvUom7gY+QmanUuK4OsQopX Y8/9Uda5BchNCnvJGwpz+K0xNAp1bUF2Q46a/3ExgvcDXvtHKugMCptTgdE5KJm1f6Sq cKyKwxy9jwzc8o3aDu1ElEsGzcfcw94ZRTx4HtShsTLeVXVrhh0GgHN153TKJPClEtg1 pLQ8IZLI5iGttKxfRHNqZKEqFGTwHDxJ+Sd/RQ3v8Nuovs7G/y952/+NnsS3FxRRjH9a 3AhMmy9cBEHebOc3cuimJQxl9YyPInucFvrCW5ZLlJnDayvor66dD1Q9BqvCGw+lLiMh KAUw== X-Forwarded-Encrypted: i=1; AJvYcCU2042HSQSTC2LEiVdmoW4+PrjPd+/wh+yuo5sVIgLAQd+1ivbJxZXnzj+LwwdGjKStWazQmU6dHvI=@vger.kernel.org, AJvYcCVYswwJs67zXJAV8uwI1Cv5gTjpTOLSViVjAeZg1SLKhB74dr3+kcT11LLtQM0OzDCdH9G6acG3vyGctKi7@vger.kernel.org X-Gm-Message-State: AOJu0YwKDPDMiZIcwFthcDBzez80wVJcXG6RLtiHql/Oo+VMpXrVbfLe hFaFXX67PkWJEUsl5eZevSegyp3zcw8ltzLdaBM3Y+yuJTuR2U/IIAw8iufbJ74C35o= X-Gm-Gg: ASbGnctoRLh+OQMIemp6ioW9z1otgBBGEZyDVsxFXEvkNGH6dtzsxWb/jEdrI1tQxhO tXMJU2X8jqKno3YlqtTvvj+w+ySNGLk1wxSq3mqNs/Cca6Jj6pD6Rshco8y/BpgABv06Mwh38na fz8Vdwin6OoUSQ7bO1MMOytJ2Gd3jPmkxi8bHuYmZ34LqG1SuHrm8rP6LiTUmnUcflR+OGfY0Iu lJGeM7LQKmGOicjT8Wmf3ZydYVVb53RxyzE8/0sCmjB1CeMGYlJtZeZS7ejKHkffqzJGHFDYbCn xDzezBm8fcXaDgs0GTfzTvJmPUMHT9pPVb5EyXgjq2WHfFKxHrdPrzREC6bHRnluX0bGGc3pWf6 1hyYJ90Q= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =20 +#include "../internal.h" #include "ops-common.h" =20 #ifdef CONFIG_DAMON_VADDR_KUNIT_TEST @@ -610,6 +611,65 @@ static unsigned int damon_va_check_accesses(struct dam= on_ctx *ctx) return max_nr_accesses; } =20 +#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 =3D walk->private; + struct folio *folio; + spinlock_t *ptl; + pmd_t pmde; + + ptl =3D pmd_lock(walk->mm, pmd); + pmde =3D pmdp_get(pmd); + + if (!pmd_present(pmde) || !pmd_trans_huge(pmde)) + goto unlock; + + folio =3D 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 =3D walk->private; + struct folio *folio; + pte_t ptent; + + ptent =3D ptep_get(pte); + if (pte_none(*pte) || !pte_present(*pte)) + return 0; + + folio =3D 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 */ =20 +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 =3D 0; + struct mm_walk_ops walk_ops =3D { + .pmd_entry =3D damos_va_migrate_pmd_entry, + .pte_entry =3D damos_va_migrate_pte_entry, + .walk_lock =3D PGWALK_RDLOCK, + }; + + task =3D damon_get_task_struct(target); + if (!task) + return 0; + + mm =3D 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 =3D 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 =3D 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 *con= text, 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; } --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B58772F5C5C; Wed, 2 Jul 2025 20:14:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487296; cv=none; b=NExkj0Kz1ol6R6/y8ETf57EFc37H/wa3WaaJjJlymBTOIWbQBllIyKMT727zd0zyFXpi4pSfGNy3mnjjfrypBccJJqwsTOqACNj5+UyXj4pBDsEF2skWDhjLmszP2vm8NARX8se2KenRWRu9Jf05twpdBJtOSo+ZD/aKyvz8XVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487296; c=relaxed/simple; bh=0sgoYcwWoSAXxh3ePsTxskwFPgTsDHkWH4z1QYpP3pI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L3cVH14D8HaQxpEjSuam6An9KPdOAOw9l3pfG5kph8UZVv//SITxNAKIu5R7nCKIBmyrkWMJ8K92cxNtRZkdmfGwmmhIrwItJ8+0ncn5D7gCiXq14tU0GTQ7QCa8XSxWflLNHcN81MzopJk0/1z6lQCZ/B1XlAFNTq45cmOxxPs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Vb8Yj0hq; arc=none smtp.client-ip=209.85.128.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Vb8Yj0hq" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-70e3980757bso2851837b3.1; Wed, 02 Jul 2025 13:14:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487294; x=1752092094; darn=vger.kernel.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=FkS0DrkPKM+xK6PaTOaoNpfP8nOE8wUiT1pJQUSyCG0=; b=Vb8Yj0hqr2vY+vwh1bpfu04KCUp4E+7XmGT7NXQR6tRkAt+Fk8siQQDr6XQYSStv0L 0Ldv0oLeOI6seiIMDQF1K4fZMqIVm2WzPAORApdkJoOGzMCvzREuyLLEoFSez+5+LbS6 5tzYlO/7dGOuLo27NrwJ849IJ+VozTirYlyamecjL4nVpF/x2wTaLRCj2UyIP1rDO1cx ONkuNRkoC0WFtVD4ayM/xDOGueA5BlZX5g1vTcNEcvB9rTSow9gzEjdJi3LF4ZdpGCek YSguqzH0Ovf21GUzE1CK/OYBIMpYXtKwa5SAQQ6HwUDo6+H6VvHh4nCWdIZ7DbT6k3hI Y0+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487294; x=1752092094; 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=FkS0DrkPKM+xK6PaTOaoNpfP8nOE8wUiT1pJQUSyCG0=; b=cl48yyQoMAns8rfKQEmSbnVC486bn7xri4Hll8UwkZ1AmXYOl/fG9DhloZwLeOf+CD 9VfilBHijVjtVtul6T7+KoTAj9OZwgvj4h9FuxklmtnFYyMGwSm9yA8TrtUse6afafqn JSgLZriteh9HLAYSTYOaJzLkU52Qk4OR3CB8xNKx3++N+3oFBcYRFaZ6Afo0q8DsTY8D QTlYwZUuqMj5dZjNkgjyw3udO3xTv8RjViauL6FJEVQsmy7R3aPKtTaNf62ZRFDx0Pjy EWObYAhvHNlMFDc6tL97p4Y2/yfz0y3xQxToRfBKK0DJOkioYUCHzOHEqqBgyRpOZqXD KoFg== X-Forwarded-Encrypted: i=1; AJvYcCWlXSIIbjPNS1wgidMzAu8F5N5Ay+kIE7UNFoLftPiXE8IK9mY8X9YzNq0P2mmZP50KoYME+G7jLtg=@vger.kernel.org, AJvYcCXEmP68HlDJjq8ZYAgCceqzXSg/UAfwPA9bK6PmoYN9/p43aBCprBu6bTydEHzorYU1fwqNsaLo2r3G29xQ@vger.kernel.org X-Gm-Message-State: AOJu0YyNgTNZ8NKD2iZQgncPO3W5b8GbGfc4OjxXMCN4f2HqK41zNf4u tGO50QhpSxbkf+ZeGTusFfo2Y4qPaAbFXwHW/ZKZo1CV7hsNOa3GIryC X-Gm-Gg: ASbGncuzlC/9KXyHimfZWVp3aX6t95fiU5/EF2uLgf5i+h7RsdaKhCYeCLTXf6tAJPB 9tZWVqfYWYrlx9nDgYzl3+xQPaLpSOey+HAyDWbyygk2p0XmMrPdUNf9sx7l6ZrcXlGyCNgBoI5 WCJ8bqe/N9JYlRst0CM6YySXunlbsU6vHSR+3kl0jQpSgLE1k4qhKqZL+VvIkQG4pa5d5xseKEU 8v8Ge/b2Gqvy/M7fEAYzVgtj1eBW6/mDM8DfhRxee0Hevl++YGNn+wRm5cv9cvtBVbgRlTh+hPZ 9UEhH5OyeeufF2edTH6ehs4lifMrQ/IAday/LTMdsT2LgtVrdGFhv4NS/0GNmvJTmghjM0Wfgwi rXIeoaBaBGL/nS/A3gQ== X-Google-Smtp-Source: AGHT+IGm04Vh1HkDnYwneNGvCSl8gsp/I7ZSqzh9/jiYbz/sPZZP1V/Sh0Zp3PhXvLjIcWdu4qs4jA== X-Received: by 2002:a05:690c:3606:b0:712:d7dd:e25a with SMTP id 00721157ae682-716590f7acfmr13770907b3.6.1751487293726; Wed, 02 Jul 2025 13:14:53 -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.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:53 -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 10/13] Docs/mm/damon/design: Document vaddr support for migrate_{hot,cold} Date: Wed, 2 Jul 2025 15:13:33 -0500 Message-ID: <20250702201337.5780-11-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai Document that the migrate_{hot,cold} schemes can be used by the vaddr operations set. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai Reviewed-by: SeongJae Park --- Documentation/mm/damon/design.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index ddc50db3afa4..03f8137256f5 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -452,9 +452,9 @@ that supports each action are as below. - ``lru_deprio``: Deprioritize the region on its LRU lists. Supported by ``paddr`` operations set. - ``migrate_hot``: Migrate the regions prioritizing warmer regions. - Supported by ``paddr`` operations set. + Supported by ``vaddr``, ``fvaddr`` and ``paddr`` operations set. - ``migrate_cold``: Migrate the regions prioritizing colder regions. - Supported by ``paddr`` operations set. + Supported by ``vaddr``, ``fvaddr`` and ``paddr`` operations set. - ``stat``: Do nothing but count the statistics. Supported by all operations sets. =20 --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B75662F5C5C; Wed, 2 Jul 2025 20:14:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487301; cv=none; b=eFtfiA1CIyXl2OKPGBy+mGLTpADPE0tt1BelOtHbRTIcJHEwCuPBYlP7WukLdC9bzHZSwNHmJNlGyKhpczJMNqtXBBwim5/+vvWF1p9PwV5M7hdMZuCEHnXYFrjqOksh41OIhfHNSCeclvYDo+FyhZNy4HFT1rEnzxCPYrBRkm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487301; c=relaxed/simple; bh=B4LAEboPZeHhWRFgO3AFh7AK7EfZpX1npJEWMOLqfyk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PJhvHi6T8JU6V/Bm4zs1t7GmF+h+Zbhqvq3aMl2irvwJs3yTodOTMOpvmOmHedQDftY8kdlUbBUg6T06XRJXHELa/pre+Di29NCCQuxX8sz5cngSJ3WyyPt/D0+NHVwSxx2z1YaCBByePPYxMb+/htcWch5D1HKGx8zjR7v4u5s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=N84nI9mM; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N84nI9mM" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-70e3980757bso2852467b3.1; Wed, 02 Jul 2025 13:14:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487299; x=1752092099; darn=vger.kernel.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=bVqvDTgUdbQeaLQbOWegVEyiOQ5l1FCYExImfHBr7Tc=; b=N84nI9mMESVaKrvIDK8ylWVt6Ktz/Ul66cCIX59F9fxb13oIpT2SbofWRWS8a6oolU ffisFW8qdcEq0jrmduyte684wI+ezs78Y2HgjDUSnqO07uyu3DZz/HeICdoffk8CusXU /Lv7BVWnXiZ1U9/uEqFIh+XYeWMJwpJzLUW9dUgK9n1n8mxo3TN/relwZ4AktTtzx8G3 frQrEhgXc7h1GtN7wadL3nqQU1sX6arpLYBDlaDLEuHzBS/7Q+F/J1nTpxY9fG4yAJzi uw8Ljzhc5wSXnMWVQQP1Ejl12U9nUsn1PupHRYTovwdXQLWNH1llIJyXGQZp52CTRqnq cIyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487299; x=1752092099; 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=bVqvDTgUdbQeaLQbOWegVEyiOQ5l1FCYExImfHBr7Tc=; b=hd4xFtcx0uQ8histyIxpXXUJH5sbqy+yjUYMmFbf4SqLznru+5KH0+lJZVZgxtscm4 Oc1av390YgKzDuvNKpc95lE4EoqWAA36Wk8qJpwlaHRsmOWn6E8/nL8WCk/rUP3rQXV4 7c7oD2EUjcn3T3KUvAZ0m2FwSGosFulbrcbaAvDjNoAYNjlnt+Tgw2s5jdYsAXkh+y+Q TcKr1UohpTE+HXHXTFFYXrl+x/uMIL5j6cJuKcaUB0dytlsEfeZnyEAk+JMNgJp2HbbR 01lFSDrDTniduIF+ghtDJBRME4tS67atY8oBexkBPc+RC4nEHG5vu5ahO7V5+gxa1e1q YJXw== X-Forwarded-Encrypted: i=1; AJvYcCUgW6qXFnVL1jvEaF0ppRFdOzDkP1vxMSlptH6iKMcewsQif86+Ts1dyMJibJomTQY4xg1f6OEjCMUXJ+Zj@vger.kernel.org, AJvYcCXD9PMTgr1T43exI0Rv5BAO0iVVqR3Y+K+mGpC8HbJUn1twldAePCxWTTZOt7lzEZv4ExiWnqQCfXc=@vger.kernel.org X-Gm-Message-State: AOJu0YwLuWaYpnBBUvW/Bb2iWX5bTI2CwhC4H51Z41D3MzgkcB7Rxeyw +U3XLjNMUQDzZXC8dYnPyjKSENKZrwyjN/1h+40WyI6R3g5Dbpv25A2i X-Gm-Gg: ASbGncs+oemMUsWSW7HsmI385KlGyNB/hZ/tF18XRL4Hui2IKfBJCkGBM7vMBL4gpi1 sjPdM1PGJgD/uyKRv/iMioDGhT4TwYzsrshCAYGmN5UTFzzQfqKTr92WMmM1OMqJ+3tDiO78XWl puCp4OXSN0VSOigWxqESSOES9r7A3Qf82LjNkmTQTtNKwc1gLg1ByMkvv+ie939QUIBf9Ded0f6 CW4dm2TikY0bgArXSF1Vw88mU8pg5B3WqniWbwhbR9DflEMM7XtHK4SOFc5CsEgXaY0BeVAsgoc LsTSuGfOEkERF/BZ3tWOV8IL6r1jLZ5C/1OyKLZfjfzGvDtdfjpTQSyT3p0qolZl4UxMzPP0REe mc4Gsl25bD8urNPH9yA== X-Google-Smtp-Source: AGHT+IHCCc83L/Ed/tXXORICBO5ubDFIQHrqXVUSwSXIp5c0xPoL3pJjjGIyHzRoVNsFfggSP3dVNw== X-Received: by 2002:a05:690c:b17:b0:70e:7158:6fda with SMTP id 00721157ae682-716590c8c4amr15208317b3.9.1751487298340; Wed, 02 Jul 2025 13:14:58 -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.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:14:57 -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 11/13] mm/damon/vaddr: Use damos->migrate_dests in migrate_{hot,cold} Date: Wed, 2 Jul 2025 15:13:34 -0500 Message-ID: <20250702201337.5780-12-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai damos->migrate_dests provides a list of nodes the migrate_{hot,cold} actions should migrate to, as well as the weights which specify the ratio pages should be migrated to each destination node. This patch interleaves pages in the migrate_{hot,cold} actions according to the information provided in damos->migrate_dests if it is used. The interleaving algorithm used is similar to the one used in weighted_interleave_nid(). If damos->migration_dests is not provided, the actions migrate pages to the node specified in damos->target_nid as before. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai --- mm/damon/vaddr.c | 114 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 17 deletions(-) diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 5cdfdc47c5ff..5f230a427fdc 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -611,11 +611,76 @@ static unsigned int damon_va_check_accesses(struct da= mon_ctx *ctx) return max_nr_accesses; } =20 +struct damos_va_migrate_private { + struct list_head *migration_lists; + struct damos *scheme; +}; + +/* + * Place the given folio in the migration_list corresponding to where the = folio + * should be migrated. + * + * The algorithm used here is similar to weighted_interleave_nid() + */ +static void damos_va_migrate_folio(struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, + struct damos_migrate_dests *dests, + struct list_head *migration_lists) +{ + pgoff_t ilx; + int order; + unsigned int target; + unsigned int weight_total =3D 0; + int i; + + /* + * If dests is empty, there is only one migration list corresponding + * to s->target_nid. + */ + if (!dests->nr_dests) { + i =3D 0; + goto isolate; + } + + order =3D folio_order(folio); + ilx =3D vma->vm_pgoff >> order; + ilx +=3D (addr - vma->vm_start) >> (PAGE_SHIFT + order); + + for (i =3D 0; i < dests->nr_dests; i++) + weight_total +=3D dests->weight_arr[i]; + + /* If the total weights are somehow 0, don't migrate at all */ + if (!weight_total) + return; + + target =3D ilx % weight_total; + for (i =3D 0; i < dests->nr_dests; i++) { + if (target < dests->weight_arr[i]) + break; + target -=3D dests->weight_arr[i]; + } + + /* No index being chosen indicates a mistake in the algorithm */ + if (i =3D=3D dests->nr_dests) { + WARN_ONCE(1, "Error determining target interleave node"); + return; + } + +isolate: + if (!folio_isolate_lru(folio)) + return; + + list_add(&folio->lru, &migration_lists[i]); +} + #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 =3D walk->private; + struct damos_va_migrate_private *priv =3D walk->private; + struct damos *s =3D priv->scheme; + struct list_head *migration_lists =3D priv->migration_lists; + struct damos_migrate_dests *dests =3D &s->migrate_dests; struct folio *folio; spinlock_t *ptl; pmd_t pmde; @@ -630,12 +695,8 @@ static int damos_va_migrate_pmd_entry(pmd_t *pmd, unsi= gned long addr, if (!folio) goto unlock; =20 - if (!folio_isolate_lru(folio)) - goto put_folio; - - list_add(&folio->lru, migration_list); + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); =20 -put_folio: folio_put(folio); unlock: spin_unlock(ptl); @@ -648,7 +709,10 @@ static int damos_va_migrate_pmd_entry(pmd_t *pmd, unsi= gned long addr, 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 =3D walk->private; + struct damos_va_migrate_private *priv =3D walk->private; + struct damos *s =3D priv->scheme; + struct list_head *migration_lists =3D priv->migration_lists; + struct damos_migrate_dests *dests =3D &s->migrate_dests; struct folio *folio; pte_t ptent; =20 @@ -660,12 +724,8 @@ static int damos_va_migrate_pte_entry(pte_t *pte, unsi= gned long addr, if (!folio) return 0; =20 - if (!folio_isolate_lru(folio)) - goto out; - - list_add(&folio->lru, migration_list); + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); =20 -out: folio_put(folio); return 0; } @@ -717,34 +777,54 @@ static unsigned long damos_va_migrate(struct damon_ta= rget *target, struct damon_region *r, struct damos *s, unsigned long *sz_filter_passed) { - LIST_HEAD(folio_list); + struct damos_va_migrate_private priv; struct task_struct *task; struct mm_struct *mm; + int nr_dests; + int nid; + bool use_target_nid; unsigned long applied =3D 0; + struct damos_migrate_dests *dests =3D &s->migrate_dests; struct mm_walk_ops walk_ops =3D { .pmd_entry =3D damos_va_migrate_pmd_entry, .pte_entry =3D damos_va_migrate_pte_entry, .walk_lock =3D PGWALK_RDLOCK, }; =20 + use_target_nid =3D dests->nr_dests =3D=3D 0; + nr_dests =3D use_target_nid ? 1 : dests->nr_dests; + priv.scheme =3D s; + priv.migration_lists =3D kmalloc_array(nr_dests, + sizeof(struct list_head), GFP_KERNEL); + if (!priv.migration_lists) + return 0; + + for (int i =3D 0; i < nr_dests; i++) + INIT_LIST_HEAD(&priv.migration_lists[i]); + task =3D damon_get_task_struct(target); if (!task) - return 0; + goto free_lists; =20 mm =3D damon_get_mm(target); if (!mm) goto put_task; =20 mmap_read_lock(mm); - walk_page_range(mm, r->ar.start, r->ar.end, &walk_ops, &folio_list); + walk_page_range(mm, r->ar.start, r->ar.end, &walk_ops, &priv); mmap_read_unlock(mm); mmput(mm); =20 - applied =3D damon_migrate_pages(&folio_list, s->target_nid); - cond_resched(); + for (int i =3D 0; i < nr_dests; i++) { + nid =3D use_target_nid ? s->target_nid : dests->node_id_arr[i]; + applied +=3D damon_migrate_pages(&priv.migration_lists[i], nid); + cond_resched(); + } =20 put_task: put_task_struct(task); +free_lists: + kfree(priv.migration_lists); return applied * PAGE_SIZE; } =20 --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70308315538; Wed, 2 Jul 2025 20:15:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487306; cv=none; b=K/QpoMCGmP+LT+TwoySk2drAEp7g+UiF8q3/LDJxpxjKxb8ZxPv//JwZ8fOSKQ1gBlZAVpsVw7n1LLYdIqiy7j+MUSbofcPbU/8y7L3C9J0UyfkKCMhI2m+QzPFsBeZRItoGEuOpmE3Wz0A93p7NdWRoQ4Gg6kjv4ZaEP9UkpE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487306; c=relaxed/simple; bh=grkq1k7ZCl4I+T+IgPaviet0IWCAb1IC3dO4Q0rvbR4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZcvNWd27RYdWOCxy0etCeIsigffXLxH+jckTL8FhaFw0s3adbZNLkUoK+W3mc5vJ8Y3ohDanqPr5M3yJqp/j9QUADHt40ukul2q3nUNhecHAuCo6i5wRX/io2ZaA0uwKya4vvrEyTm6KtymATY6dVwBYQ9AZZjdCs+dpQAIkJsA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CbtTzssE; arc=none smtp.client-ip=209.85.219.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CbtTzssE" Received: by mail-yb1-f182.google.com with SMTP id 3f1490d57ef6-e740a09eb00so3830484276.0; Wed, 02 Jul 2025 13:15:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487303; x=1752092103; darn=vger.kernel.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=oiZANFhzMVZOSV0URi2HW3PqK+ggIehph8dgAXp+7Gc=; b=CbtTzssEYWiqMD5dTsNxA14g31hYKki8FjrSKoQdU2vmiNsUsmP/RZb+iuUJIaTqIR J5Y8lFEFV7yolc4O0DMUjm9ApdrJwy7kouXS8qmAcfNWVkzXV8eQrCU9vNzgsQpVq2nF UHAyTZrDK/GZI32j7E2qh92zu8RjSNhLM1FKuN5keN/RMpSaYVY3QHFmjq3nAgjodCAV 1OueF106e25YP4RCvOco53EkIQ+LTZfCuUyh8STvWO3a8LsPtBhYFIAWEkXejRLZa27e yNBa9RSyLDu2UjXByG4h8LNmVqS51artu6SvoeQcvLhwLVC4/yPdRbIcdijhf08Oro4y TDgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487303; x=1752092103; 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=oiZANFhzMVZOSV0URi2HW3PqK+ggIehph8dgAXp+7Gc=; b=IcHIYfFMU10HFIHQMnB3urS/j5/zjGmL7IHi+rSY90ONecN8HmAvEud55mX3LXgASH HQzZJyL2RMWcziYYVrPjz1yZCJidDKfgVvveCERIE2qVgpN0pL+gbDOC8eRT8KNCCiLv RPLCaaMp83WquEZRd+FNQtHUEEyO/TpYK1r8XpSG/FNNKBNEkbTuMwcQIo28dH81yhx5 IrFZRABeBHsGuvvqzFeGJ7fwLiVSQkKGYdWHZcNzaykBjzHgev5pSIGKHrStNyxQ1a8l idhgX697clX/JZqj4u3c/HSCB50Ks0b/k9gIloYNNwdbLCjs8NZwao3ggW+zGh1OeyC1 qw3A== X-Forwarded-Encrypted: i=1; AJvYcCU59xGilYaFPl07N1CQ1b8gGHgqOpg/AGzLuxhyR2px4IPluU1EZbqn9AGcWE15gsbcdMTQr6duNvI=@vger.kernel.org, AJvYcCXflTnQjM9X3jNWg1sWfpKosMqd/O7ttvfLcdef75cEqDZM9aBBJ2Iq4cd/3wezDU9BAxxgSvR4sZFhbIYo@vger.kernel.org X-Gm-Message-State: AOJu0Yy4RREZ79NGUm21029/h3dXegMHQb1cYB0lTPx+wKYhe0T/FGoN y0XeQfVbIn8KQynXcIenx5jHf+A8M8ya2QEoa/1g0jsPxR6Aeuh2P0dSyRcbsxVYwZU= X-Gm-Gg: ASbGncvA8HqzSa4UFCE/v8LKNCEy/BqaYzkGPw5cIJ4X6rh3OpBNH4btWQxH4SjWmjZ IjBigAesGGLTCAwl8nX7OYvhoIUHJXEw6DzDU2/2kmmWsnp9VNUucnvoI7lMHNZA7tdVkimwyaV TIgeWOs9xa0EkkVR+lGSvMFL7yPBMeMW5KMEROd9a6Dc5z/y4512Y1if4iMj+rZvTAG5o1isoMv Evc/rQMs3TunXL+IQcjFBq4C+eu1nifRJb4z5GtQYVeF8qrNZ9fllhDkOUc7icF+vKfv8zSLRx5 9B9NydsswtyMxnrpw6PrEQ2kNEZF34MXnykF5FIMJhr/yqwCoK58JjjnjkFv1BBCoyBrlpgNw8o 3dnHEUwo= X-Google-Smtp-Source: AGHT+IGXljG5fdV2UV7d/ojq16hPZdWQ6hJouShkJiIdv6pbB0txRRUWvUoz7wZX8friaN7DEPp3vw== X-Received: by 2002:a05:690c:11:b0:712:d473:b802 with SMTP id 00721157ae682-7164d40a305mr64256017b3.18.1751487303270; Wed, 02 Jul 2025 13:15:03 -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.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:15:02 -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 12/13] mm/damon: Move folio filtering from paddr to ops-common Date: Wed, 2 Jul 2025 15:13:35 -0500 Message-ID: <20250702201337.5780-13-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai This patch moves damos_pa_filter_match and the functions it calls to ops-common, renaming it to damos_folio_filter_match. Doing so allows us to share the filtering logic for the vaddr version of the migrate_{hot,cold} schemes. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai Reviewed-by: SeongJae Park --- mm/damon/ops-common.c | 150 +++++++++++++++++++++++++++++++++++++++++ mm/damon/ops-common.h | 3 + mm/damon/paddr.c | 153 +----------------------------------------- 3 files changed, 154 insertions(+), 152 deletions(-) diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c index 918158ef3d99..6a9797d1d7ff 100644 --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -141,6 +141,156 @@ int damon_cold_score(struct damon_ctx *c, struct damo= n_region *r, return DAMOS_MAX_SCORE - hotness; } =20 +static bool damon_folio_mkold_one(struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, void *arg) +{ + DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, addr, 0); + + while (page_vma_mapped_walk(&pvmw)) { + addr =3D pvmw.address; + if (pvmw.pte) + damon_ptep_mkold(pvmw.pte, vma, addr); + else + damon_pmdp_mkold(pvmw.pmd, vma, addr); + } + return true; +} + +void damon_folio_mkold(struct folio *folio) +{ + struct rmap_walk_control rwc =3D { + .rmap_one =3D damon_folio_mkold_one, + .anon_lock =3D folio_lock_anon_vma_read, + }; + bool need_lock; + + if (!folio_mapped(folio) || !folio_raw_mapping(folio)) { + folio_set_idle(folio); + return; + } + + need_lock =3D !folio_test_anon(folio) || folio_test_ksm(folio); + if (need_lock && !folio_trylock(folio)) + return; + + rmap_walk(folio, &rwc); + + if (need_lock) + folio_unlock(folio); + +} + +static bool damon_folio_young_one(struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, void *arg) +{ + bool *accessed =3D arg; + DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, addr, 0); + pte_t pte; + + *accessed =3D false; + while (page_vma_mapped_walk(&pvmw)) { + addr =3D pvmw.address; + if (pvmw.pte) { + pte =3D ptep_get(pvmw.pte); + + /* + * PFN swap PTEs, such as device-exclusive ones, that + * actually map pages are "old" from a CPU perspective. + * The MMU notifier takes care of any device aspects. + */ + *accessed =3D (pte_present(pte) && pte_young(pte)) || + !folio_test_idle(folio) || + mmu_notifier_test_young(vma->vm_mm, addr); + } else { +#ifdef CONFIG_TRANSPARENT_HUGEPAGE + *accessed =3D pmd_young(pmdp_get(pvmw.pmd)) || + !folio_test_idle(folio) || + mmu_notifier_test_young(vma->vm_mm, addr); +#else + WARN_ON_ONCE(1); +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ + } + if (*accessed) { + page_vma_mapped_walk_done(&pvmw); + break; + } + } + + /* If accessed, stop walking */ + return *accessed =3D=3D false; +} + +bool damon_folio_young(struct folio *folio) +{ + bool accessed =3D false; + struct rmap_walk_control rwc =3D { + .arg =3D &accessed, + .rmap_one =3D damon_folio_young_one, + .anon_lock =3D folio_lock_anon_vma_read, + }; + bool need_lock; + + if (!folio_mapped(folio) || !folio_raw_mapping(folio)) { + if (folio_test_idle(folio)) + return false; + else + return true; + } + + need_lock =3D !folio_test_anon(folio) || folio_test_ksm(folio); + if (need_lock && !folio_trylock(folio)) + return false; + + rmap_walk(folio, &rwc); + + if (need_lock) + folio_unlock(folio); + + return accessed; +} + +bool damos_folio_filter_match(struct damos_filter *filter, struct folio *f= olio) +{ + bool matched =3D false; + struct mem_cgroup *memcg; + size_t folio_sz; + + switch (filter->type) { + case DAMOS_FILTER_TYPE_ANON: + matched =3D folio_test_anon(folio); + break; + case DAMOS_FILTER_TYPE_ACTIVE: + matched =3D folio_test_active(folio); + break; + case DAMOS_FILTER_TYPE_MEMCG: + rcu_read_lock(); + memcg =3D folio_memcg_check(folio); + if (!memcg) + matched =3D false; + else + matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); + rcu_read_unlock(); + break; + case DAMOS_FILTER_TYPE_YOUNG: + matched =3D damon_folio_young(folio); + if (matched) + damon_folio_mkold(folio); + break; + case DAMOS_FILTER_TYPE_HUGEPAGE_SIZE: + folio_sz =3D folio_size(folio); + matched =3D filter->sz_range.min <=3D folio_sz && + folio_sz <=3D filter->sz_range.max; + break; + case DAMOS_FILTER_TYPE_UNMAPPED: + matched =3D !folio_mapped(folio) || !folio_raw_mapping(folio); + break; + default: + break; + } + + return matched =3D=3D filter->matching; +} + static unsigned int __damon_migrate_folio_list( struct list_head *migrate_folios, struct pglist_data *pgdat, int target_nid) diff --git a/mm/damon/ops-common.h b/mm/damon/ops-common.h index 54209a7e70e6..61ad54aaf256 100644 --- a/mm/damon/ops-common.h +++ b/mm/damon/ops-common.h @@ -11,10 +11,13 @@ struct folio *damon_get_folio(unsigned long pfn); =20 void damon_ptep_mkold(pte_t *pte, struct vm_area_struct *vma, unsigned lon= g addr); void damon_pmdp_mkold(pmd_t *pmd, struct vm_area_struct *vma, unsigned lon= g addr); +void damon_folio_mkold(struct folio *folio); +bool damon_folio_young(struct folio *folio); =20 int damon_cold_score(struct damon_ctx *c, struct damon_region *r, struct damos *s); int damon_hot_score(struct damon_ctx *c, struct damon_region *r, struct damos *s); =20 +bool damos_folio_filter_match(struct damos_filter *filter, struct folio *f= olio); unsigned long damon_migrate_pages(struct list_head *folio_list, int target= _nid); diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 48e3e6fed636..53a55c5114fb 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -18,45 +18,6 @@ #include "../internal.h" #include "ops-common.h" =20 -static bool damon_folio_mkold_one(struct folio *folio, - struct vm_area_struct *vma, unsigned long addr, void *arg) -{ - DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, addr, 0); - - while (page_vma_mapped_walk(&pvmw)) { - addr =3D pvmw.address; - if (pvmw.pte) - damon_ptep_mkold(pvmw.pte, vma, addr); - else - damon_pmdp_mkold(pvmw.pmd, vma, addr); - } - return true; -} - -static void damon_folio_mkold(struct folio *folio) -{ - struct rmap_walk_control rwc =3D { - .rmap_one =3D damon_folio_mkold_one, - .anon_lock =3D folio_lock_anon_vma_read, - }; - bool need_lock; - - if (!folio_mapped(folio) || !folio_raw_mapping(folio)) { - folio_set_idle(folio); - return; - } - - need_lock =3D !folio_test_anon(folio) || folio_test_ksm(folio); - if (need_lock && !folio_trylock(folio)) - return; - - rmap_walk(folio, &rwc); - - if (need_lock) - folio_unlock(folio); - -} - static void damon_pa_mkold(unsigned long paddr) { struct folio *folio =3D damon_get_folio(PHYS_PFN(paddr)); @@ -86,75 +47,6 @@ static void damon_pa_prepare_access_checks(struct damon_= ctx *ctx) } } =20 -static bool damon_folio_young_one(struct folio *folio, - struct vm_area_struct *vma, unsigned long addr, void *arg) -{ - bool *accessed =3D arg; - DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, addr, 0); - pte_t pte; - - *accessed =3D false; - while (page_vma_mapped_walk(&pvmw)) { - addr =3D pvmw.address; - if (pvmw.pte) { - pte =3D ptep_get(pvmw.pte); - - /* - * PFN swap PTEs, such as device-exclusive ones, that - * actually map pages are "old" from a CPU perspective. - * The MMU notifier takes care of any device aspects. - */ - *accessed =3D (pte_present(pte) && pte_young(pte)) || - !folio_test_idle(folio) || - mmu_notifier_test_young(vma->vm_mm, addr); - } else { -#ifdef CONFIG_TRANSPARENT_HUGEPAGE - *accessed =3D pmd_young(pmdp_get(pvmw.pmd)) || - !folio_test_idle(folio) || - mmu_notifier_test_young(vma->vm_mm, addr); -#else - WARN_ON_ONCE(1); -#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ - } - if (*accessed) { - page_vma_mapped_walk_done(&pvmw); - break; - } - } - - /* If accessed, stop walking */ - return *accessed =3D=3D false; -} - -static bool damon_folio_young(struct folio *folio) -{ - bool accessed =3D false; - struct rmap_walk_control rwc =3D { - .arg =3D &accessed, - .rmap_one =3D damon_folio_young_one, - .anon_lock =3D folio_lock_anon_vma_read, - }; - bool need_lock; - - if (!folio_mapped(folio) || !folio_raw_mapping(folio)) { - if (folio_test_idle(folio)) - return false; - else - return true; - } - - need_lock =3D !folio_test_anon(folio) || folio_test_ksm(folio); - if (need_lock && !folio_trylock(folio)) - return false; - - rmap_walk(folio, &rwc); - - if (need_lock) - folio_unlock(folio); - - return accessed; -} - static bool damon_pa_young(unsigned long paddr, unsigned long *folio_sz) { struct folio *folio =3D damon_get_folio(PHYS_PFN(paddr)); @@ -205,49 +97,6 @@ static unsigned int damon_pa_check_accesses(struct damo= n_ctx *ctx) return max_nr_accesses; } =20 -static bool damos_pa_filter_match(struct damos_filter *filter, - struct folio *folio) -{ - bool matched =3D false; - struct mem_cgroup *memcg; - size_t folio_sz; - - switch (filter->type) { - case DAMOS_FILTER_TYPE_ANON: - matched =3D folio_test_anon(folio); - break; - case DAMOS_FILTER_TYPE_ACTIVE: - matched =3D folio_test_active(folio); - break; - case DAMOS_FILTER_TYPE_MEMCG: - rcu_read_lock(); - memcg =3D folio_memcg_check(folio); - if (!memcg) - matched =3D false; - else - matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); - rcu_read_unlock(); - break; - case DAMOS_FILTER_TYPE_YOUNG: - matched =3D damon_folio_young(folio); - if (matched) - damon_folio_mkold(folio); - break; - case DAMOS_FILTER_TYPE_HUGEPAGE_SIZE: - folio_sz =3D folio_size(folio); - matched =3D filter->sz_range.min <=3D folio_sz && - folio_sz <=3D filter->sz_range.max; - break; - case DAMOS_FILTER_TYPE_UNMAPPED: - matched =3D !folio_mapped(folio) || !folio_raw_mapping(folio); - break; - default: - break; - } - - return matched =3D=3D filter->matching; -} - /* * damos_pa_filter_out - Return true if the page should be filtered out. */ @@ -259,7 +108,7 @@ static bool damos_pa_filter_out(struct damos *scheme, s= truct folio *folio) return false; =20 damos_for_each_ops_filter(filter, scheme) { - if (damos_pa_filter_match(filter, folio)) + if (damos_folio_filter_match(filter, folio)) return !filter->allow; } return scheme->ops_filters_default_reject; --=20 2.43.5 From nobody Wed Oct 8 02:17:14 2025 Received: from mail-yb1-f179.google.com (mail-yb1-f179.google.com [209.85.219.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E44302D63FE; Wed, 2 Jul 2025 20:15:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487311; cv=none; b=ScWCoZweUPCO0XYZhd/JLcNpHGUPlpfmlfpUGerT+chvTubSHPe5aicMwJVBJA5WEuEQ9mu5IwvoDggUY3SuNb7mRVLZzhL8j05qe/IGXR46U2f64IzAKzjwAQJjfpuOnDPRkww8vtO1vD8BpkY2bzn1CIJcD0rExOBDvaEiH0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751487311; c=relaxed/simple; bh=G1+nrJSlCuTm5ni6kCD8sus2FYIDGsIfqepvM+zEZ2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g6QIIe52GwMVX3vvSTKqrY/PIsP+7X7c7QG7BEWTFvlc9DAMlXXSpd2nkyUiXSzpT1vUIrk+QhFAJGQgYWypapXKC782MAyPDlfj+BzELykoh5mGwPyKrXiG3PM4/Kvj64NqqUZbH6MHT767m5kMLenUTAjXIPwlxkJf9CyB0XY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=F3YanFEJ; arc=none smtp.client-ip=209.85.219.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="F3YanFEJ" Received: by mail-yb1-f179.google.com with SMTP id 3f1490d57ef6-e81826d5b72so5982151276.3; Wed, 02 Jul 2025 13:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487309; x=1752092109; darn=vger.kernel.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=NMg5BL0bm2K3XwrpoVYC/9dFOzEmi6T120k7I9qtnC4=; b=F3YanFEJSgwKjCgVxfNsFxXX4qqG/mYAff/YEVBpRb0b7aYyAIXYgiu0+CObsgxtg5 2uCdbd3eIJaYFjRg2fXYWrgpELTNUBV4D/S2oWp/OjO3m6S+LdSptJyPI6DGhHMWGZXO H4tmf+dLkyK4Zala08oWMj2JFp0LePzrPacMm/elGaSEOP+J2jo1ecTkDcA8wkTYyNVW zXF5mrifl4C8ogaoCtBefEC2WpA7azRpmgj6PX94sTwN0V1+HkqUwWVSM7Ulsld0fzd6 YE67Ex6xe97Ou8wMchO6mx9Tc8YRxcDypH2iXqbOnugN1jPY6z4HhmQdDhK18aNu3sUV z9kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487309; x=1752092109; 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=NMg5BL0bm2K3XwrpoVYC/9dFOzEmi6T120k7I9qtnC4=; b=e/z1Ufr2161pLwAv/6xq9fc7eC4obR6FFL0ibvcqVm0/OLhgN52Hx7J4LFcLt7IcLc vJncyCivGYiwZ5Z/s2cMkOz62h7zyOmy8NRp4YtZDgXPy4fAlARyVff7zbp8gL140rdU IXZMKJQPjlo1viUQ0hUoUcekB+I4jkoaHRqUhFFPLmGsElCjHl1aDaBJvtV4qrqnzkeG rE7y0GEsahM9Nht0EiLtJu/PMiLYY1c9mjMTWI/wVbBHWzzb280XuE9zOv8fuuAJUJTf 6ZjbyCEnGM3TP/+OBkfYhpfXraxWnJk09wFBCh5XMXn/jCsBUvDlEvHe2if9DTjS54AP /pag== X-Forwarded-Encrypted: i=1; AJvYcCUxqYSXDdv9qnOCEdfJgR1em68IOs/Ixql+qQ7OD/SyS1aEqTqDMjgr1Ff8bcMP13G5k8j+h59DR+4=@vger.kernel.org, AJvYcCXDByMCc243ADGY/JAT8E0EQYLxGrV8Lxzhdyq+pmbe43WiN+VTvO6BiV2BtPBkBUc8/Mf0mzU85enNZ0Es@vger.kernel.org X-Gm-Message-State: AOJu0YzAJ6IEW2c6LAziX2C/11PtSkRdf8zJWJmafrev4TkCQUg03C/K Hao079BxdSIDjADPKo3wEmb933Y7Z5TfW57dD11dau4TZOKyt85jcfij X-Gm-Gg: ASbGncth19HfhvVvdavndyEIMVswXCNeOcdMESetJHBpjsWEfgEjshg0ROvY9gCLE7L 735q/+ljeuTNPbGiygxVoPIzAtfiu9bhDqbVHB+gAAvRkzDfhlecQyu4cNKBm0TAANDic3Ed4sB ZcyzRgln2+HdIPZpBffbu4eu5n+vdzkQ5+fpbedvftcMW80vecobF8qxNHX1WC0TIkBNykZZCm3 N984jbjjmoOz/3dZ4yV6UecxSO1mHOoN7BITfAJHNeAk/CGqxMqR59+UH+Sy60Xw+EiZDN/wRQY A70gbjckBc/qHWAvQE91tPiedFH+x5zH7h2DmQ0GG/lBoO67QdYpY77RG9qYJaCPwI9MudCtMPz OQMwegI4= X-Google-Smtp-Source: AGHT+IGKvPDCimyFCg/hqso7aOb/BUUZpqnaqOXEPoQpEeHLKPtOWIiEclbT23ZwcvqRjO6m/wd+RQ== X-Received: by 2002:a05:690c:6701:b0:70e:a1e:d9c7 with SMTP id 00721157ae682-71658fe3499mr15332597b3.10.1751487308762; Wed, 02 Jul 2025 13:15:08 -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.15.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:15:08 -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 13/13] mm/damon/vaddr: Apply filters in migrate_{hot/cold} Date: Wed, 2 Jul 2025 15:13:36 -0500 Message-ID: <20250702201337.5780-14-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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Bijan Tabatabai The paddr versions of migrate_{hot/cold} filter out folios from migration based on the scheme's filters. This patch does the same for the vaddr versions of those schemes. The filtering code is mostly the same for the paddr and vaddr versions. The exception is the young filter. paddr determines if a page is young by doing a folio rmap walk to find the page table entries corresponding to the folio. However, vaddr schemes have easier access to the page tables, so we add some logic to avoid the extra work. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai --- mm/damon/vaddr.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 5f230a427fdc..2a485bf19101 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -611,6 +611,62 @@ static unsigned int damon_va_check_accesses(struct dam= on_ctx *ctx) return max_nr_accesses; } =20 +static bool damos_va_filter_young(struct damos_filter *filter, + struct folio *folio, struct vm_area_struct *vma, + unsigned long addr, pte_t *ptep, pmd_t *pmdp) +{ + bool young; + + if (ptep) { + young =3D pte_young(*ptep); + } else if (pmdp) { + young =3D pmd_young(*pmdp); + } else { + WARN_ONCE(1, "Neither ptep nor pmdp provided"); + return false; + } + + young =3D young || !folio_test_idle(folio) || + mmu_notifier_test_young(vma->vm_mm, addr); + + if (young && ptep) + damon_ptep_mkold(ptep, vma, addr); + else if (young && pmdp) + damon_pmdp_mkold(pmdp, vma, addr); + + return young =3D=3D filter->matching; +} + +static bool damos_va_filter_out(struct damos *scheme, struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, + pte_t *ptep, pmd_t *pmdp) +{ + struct damos_filter *filter; + bool matched; + + if (scheme->core_filters_allowed) + return false; + + damos_for_each_ops_filter(filter, scheme) { + /* + * damos_folio_filter_match checks the young filter by doing an + * rmap on the folio to find its page table. However, being the + * vaddr scheme, we have direct access to the page tables, so + * use that instead. + */ + if (filter->type =3D=3D DAMOS_FILTER_TYPE_YOUNG) { + matched =3D damos_va_filter_young(filter, folio, vma, + addr, ptep, pmdp); + } else { + matched =3D damos_folio_filter_match(filter, folio); + } + + if (matched) + return !filter->allow; + } + return scheme->ops_filters_default_reject; +} + struct damos_va_migrate_private { struct list_head *migration_lists; struct damos *scheme; @@ -695,8 +751,12 @@ static int damos_va_migrate_pmd_entry(pmd_t *pmd, unsi= gned long addr, if (!folio) goto unlock; =20 + if (damos_va_filter_out(s, folio, walk->vma, addr, NULL, pmd)) + goto put_folio; + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); =20 +put_folio: folio_put(folio); unlock: spin_unlock(ptl); @@ -724,8 +784,12 @@ static int damos_va_migrate_pte_entry(pte_t *pte, unsi= gned long addr, if (!folio) return 0; =20 + if (damos_va_filter_out(s, folio, walk->vma, addr, pte, NULL)) + goto put_folio; + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); =20 +put_folio: folio_put(folio); return 0; } --=20 2.43.5