From patchwork Sun May 12 17:54:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13662811 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DDA10C25B77 for ; Sun, 12 May 2024 17:55:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D71E96B0193; Sun, 12 May 2024 13:55:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CB0D36B01A1; Sun, 12 May 2024 13:55:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A885B6B01A0; Sun, 12 May 2024 13:55:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 83A166B0193 for ; Sun, 12 May 2024 13:55:01 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 1F30D409F1 for ; Sun, 12 May 2024 17:55:01 +0000 (UTC) X-FDA: 82110494802.19.B0B57A3 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf04.hostedemail.com (Postfix) with ESMTP id 2C12040004 for ; Sun, 12 May 2024 17:54:58 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=YzfZLIO0; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715536499; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=F7OWT9BgpmpF8hAC9ZHlM8ZpLHVysnlXINkIiv/z4GM=; b=GMK+hiO4acphmo43bSfTfz7SyzGqlvH9pWouhsGhoUXHkw9KCQyjpyEGwgmVlaniCNbh3H deRZzYtkFa7OHeC9Y0f/gmzPolr+qaEhqeUmPjNN3kEbtZRIjORG3gpH2ynJR7e7mRd7oz vyROD0mKgN0yUumsUip7N/TKaOXTNyA= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=YzfZLIO0; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715536499; a=rsa-sha256; cv=none; b=rzsONslVECaVx+H4YtIbDJGChBn9k4TFvfoZ+Bnxra3MGlB7IraRFvPM9xOnmYP+8i4w7c 1laMmox5Y3UxL4zxSOrs30OrYbnsB4bFDqbnlYRklWkVhIjdsqt2cp0RV8eXbs26ne2u7d Q8ns8RF0PxH0TIBg7Q6cEVigy3luFA0= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id C7D99CE0ACC; Sun, 12 May 2024 17:54:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 83FBFC4AF07; Sun, 12 May 2024 17:54:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1715536495; bh=dAqk9DDy2iHhz/atR+7qN/JQ2SHCLI1jeIZ9SIxQ32U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YzfZLIO0xU4xk2uGqYmJFr7f3seXBey3bXrqIjZdiw/SFtMH+fG1I9q4CFgFopxqd IVCnp0TttZkN0fqtW1I0HRDOz9zY7Hqm+1AvNaxbdN/NJXc7SOWQOtXo2Ro+ts6agQ t0HwAzSIReX9f0lWCnagZvNE5sfntr6LCRIzsAUroGijBR6Pxq2vnA9Y4IS9H2QvAG L1cQBBw0OLhgd7HoABJbPLpial7xLk3jDLhb3Z1BR9aYlaIGTYdAWCcoHKkSnrIGyA yJRHG4yG8JyLOix4tNXkKsQHuWXDuTQcrpMKOM/c6OV6IW9l/86wjhbPIkQu181ai+ HaBDUF3ADFFGw== From: SeongJae Park To: Cc: Honggyu Kim , Andrew Morton , linux-mm@kvack.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org, SeongJae Park Subject: [RFC PATCH v4 1/5] mm: make alloc_demote_folio externally invokable for migration Date: Sun, 12 May 2024 10:54:43 -0700 Message-Id: <20240512175447.75943-2-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240512175447.75943-1-sj@kernel.org> References: <20240512175447.75943-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 2C12040004 X-Stat-Signature: nsoj1shi6dfxc3mxf7kwuxraog5nnkmt X-Rspam-User: X-HE-Tag: 1715536498-309630 X-HE-Meta: U2FsdGVkX1/0kmdZz6/oBYrYtYHq422DXLHUx/0lHUEhergbraB2eY+aIuHMlToix2Av94ELUc/UW3NMkUnc3F2NSiegFA1iUeq7OWbZxprjhuWMnuPi4jU/a1aGDgPJlfHXuiLXltuq1uUyrCr3l8PGKD8sh7tu6UXGSQMf7nJMqwFKDQ0ks8Skl8A3zeZtaVdqvrQE9hxUGUUIRQuihxElxA/xA0mMUSRRANXx+q5/oV9V/nQpQ0ZZ+EIH9/kmE5ISQQOYJF/3TqK0dSpOte6mk/yCYOLPnkamJGmskjcaLU8BBH3C4QRFxI1ku1ZRu/6ZKOmL/9hH/nqx7IGWAcsTW0pdC9cI247kMsLkBMtKJsU+SZY2nXo2V4jg4H9p9p1Sefa8lr0sU0J400ynfBjOuUbVFHZ+bLASi10PHAwJES3LjFIOLdpg3sg58sWo4ykIEwKkowojj2D679fd5OUQQZz7WjiG5SMSKX685O3Y/wKqujOs+/tvLR6Kjzw61n9utq/qpprIDrFv9heCCt/cy2IfwOiCHe2hrtvLLA8pggbVG86ZH6d7hMntiHab4xhDhjEk2Ypice5Mttv+IjcFhZvzg9MVLzl/LO9h8KLiTO8Z7YuApZroyu+z/ZJ+C//9DDE3cxejuvYX8aq3dAJjxazc/AnmIgHojf0f4vYiYl6xVV0IewM97qV9wEKx/XjfxbMw3CgEC1UHOetpO30M6Bz58mRCpqWnjkrVMf9kSPD69SITvNTnqmET4ncu74JN58NxPhNEE/F/q1o611tSi1l9OimvSFugKnnEBKhFXA9vYiwJrg6+KwET15wnTzPoR/AzXsWa/kKaU+sFEutTUvHlfBxp1IesMXHFnzsYxN1DcDSnXcEEPnykV4CcoxFCyoRNU49gjxKwdHNYKm36KNx1wT3iocIyj7sRiaoIcPZso32kre7vGgQrv3Nw9u3pHFCUEuif9coaPbz jYB80DLh TpSu1K/9dkBNpZIzPPPytUx+hGKm6cHH5qfli7Eu4ooQJX/sL5CKTZ76VVJzm7WEbK2tPjjxFdHVDwj3HHvhNZq7h22Py2JeCjbQfNZjzaZ2oscN0u1OuLoG5zQH79150cA9WuY9idd/PkmqGy9VawVy4t/lsfbp6xZjPR54GfzGbhOkgiCnKKCgR/LVpaHOvrdbg+nG9ViO5fLi84DwK7+MX8BOnYjk6GZ1qeM+m9UFjjhjAGLecwb1kYuv8pUL4DObxqwRXtFxgaFIFaYpbejl1WtwKJdI/GFuLqLtTBM1dlXbdBGXUxKOjw+CUjqnu2952WBpjKjZzIwF1eqbJqBNOlQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Honggyu Kim The alloc_demote_folio can be used out of vmscan.c so it'd be better to remove static keyword from it. This function can also be used for both demotion and promotion so it'd be better to rename it from alloc_demote_folio to alloc_migrate_folio. Signed-off-by: Honggyu Kim Reviewed-by: SeongJae Park Signed-off-by: SeongJae Park --- mm/internal.h | 1 + mm/vmscan.c | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index b2c75b12014e..b3ca996a4efc 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1052,6 +1052,7 @@ extern unsigned long __must_check vm_mmap_pgoff(struct file *, unsigned long, unsigned long, unsigned long); extern void set_pageblock_order(void); +struct folio *alloc_demote_folio(struct folio *src, unsigned long private); unsigned long reclaim_pages(struct list_head *folio_list); unsigned int reclaim_clean_pages_from_list(struct zone *zone, struct list_head *folio_list); diff --git a/mm/vmscan.c b/mm/vmscan.c index 6981a71c8ef0..27269bc2bcc5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -933,8 +933,7 @@ static void folio_check_dirty_writeback(struct folio *folio, mapping->a_ops->is_dirty_writeback(folio, dirty, writeback); } -static struct folio *alloc_demote_folio(struct folio *src, - unsigned long private) +struct folio *alloc_demote_folio(struct folio *src, unsigned long private) { struct folio *dst; nodemask_t *allowed_mask; From patchwork Sun May 12 17:54:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13662808 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1A73C25B4F for ; Sun, 12 May 2024 17:55:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5CDDE6B00DF; Sun, 12 May 2024 13:54:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 57D2F6B00E3; Sun, 12 May 2024 13:54:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4451D6B00F5; Sun, 12 May 2024 13:54:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 237936B00E3 for ; Sun, 12 May 2024 13:54:59 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A1DB540B01 for ; Sun, 12 May 2024 17:54:58 +0000 (UTC) X-FDA: 82110494676.18.AF54155 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf25.hostedemail.com (Postfix) with ESMTP id DD756A0011 for ; Sun, 12 May 2024 17:54:56 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=lyBAV9AV; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715536497; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oNVmLJ6k9ivk6XXOchJrvdB1kICq33ICLN6C7+vYZgo=; b=uZ1WP7YfMu9XNHNx90kzx803DHK/wOjLZ/g4cWfzUmyIN/ySTFhKuLMYxI3ncKYqnxAzlg D4X1cJREiC/djN4p6i1NQZcwtNRtgSurp36o0kxxQgpEFPel4nnz3uoczwa+B6NaIWZW4p 4irYwQ/X5T2UikOrK+Ue7wKQB1KtZbw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715536497; a=rsa-sha256; cv=none; b=kj5xxnAOiO6KGGlf0CuIcDuHdDIpecj+rDAtZQRp4C7Ekbu6ypMIRR+N/Tq9dojqlB2sZA WNmB+x5ZBFEQkF5frDlDW5F7UPuWvdwAbvfdV3GCsNwTYw2Y3eZd1WAb1LgWRp3vcYilX2 8OqZ5ciZUg6sO7HKRkAiJjjvzW6F+0w= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=lyBAV9AV; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 11AA360B6E; Sun, 12 May 2024 17:54:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2FABCC116B1; Sun, 12 May 2024 17:54:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1715536495; bh=vBax8IQjCZahbUBgsA8N3gO+pf43TzfEVXtgesAQ6bE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lyBAV9AVGCq6yXdy/aW3PmZ8JWsV8XngJMaFr7osxhdC0ekeLwPTvVw6Wiyg+PCPu eRdHFPEp6poLsUEDvio7nw1h6oX84fhBy8yyV3VTGioQRBvofhvpNZ/cr+QUwZt4Rm pUvI4R9YYYfVpasOVMitrr2pQ84mVKGNXWtcqGNsBlyTzKdaXWqP9V/AytmDCZhrSY XlD98FWNAgZwMEllxKOh3k50efUoMsnKpn/bHWSM/1hMMb78X7ec/04u6ZTypiJYrd J3r0o3mEJc4aPWXNhaE0GUdgdX6YF5L7DmnS1X8HpAe3KmPcqsp01gq1vNl4lYLwCA EOT9JC90/lCDw== From: SeongJae Park To: Cc: Hyeongtak Ji , SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Honggyu Kim Subject: [RFC PATCH v4 2/5] mm/damon/sysfs-schemes: add target_nid on sysfs-schemes Date: Sun, 12 May 2024 10:54:44 -0700 Message-Id: <20240512175447.75943-3-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240512175447.75943-1-sj@kernel.org> References: <20240512175447.75943-1-sj@kernel.org> MIME-Version: 1.0 X-Stat-Signature: 7zz9z7wqb4qjq9sse86mtn7zkrioz4th X-Rspamd-Queue-Id: DD756A0011 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1715536496-619978 X-HE-Meta: U2FsdGVkX1+YH4wrg5iszakXtxbjDsD7You8CgoDC6CAMxXaC916RQ8CB4f8YuOb7sK3fJrMQ93DC6KektXtkzzEAQj8YPjXUbIRoEn25JSj12V79W3Jh8H+hSvT0EIikxgL9t3+OHyjOoJOLz1I8Ya2DkBCmHeBXU+nsivNfJj/U+bB1AEJMrfHRgYaZvCzfbo3jFi3wwnM6Tbinc+aFqIs0NW1n5346JCp89O9RgJ0C2aKkiOf8XPDJ1mYtU+9MijthDaMc+ueVN8bw5wGYrsX0AKedaZoUYNXUR18mhddvXzRp5QblyiKQ715oaUClheEWEpHypT9Zh8d+A9V+IEUxwlSI8kHlbP+irmJiJKuenRXDU+2jcdjrODC+o90qJBxooJpVQMxhSv8KKLaGSazB7hb7HHbXuDRmtOLm0oEt14Yaz9k4wVdeu7W7YhczET7OtpQMqwI2/cr23HuePcseqgY2+Ia5YfkHYf6/u/EWGjH34UMQ7pP5GRo9stHqK5sJr2dlcGXV2e414XZUalv5M5l9qJfkdribug1HDoP6D6rRgvs139wq7zurZiVQn8GUHUKR8hCRw1DynxBvwdEZKoLOUvKqijxwqv1kR0FwE6TmlQIaBBwIB7zDTofT0o1toe4WLlKGToIWPmVkqqPslooms3Xcvrv7KHxboq1KK+6J3ONhqeKXDdrQ0GWIxv4PlbILSYtxC4bU0YrNVrJBiy8IUOzEVDLgvqX2dNPXh5OKLnuB0/V0lRyBNALZmaRi2XCflm/8qocKhHuMqY3XUZY3LhfG4Bg/GzeIMxN6E0Y/l2x0bTeFiYpkgMkXJUz3Li/QnQmZfFvSBFetzw22W8M7t/ruN1QRjtpYVmCw4f1MnMfM22MaM9pxwFwByUmUHocOkugnJkEQvRu/UIDcGPYGvBXjGOfyorWJUxaGXDW1cFAjkKePWGCT8l59rOn3hvsUMvYsioZnhu IE4/M9qD IKYrXd1wc3Te5sI7N8hgEaFWf4Peb4qOXkBjatLDuid4Yg8+upHE97YW5ITr2x1zfwOCmsV6TZLylR+LNYhaTJHpju3N2SrxOfbr+e3fWOM1C2el4CQx4TaxEw2IOrzi3+1NNgdClX8qeqadyBxoD3bsgONBM0UjazhRPiZSWdwSHjFxGbDtFtVFzHkwVhqfbb+dmW3+brUfUF7Km5scG2o38zjhriA+dRpKeoMUQNdGFYFAaVFFU4My8bvK+3lXyODy5oJAuP4STNjDnK2LQd2BqC6vGGL6LBaMsiqdjrxEqXKvGEwyYx/wSF/O8x8hG1+COKXawUZbrZ0vtFibQ1z+ALRl6f4z63jb0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Hyeongtak Ji This patch adds target_nid under /sys/kernel/mm/damon/admin/kdamonds//contexts//schemes// The 'target_nid' can be used as the destination node for DAMOS actions such as DAMOS_MIGRATE_{HOT,COLD} in the follow up patches. Signed-off-by: Hyeongtak Ji Signed-off-by: Honggyu Kim Signed-off-by: SeongJae Park --- include/linux/damon.h | 11 ++++++++++- mm/damon/core.c | 5 ++++- mm/damon/dbgfs.c | 2 +- mm/damon/lru_sort.c | 3 ++- mm/damon/reclaim.c | 3 ++- mm/damon/sysfs-schemes.c | 33 ++++++++++++++++++++++++++++++++- 6 files changed, 51 insertions(+), 6 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index f7da65e1ac04..21d6b69a015c 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -374,6 +374,7 @@ struct damos_access_pattern { * @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. + * @target_nid: Destination node if @action is "migrate_{hot,cold}". * @filters: Additional set of &struct damos_filter for &action. * @stat: Statistics of this scheme. * @list: List head for siblings. @@ -389,6 +390,10 @@ struct damos_access_pattern { * monitoring context are inactive, DAMON stops monitoring either, and just * repeatedly checks the watermarks. * + * @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". + * * Before applying the &action to a memory region, &struct damon_operations * implementation could check pages of the region and skip &action to respect * &filters @@ -410,6 +415,9 @@ struct damos { /* public: */ struct damos_quota quota; struct damos_watermarks wmarks; + union { + int target_nid; + }; struct list_head filters; struct damos_stat stat; struct list_head list; @@ -726,7 +734,8 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, enum damos_action action, unsigned long apply_interval_us, struct damos_quota *quota, - struct damos_watermarks *wmarks); + struct damos_watermarks *wmarks, + int target_nid); void damon_add_scheme(struct damon_ctx *ctx, struct damos *s); void damon_destroy_scheme(struct damos *s); diff --git a/mm/damon/core.c b/mm/damon/core.c index e1a0c2a11007..32c261aeff88 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -364,7 +364,8 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, enum damos_action action, unsigned long apply_interval_us, struct damos_quota *quota, - struct damos_watermarks *wmarks) + struct damos_watermarks *wmarks, + int target_nid) { struct damos *scheme; @@ -391,6 +392,8 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, scheme->wmarks = *wmarks; scheme->wmarks.activated = true; + scheme->target_nid = target_nid; + return scheme; } diff --git a/mm/damon/dbgfs.c b/mm/damon/dbgfs.c index 2461cfe2e968..51a6f1cac385 100644 --- a/mm/damon/dbgfs.c +++ b/mm/damon/dbgfs.c @@ -281,7 +281,7 @@ static struct damos **str_to_schemes(const char *str, ssize_t len, pos += parsed; scheme = damon_new_scheme(&pattern, action, 0, "a, - &wmarks); + &wmarks, NUMA_NO_NODE); if (!scheme) goto fail; diff --git a/mm/damon/lru_sort.c b/mm/damon/lru_sort.c index 3de2916a65c3..3775f0f2743d 100644 --- a/mm/damon/lru_sort.c +++ b/mm/damon/lru_sort.c @@ -163,7 +163,8 @@ static struct damos *damon_lru_sort_new_scheme( /* under the quota. */ "a, /* (De)activate this according to the watermarks. */ - &damon_lru_sort_wmarks); + &damon_lru_sort_wmarks, + NUMA_NO_NODE); } /* Create a DAMON-based operation scheme for hot memory regions */ diff --git a/mm/damon/reclaim.c b/mm/damon/reclaim.c index 9bd341d62b4c..a05ccb41749b 100644 --- a/mm/damon/reclaim.c +++ b/mm/damon/reclaim.c @@ -177,7 +177,8 @@ static struct damos *damon_reclaim_new_scheme(void) /* under the quota. */ &damon_reclaim_quota, /* (De)activate this according to the watermarks. */ - &damon_reclaim_wmarks); + &damon_reclaim_wmarks, + NUMA_NO_NODE); } static void damon_reclaim_copy_quota_status(struct damos_quota *dst, diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index bea5bc52846a..0632d28b67f8 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -6,6 +6,7 @@ */ #include +#include #include "sysfs-common.h" @@ -1445,6 +1446,7 @@ struct damon_sysfs_scheme { struct damon_sysfs_scheme_filters *filters; struct damon_sysfs_stats *stats; struct damon_sysfs_scheme_regions *tried_regions; + int target_nid; }; /* This should match with enum damos_action */ @@ -1470,6 +1472,7 @@ static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc( scheme->kobj = (struct kobject){}; scheme->action = action; scheme->apply_interval_us = apply_interval_us; + scheme->target_nid = NUMA_NO_NODE; return scheme; } @@ -1692,6 +1695,28 @@ static ssize_t apply_interval_us_store(struct kobject *kobj, return err ? err : count; } +static ssize_t target_nid_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_scheme *scheme = container_of(kobj, + struct damon_sysfs_scheme, kobj); + + return sysfs_emit(buf, "%d\n", scheme->target_nid); +} + +static ssize_t target_nid_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_scheme *scheme = container_of(kobj, + struct damon_sysfs_scheme, kobj); + int err = 0; + + /* TODO: error handling for target_nid range. */ + err = kstrtoint(buf, 0, &scheme->target_nid); + + return err ? err : count; +} + static void damon_sysfs_scheme_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_scheme, kobj)); @@ -1703,9 +1728,13 @@ static struct kobj_attribute damon_sysfs_scheme_action_attr = static struct kobj_attribute damon_sysfs_scheme_apply_interval_us_attr = __ATTR_RW_MODE(apply_interval_us, 0600); +static struct kobj_attribute damon_sysfs_scheme_target_nid_attr = + __ATTR_RW_MODE(target_nid, 0600); + static struct attribute *damon_sysfs_scheme_attrs[] = { &damon_sysfs_scheme_action_attr.attr, &damon_sysfs_scheme_apply_interval_us_attr.attr, + &damon_sysfs_scheme_target_nid_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_scheme); @@ -2031,7 +2060,8 @@ static struct damos *damon_sysfs_mk_scheme( }; scheme = damon_new_scheme(&pattern, sysfs_scheme->action, - sysfs_scheme->apply_interval_us, "a, &wmarks); + sysfs_scheme->apply_interval_us, "a, &wmarks, + sysfs_scheme->target_nid); if (!scheme) return NULL; @@ -2068,6 +2098,7 @@ static void damon_sysfs_update_scheme(struct damos *scheme, scheme->action = sysfs_scheme->action; scheme->apply_interval_us = sysfs_scheme->apply_interval_us; + scheme->target_nid = sysfs_scheme->target_nid; scheme->quota.ms = sysfs_quotas->ms; scheme->quota.sz = sysfs_quotas->sz; From patchwork Sun May 12 17:54:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13662812 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5270FC25B4F for ; Sun, 12 May 2024 17:55:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C5E536B01A1; Sun, 12 May 2024 13:55:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C1CEB6B01A2; Sun, 12 May 2024 13:55:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A88B96B01A4; Sun, 12 May 2024 13:55:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 894476B01A1 for ; Sun, 12 May 2024 13:55:02 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 290D8C0446 for ; Sun, 12 May 2024 17:55:02 +0000 (UTC) X-FDA: 82110494844.20.C4D4EF7 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf17.hostedemail.com (Postfix) with ESMTP id 3137740004 for ; Sun, 12 May 2024 17:54:59 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ZiCeiPqc; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715536500; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0rApBdejbD4xR0vywUOJF431iKGvRkZznKrbCyUVjIo=; b=YhqA/Fh5GObWCHVwbu0oXzt3SEVg9h71YUj8WhE3Jy2P76trjLbyXt3Uq3wfWXoxmCEgV7 wIsONh7HVz9j2KTocmnEFycZzxnZiiDamOCm29UMuvbJPLAOIIO12tZHcCRFKFEkw/+7dy QOBjomCODJR9bD2p5GmO2ZZAg+1dRJs= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ZiCeiPqc; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715536500; a=rsa-sha256; cv=none; b=lBAaVC5tRGKFGbD+mYSZKHEgRJm9eOobQaooe+9MXWE3YUbDbp20B+/iUcRic5iVjLRsUn Y2pQ7Ezcd2PWcLwP5JMcgnorqamBc0ql2ElHLii/72ROYGyOwh+6xqetNWSnLGN9YF6xr2 yS4j4FKgeolIN7Hom/Dzn3WKLFtv6BQ= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id F1C3ECE0B15; Sun, 12 May 2024 17:54:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFC4CC4AF08; Sun, 12 May 2024 17:54:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1715536496; bh=0nYpdJNOcVsAetSwCRBcYWpfg7K4GaKZMal/LiW2aDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZiCeiPqcqV3HR6k9NGEGmv4MbUCDzmuxGtuizXoVn0cPcZ2oH7D0dAD2qaL9JevbA 2/PofgQ5iNSARyYqrbxl48ZFFfT0CGlMaaT0tgpiFcmpGWnUYnlZsmMxAnBupiQA5B 8ZUMqtWE2Gpr66DPiyuAbwLu///LkQbyiD29BfRtrL40kVnknmVPavydG9qYWh6U+E AINgYWGQP/LzlQjCbobJc7kgKHZeh8a4B1Y2QTxPaqPnmTu4n4hmdswrnyM1A3JsK9 SWEZD9x+rYdlDmywxX7FvHgs7UlmCh8pgn5y2ZzCwA02OkVzGfOjj22voQEi+7xy7x ZuQzZOOofKOIg== From: SeongJae Park To: Cc: Honggyu Kim , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , linux-kernel@vger.kernel.org, damon@lists.linux.dev, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, SeongJae Park Subject: [RFC PATCH v4 3/5] mm/migrate: add MR_DAMON to migrate_reason Date: Sun, 12 May 2024 10:54:45 -0700 Message-Id: <20240512175447.75943-4-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240512175447.75943-1-sj@kernel.org> References: <20240512175447.75943-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3137740004 X-Stat-Signature: r5ttxxjswzpzr9byia4q98bcr4pmshbt X-Rspam-User: X-HE-Tag: 1715536499-408352 X-HE-Meta: U2FsdGVkX1/933zbYAAdeUDAMeMgSP31ogC8kmK4X37jBrSPXz+ssOBMUTZefUyPtrqANEvVQvhk8VF+up/QMFyH3WT79UFZj9q99LGLLo0xJE+8KiJyRBORUoX8HIyXDelW5MOAvs9/Cwezz5z2QuTBXGoCVVzcgZPkDLwHbTuhx2QJ97L6cVZj0CWLTjXlDcMs9wIZ/A6V9q+MikilPLnXSquxKGL16Vr0C+Se0X1vq9LhbbLGVk7U5PKuVkA2OA3Wf/92WMR8TqbsqupQSiJIwE29BvgEbondCyYOtnDxz9ej8K/WP5Rkvc0q/831YyoNptKgQpeG9eyb2wm7I9kdr6tzNbxswyV3JDWZSiRdjv08vupRT80t5gDIBZ+BuZCWfhO1xF3XpogXBw2KdBbhP+DwPBlf67IAPoSpK1GMl7aI5RY8rBFrY05eysLwTaDDFmpdE96W9wEBVlYFD22awWtKmI/1DqZBjPkysWhjVngp1BtBuy8HNbu1vckROFprpBgHoTv6eOist71MOfYQVrEOZyNEQwIgKQKPTyYNWm/I1OfFpoQn7p7MZKcP2ex1MWqBw+au0zQBSJW5+D/mVs0WEIi8Fd4vM1lW/tuoWjv0WCyqDxCQkb+C4kUS3N2Ic5X6rOtl9Bpf02SkiyWN6qK7xSeDQu2dKI/D1Mgoh/l6AIB4XF4mKngGseyawcypG1B96M+uJk0Xx5M8gwS6ADWGbzjYSo5CeMb/FZ6V8KlHCJX1jdcZaPUB1ffUZVTUqg5QeoUmS6QLq6FSVThakyvJK+EjapH7VxKY3cZw/OJzVCWaC1FgWZO7DknBcMYq474gVBxuXyBaAmkA0jqSYr9uiA2eRNsQ571iP+fiPFqSJP5nOS/tpXuE9FI9CoHMAwcEEfhowYfEHkHEE+c9hx4Wj7gmH4rE3/AhTJtsGCGZL470Hx7iXmyYUQLLvZTiTAarp2u+w6W67UT vrYvdpL4 8eSAKpO4qmaHGelfXhAcSIY94jTJl+nDfYgmX3xdjsyiLO9RBHCH86rvLJCiXbMsevayiY+HZ/SGPa4z0s1iinUqcoZHq5tBspkho0LtF/61kxbl7cJ6wo8pfYEpyapmd4RpYtA3uygRrMjq7sTASyUpXoGNcTL5bYh4B6A9AskH5bk+P7jGqUDEqBEiCJ8eHxK+8TIz1Ly/jtnpLf41ijmOdYaGplsvmdprJkmku0c/kQCAobYxH5t4mYcV0Dsuywvt4R7GMQk09SnMoqBtb0k7veAFajXur8TL2m+GRzeWRYYQbrpXtgSsxVIcvcf9dI+dW4e0/TX2KZHobqcsveMoSt0qr+IG0yAlb X-Bogosity: Ham, tests=bogofilter, spamicity=0.000004, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Honggyu Kim The current patch series introduces DAMON based migration across NUMA nodes so it'd be better to have a new migrate_reason in trace events. Signed-off-by: Honggyu Kim Reviewed-by: SeongJae Park Signed-off-by: SeongJae Park --- include/linux/migrate_mode.h | 1 + include/trace/events/migrate.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/linux/migrate_mode.h b/include/linux/migrate_mode.h index f37cc03f9369..cec36b7e7ced 100644 --- a/include/linux/migrate_mode.h +++ b/include/linux/migrate_mode.h @@ -29,6 +29,7 @@ enum migrate_reason { MR_CONTIG_RANGE, MR_LONGTERM_PIN, MR_DEMOTION, + MR_DAMON, MR_TYPES }; diff --git a/include/trace/events/migrate.h b/include/trace/events/migrate.h index 0190ef725b43..cd01dd7b3640 100644 --- a/include/trace/events/migrate.h +++ b/include/trace/events/migrate.h @@ -22,7 +22,8 @@ EM( MR_NUMA_MISPLACED, "numa_misplaced") \ EM( MR_CONTIG_RANGE, "contig_range") \ EM( MR_LONGTERM_PIN, "longterm_pin") \ - EMe(MR_DEMOTION, "demotion") + EM( MR_DEMOTION, "demotion") \ + EMe(MR_DAMON, "damon") /* * First define the enums in the above macros to be exported to userspace From patchwork Sun May 12 17:54:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13662809 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C802CC25B4F for ; Sun, 12 May 2024 17:55:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C87ED6B0114; Sun, 12 May 2024 13:55:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BC05E6B0193; Sun, 12 May 2024 13:55:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A8C466B01A0; Sun, 12 May 2024 13:55:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 7443C6B0114 for ; Sun, 12 May 2024 13:55:00 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E21011A0B79 for ; Sun, 12 May 2024 17:54:59 +0000 (UTC) X-FDA: 82110494718.19.9ED7CEC Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf26.hostedemail.com (Postfix) with ESMTP id 505FF14000A for ; Sun, 12 May 2024 17:54:58 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Cc70FMlK; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715536498; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VJpsqidB+sPCTOeJSLqcSxbS/rS/jby608SgB8npLVQ=; b=Ql3bHzC+GzeN23Pk7diLIzpLvCMeVY41xEaSyN/Vb1AQWhWHLJKAcf7k0xMJeGwR3D68Mu DG0TqJ7Lj1jWq97tiXUxqMwfEjzspQlZULw68WnNKY5aozCbHj9aasED1HQ/OF9mOs6tIj Jphp9ehdlEZbikITLDysGwV2ERNrMkU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715536498; a=rsa-sha256; cv=none; b=5oZ0TJAguvZIDjLvcEyoe5X/CbXckjVmbX+pqumTKLoOHRW6OoHcsbQlZkhB9gOzIcsfTD 3UemUYOOlF5ydVrwAEjB/OvW1tEqX9+Xc0FY4EYfw5tGysbwNvuFicQjnjmbC6tXS+EnGN mSXorPRzbN95CotpMvSZjFktxeqR0/4= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Cc70FMlK; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 8F86560B8D; Sun, 12 May 2024 17:54:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC9FFC4AF07; Sun, 12 May 2024 17:54:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1715536497; bh=pJ6vzvCtZUPWSFq3LZUFfl+zSubCIvDIafn053zECpU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Cc70FMlKxLi1JuD51HmpqEsx8453y79uRyuCpKWF1nFmbmpT3wquNTxEgmigdAGeP vOBagAGtYXvLeuZDb7OAbeB7Bg/rsRmffuka3NZMTyvrPgBuKUCuH6zS64yc8uIegg eo9hlLQMmqvopMR8rbRj2YnhWwtjtZotQ5AgJi26Y5BHdKGHt7b7iqvcnrIV+0XH5h 5Ay0c7jBCrdo0JwwpVwLuqqcqJQx6Ur+54tZHTranalXvTOFgw1NHZQYObYyribLXj HySwsRHduSQvTrYwk/d08i69oLkf8HWJkllCj9u+M2yPaM6ABrwmmwrU9Wo0GCzIZN 3zOv8UL9vgZ0w== From: SeongJae Park To: Cc: Honggyu Kim , SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Hyeongtak Ji Subject: [RFC PATCH v4 4/5] mm/damon/paddr: introduce DAMOS_MIGRATE_COLD action for demotion Date: Sun, 12 May 2024 10:54:46 -0700 Message-Id: <20240512175447.75943-5-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240512175447.75943-1-sj@kernel.org> References: <20240512175447.75943-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 505FF14000A X-Rspam-User: X-Stat-Signature: 945mmnt7ofh98s4fk39yi48kbybsn36r X-HE-Tag: 1715536498-431231 X-HE-Meta: U2FsdGVkX18ryZO55GuIiSqPnhT4G4jK+7vJTdD13/GGw/7bYgqUBZ7HF3aNqYh2DAJx3V4iDe3U5RlaUMMcEkEyzZHwmSt3yCZYGZMmMAn6b6VYBDw9KniIz75M9c38xfCjIqzMazGGAZj6KckRfUkA2AFr+pALW1kROXtaDzIbE03eoL/qFQ3jMqfUE/tqdPjIToDgjJuNA+Wp5vg2LQyqwPEW09KTuFzoO7RYI6VOYGPiaVosgw4BQ24tEV2dA4RL71S3GZ4tBcwyAWfpDkt5DO9X9abreWE4Laq9vqVOBLYn0m1ADmTvdoBqjWPeCThDh9wuj+sIDWqAhXsZECYTry0K62gHcCKj+VLJ9mpB7TRbXcxp4ckWjIBVqMKt6VsSZ7CHc68SVLAm0jlM3MDbEtqBCsU0n7WgWA7FJDnzPp/nketA2w7JGy9XTunuPOZG2Dnpk7HXPU24p8AK2BksQjar5ym42ZPWoNujqwFoNOniwjXGvQsj3oANsDLUbdgSTnobRQThUlXjVb7YJs8NwylaDBsyyc49SS7z0dcZQXsParulxLsyDGjgPH/BrSdJgkJq2/T2ansdPmTYw75GcvAaWKThGvAOn36J5n5RlM6j/erR+08eFLMN+EGXE2Svq5CjljhmROE7xxg3jcEElOZpo6s4z9M6Wu1YhOoGCJegwGJ+FwIZ+79IhBOTsxNdb2OtVxeU3Oshu5ViPWTWiMoUSFhsY0xhs0QJ4vV/Y0mz5yqllCYwoiV6ibOvua+bbYIQ7x/Nmjd86dlhHjq3jPSH7jYPNKJtGJ1wYCbauwp9b/Ios6/i0nHL39DM3sKD7jovw/oH4WscxvEdMcjPNLB3HlD9q35VFO5P6KZxYdg8HhzMsfsUdn25ZFR8gzb9n6kQ+V2qS4bOZoBiW7j7IwceTZ7dD8NkLZCj6F/U5vmec2of8+niroJ0DijOwezWy3SGoFVRQjcShSF /CWLnzdn AprRzid09/wu4iR64Vq4Yud7iMq7VhSkI/D/wJzfDZX/FQLNUFnbZIhH9hQZu+CXVjt+0TH2V9ng5eHuCsoPp5T/ld7DztYJK5wCMHce3TlyS4/wcKCMWnBFgXSdy4e1DT4oqPtflOYLeuYGmMqG2j3XQRBupiwr9V/IH3mKdp5qR0URk4NsSY0RH/1xlE/u1n0K719+AhiZSJnKR/fYrJIYpzbF1lCrBBajMSjvMzKUddjJKsM/jAxMsc74kbtrBj2O3xok5syMkIMiKoiR9yste3OxoTm0VaGCZDGF7yoidh55oaKegQgPjjLvxjcp0iWv84kJMR6hbRbqL7wEft3FQjfFmHgZCM5Qs X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Honggyu Kim This patch introduces DAMOS_MIGRATE_COLD action, which is similar to DAMOS_PAGEOUT, but migrate folios to the given 'target_nid' in the sysfs instead of swapping them out. The 'target_nid' sysfs knob informs the migration target node ID. Here is one of the example usage of this 'migrate_cold' action. $ cd /sys/kernel/mm/damon/admin/kdamonds/ $ cat contexts//schemes//action migrate_cold $ echo 2 > contexts//schemes//target_nid $ echo commit > state $ numactl -p 0 ./hot_cold 500M 600M & $ numastat -c -p hot_cold Per-node process memory usage (in MBs) PID Node 0 Node 1 Node 2 Total -------------- ------ ------ ------ ----- 701 (hot_cold) 501 0 601 1101 Since there are some common routines with pageout, many functions have similar logics between pageout and migrate cold. damon_pa_migrate_folio_list() is a minimized version of shrink_folio_list(). Signed-off-by: Honggyu Kim Signed-off-by: Hyeongtak Ji Signed-off-by: SeongJae Park --- include/linux/damon.h | 2 + mm/damon/paddr.c | 154 +++++++++++++++++++++++++++++++++++++++ mm/damon/sysfs-schemes.c | 1 + 3 files changed, 157 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 21d6b69a015c..56714b6eb0d7 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -105,6 +105,7 @@ struct damon_target { * @DAMOS_NOHUGEPAGE: Call ``madvise()`` for the region with MADV_NOHUGEPAGE. * @DAMOS_LRU_PRIO: Prioritize the region on its LRU lists. * @DAMOS_LRU_DEPRIO: Deprioritize the region on its LRU lists. + * @DAMOS_MIGRATE_COLD: Migrate the regions prioritizing colder regions. * @DAMOS_STAT: Do nothing but count the stat. * @NR_DAMOS_ACTIONS: Total number of DAMOS actions * @@ -122,6 +123,7 @@ enum damos_action { DAMOS_NOHUGEPAGE, DAMOS_LRU_PRIO, DAMOS_LRU_DEPRIO, + DAMOS_MIGRATE_COLD, DAMOS_STAT, /* Do nothing but only record the stat */ NR_DAMOS_ACTIONS, }; diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 18797c1b419b..a468792d9162 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include #include "../internal.h" #include "ops-common.h" @@ -325,6 +328,153 @@ static unsigned long damon_pa_deactivate_pages(struct damon_region *r, return damon_pa_mark_accessed_or_deactivate(r, s, false); } +static unsigned int __damon_pa_migrate_folio_list( + struct list_head *migrate_folios, struct pglist_data *pgdat, + int target_nid) +{ + unsigned int nr_succeeded; + nodemask_t allowed_mask = NODE_MASK_NONE; + struct migration_target_control mtc = { + /* + * Allocate from 'node', or fail quickly and quietly. + * When this happens, 'page' will likely just be discarded + * instead of migrated. + */ + .gfp_mask = (GFP_HIGHUSER_MOVABLE & ~__GFP_RECLAIM) | + __GFP_NOWARN | __GFP_NOMEMALLOC | GFP_NOWAIT, + .nid = target_nid, + .nmask = &allowed_mask + }; + + if (pgdat->node_id == target_nid || target_nid == NUMA_NO_NODE) + return 0; + + if (list_empty(migrate_folios)) + return 0; + + /* Migration ignores all cpuset and mempolicy settings */ + migrate_pages(migrate_folios, alloc_demote_folio, 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_list, + struct pglist_data *pgdat, + int target_nid) +{ + unsigned int nr_migrated = 0; + struct folio *folio; + LIST_HEAD(ret_folios); + LIST_HEAD(migrate_folios); + + while (!list_empty(folio_list)) { + struct folio *folio; + + cond_resched(); + + folio = 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 += __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 = 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 = 0; + LIST_HEAD(node_folio_list); + unsigned int noreclaim_flag; + + if (list_empty(folio_list)) + return nr_migrated; + + noreclaim_flag = memalloc_noreclaim_save(); + + nid = folio_nid(lru_to_folio(folio_list)); + do { + struct folio *folio = lru_to_folio(folio_list); + + if (nid == folio_nid(folio)) { + list_move(&folio->lru, &node_folio_list); + continue; + } + + nr_migrated += damon_pa_migrate_folio_list(&node_folio_list, + NODE_DATA(nid), + target_nid); + nid = folio_nid(lru_to_folio(folio_list)); + } while (!list_empty(folio_list)); + + nr_migrated += 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 addr, applied; + LIST_HEAD(folio_list); + + for (addr = r->ar.start; addr < r->ar.end; addr += PAGE_SIZE) { + struct folio *folio = damon_get_folio(PHYS_PFN(addr)); + + if (!folio) + continue; + + if (damos_pa_filter_out(s, folio)) + goto put_folio; + + if (!folio_isolate_lru(folio)) + goto put_folio; + list_add(&folio->lru, &folio_list); +put_folio: + folio_put(folio); + } + applied = damon_pa_migrate_pages(&folio_list, s->target_nid); + cond_resched(); + return applied * PAGE_SIZE; +} + + static unsigned long damon_pa_apply_scheme(struct damon_ctx *ctx, struct damon_target *t, struct damon_region *r, struct damos *scheme) @@ -336,6 +486,8 @@ static unsigned long damon_pa_apply_scheme(struct damon_ctx *ctx, return damon_pa_mark_accessed(r, scheme); case DAMOS_LRU_DEPRIO: return damon_pa_deactivate_pages(r, scheme); + case DAMOS_MIGRATE_COLD: + return damon_pa_migrate(r, scheme); case DAMOS_STAT: break; default: @@ -356,6 +508,8 @@ static int damon_pa_scheme_score(struct damon_ctx *context, return damon_hot_score(context, r, scheme); case DAMOS_LRU_DEPRIO: return damon_cold_score(context, r, scheme); + case DAMOS_MIGRATE_COLD: + return damon_cold_score(context, r, scheme); default: break; } diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 0632d28b67f8..880015d5b5ea 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1458,6 +1458,7 @@ static const char * const damon_sysfs_damos_action_strs[] = { "nohugepage", "lru_prio", "lru_deprio", + "migrate_cold", "stat", }; From patchwork Sun May 12 17:54:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13662810 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA253C25B4F for ; Sun, 12 May 2024 17:55:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A8FC26B01A3; Sun, 12 May 2024 13:55:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9C4926B01A2; Sun, 12 May 2024 13:55:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7EF716B01A1; Sun, 12 May 2024 13:55:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 5797B6B0193 for ; Sun, 12 May 2024 13:55:01 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C9346C06D2 for ; Sun, 12 May 2024 17:55:00 +0000 (UTC) X-FDA: 82110494760.15.24E89C2 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf15.hostedemail.com (Postfix) with ESMTP id 2A1D7A000B for ; Sun, 12 May 2024 17:54:59 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=fOCDVk1p; spf=pass (imf15.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715536499; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=WUgsl/5ybdNu4qkI+6u65k35N4e07c2u/T6CFojNSRo=; b=I+Ti516ZpRHtbHKoVmx+QLCESUfz65XxIlT8AAgk5W944zKHAI6g2k9E1sVnEEokKOR2HT 6l5xIwB8UoxCep4Ij18lm9Ya3MYFwvYx4NynHd3z++r5RF39+SeJHv/4y4ZIuC9dzg08/a cYxkmYyCM6rnzUT6tjGaE9fbTSPN/fg= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=fOCDVk1p; spf=pass (imf15.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715536499; a=rsa-sha256; cv=none; b=R4K++a4l+szlL7YXY67RLdeVl+wSQXXYeo06y5Oq7ieuKYmvHfqLC0LBVok4WZezeduhP3 ngJLxPA02EXSnYoMGwq1wXBiOyIEhxdhlTCWbYlxahBO410cs7lgt9tBjMP4yopFnvLlzm sJz6e9jubvATDJlLOfStziCs91aS+O0= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 4BF3860B95; Sun, 12 May 2024 17:54:58 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9859EC32781; Sun, 12 May 2024 17:54:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1715536498; bh=HjyWpv2l8S24lCKx7/me+IFm1iDwuNsUj8wbeOXFYY0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fOCDVk1p+QvsfPxFZGFuR7GWACBBP/DSQaaw966CnXovAR+eXd/oKQbhPIvBEGNJW WTQHUMZ9Tir6K0G1me1gLjTnFp8gxKD5G54IzI7k95vWlEOnVljY1wuxU7/QDBBCl8 TDHLXrizha9Gkc88qZSd6RHLzJj7UZOJJ94y5SfZp0Bmlp1AxP2d6Ny1kiFKaOUi65 ZwJmbuljvTEJPIEv2qWLpvi27KZPbt50udjXkXo31GtgNtfkvlqK9vP6z8JLVmTpW/ +PKLUiobEZ0l3l+PoNCQZwFIZOS6ibjGA+OecvuI6B5vyICO5mrBbMg2/WaES2jZx9 gnXanyNFEMxhw== From: SeongJae Park To: Cc: Hyeongtak Ji , SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Honggyu Kim Subject: [RFC PATCH v4 5/5] mm/damon/paddr: introduce DAMOS_MIGRATE_HOT action for promotion Date: Sun, 12 May 2024 10:54:47 -0700 Message-Id: <20240512175447.75943-6-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240512175447.75943-1-sj@kernel.org> References: <20240512175447.75943-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 2A1D7A000B X-Stat-Signature: 69y69mpmgbdrafze7seg7jirgpr4s834 X-HE-Tag: 1715536499-676333 X-HE-Meta: U2FsdGVkX1/RwZcqdesif7q1KpgKPAhIsNggJnZHdX3zRc270nURNVUELM/6T9rGkX3W6Oymqe6m0w46ROQeFVy4VtOT5w/3kdUKQXeFcd4wayW1aeUztEsnGEW1vLdvpQqgJjPZ6sxgYOW2Ntme4F+KvSZzbJkRwV6RSMF1G2txulcOEAnhuEhd/ueuj6Nm0yFwBue9mBRJUgWed9zD2PIL9GbRrZAC9Ntc1mLJk4xAWxQxmLgegsRIMnnXf1p+mKvvym3p6gAsdiJGhxthmAPjKbfDb+g5zOQBzeu+yHrQgmz2X/S2RdaQIjiOMuGlGequ4bp7LTLBsLVatdw4ccfdnIXCQ04FcCctXtPujGorU+RtcZJVThGbA0YvEk8mXJjdoMLbdLmghX5t9dBtt+po2AdBySdpbGFBpL5s9sO1EuSi2hUAGQABPRvDr/CE/XLbrzNZ2wjwb6Q7kh3cF21FCv0/U8EqjfVWD2/VMb1ONchNikbWCQc+GXKWwIOsZWqFmCz4Bd//B0VN9OGksKkfMnybDeUARJcsN0FZqsHes2uJBwE9SW4a4F6RiQna88cWX7Djh412Nh1Jaon4xostKD+hAnEm0stuWL4HVQWtCZiKoD4ewK4AatMIlNdjLoqgfXpQ3ikt0QoDPjHxrcBJTqjZVjMaiK+1N4WDTIOg1K5qtCxUauGOPKmS94h95xgS87N/yNH2YjhWyGDSMZHu03fibgtrFOba3pcEl9BOKHD5ef0aEh+Szz2URx3EiHL4fHA6xwB0WZuqD0ijgvFGqO/blsWoPmMIW6oyzUIBDX2vwimpoAipVJzAvxiRPc0LIhb1KOCewVuBeXqjW3X1+Krc+Udf2G8KINoqfnzrH1ckovXRZ+bSLyPbTvfdKi4DMIf04eyQ9mvP7MvgMrbL3Yx71iFT4233D2Wir4FStYLL5rd+0FNH1qxAKqTYRD9LWfu+qHe7VTGRWsy gnrZTZkA 78j8Y+LUFhjbDdNP8k2onQ4hAP7HF0cWySFnN5WmxxQsHr1szk53M3R9/am9Z8Q4uC8xjpz8czbi70SGz6ZjXjLJQnqhL3IjDKwXMTKYSrSkapdUQXTh8P3U9i2XhUZ+qdMIZSLyBqzLTnY9aijeFdFlMPoHKM4Xgtrty5tjUKAW7+qHoPKkO7YgvfVz1sU9eDxXXsW7d/5vNS5Onbs6wbHMNytmw7E4OOf37o7gokEz/covGilo2zHOGkEb/PHWo+e7X6ZruFxDcmGqeZAJnYPSr+KW8LbdOBIzHUlgM2FnuKg3P3E5HO7kaD0V/NN72NiZhVVncqnVbmTelaI4CqfbJpCzIp9iRZMKp X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Hyeongtak Ji This patch introduces DAMOS_MIGRATE_HOT action, which is similar to DAMOS_MIGRATE_COLD, but proritizes hot pages. It migrates pages inside the given region to the 'target_nid' NUMA node in the sysfs. Here is one of the example usage of this 'migrate_hot' action. $ cd /sys/kernel/mm/damon/admin/kdamonds/ $ cat contexts//schemes//action migrate_hot $ echo 0 > contexts//schemes//target_nid $ echo commit > state $ numactl -p 2 ./hot_cold 500M 600M & $ numastat -c -p hot_cold Per-node process memory usage (in MBs) PID Node 0 Node 1 Node 2 Total -------------- ------ ------ ------ ----- 701 (hot_cold) 501 0 601 1101 Signed-off-by: Hyeongtak Ji Signed-off-by: Honggyu Kim Signed-off-by: SeongJae Park --- include/linux/damon.h | 2 ++ mm/damon/paddr.c | 3 +++ mm/damon/sysfs-schemes.c | 1 + 3 files changed, 6 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 56714b6eb0d7..3d62d98d6359 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -105,6 +105,7 @@ struct damon_target { * @DAMOS_NOHUGEPAGE: Call ``madvise()`` for the region with MADV_NOHUGEPAGE. * @DAMOS_LRU_PRIO: Prioritize the region on its LRU lists. * @DAMOS_LRU_DEPRIO: Deprioritize the region on its LRU lists. + * @DAMOS_MIGRATE_HOT: Migrate the regions prioritizing warmer regions. * @DAMOS_MIGRATE_COLD: Migrate the regions prioritizing colder regions. * @DAMOS_STAT: Do nothing but count the stat. * @NR_DAMOS_ACTIONS: Total number of DAMOS actions @@ -123,6 +124,7 @@ enum damos_action { DAMOS_NOHUGEPAGE, DAMOS_LRU_PRIO, DAMOS_LRU_DEPRIO, + DAMOS_MIGRATE_HOT, DAMOS_MIGRATE_COLD, DAMOS_STAT, /* Do nothing but only record the stat */ NR_DAMOS_ACTIONS, diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index a468792d9162..81163206e70c 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -486,6 +486,7 @@ static unsigned long damon_pa_apply_scheme(struct damon_ctx *ctx, return damon_pa_mark_accessed(r, scheme); case DAMOS_LRU_DEPRIO: return damon_pa_deactivate_pages(r, scheme); + case DAMOS_MIGRATE_HOT: case DAMOS_MIGRATE_COLD: return damon_pa_migrate(r, scheme); case DAMOS_STAT: @@ -508,6 +509,8 @@ static int damon_pa_scheme_score(struct damon_ctx *context, return damon_hot_score(context, r, scheme); case DAMOS_LRU_DEPRIO: 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: diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 880015d5b5ea..66fccfa776d7 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1458,6 +1458,7 @@ static const char * const damon_sysfs_damos_action_strs[] = { "nohugepage", "lru_prio", "lru_deprio", + "migrate_hot", "migrate_cold", "stat", };