From patchwork Mon Feb 3 22:55:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 13958384 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 86052C02192 for ; Mon, 3 Feb 2025 22:56:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1AB46B0088; Mon, 3 Feb 2025 17:56:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DA5A16B0089; Mon, 3 Feb 2025 17:56:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BA5AC6B008A; Mon, 3 Feb 2025 17:56:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 986BF6B0088 for ; Mon, 3 Feb 2025 17:56:20 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 1CBF21401BC for ; Mon, 3 Feb 2025 22:56:20 +0000 (UTC) X-FDA: 83080143720.27.AF26B65 Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) by imf30.hostedemail.com (Postfix) with ESMTP id 417F08000C for ; Mon, 3 Feb 2025 22:56:18 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="ARAIzA/h"; spf=pass (imf30.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.51 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738623378; 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=mvJt+fEruqngkpaxyGnr3ktUZyTGWut/bbCY8AbcNuM=; b=59B/hzfWLVUAWfJboimqcKJejKt38uhXMsjcrVboXftJ1HvNtzsjgsvEmv9/8Xi1cy+ntj jKIbFjJWq2owplLJ0yDGZFoa4x2kMOYo9ZzZEjXsE5PGyK0Zr3VZHJE9ZHgknPJo+d2afk 5DGJ/wuDyxwCC7EoZpgaBHjoPaNcG88= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738623378; a=rsa-sha256; cv=none; b=u6iGqyyXm/BhfOs1UuaZhyzRj7xBJ7aqJ7pAF8tQcROm2EDZ8/p5moAkjjbtUEnWEkwMvB 3ILF+xNp5On8+ohRgxrsKswO88ZTvKjlDrUU/4wa3f5mSsz/6HPGeOXI2me98Uxs9+00He +mX4lmYqWHfTEuqnfA4vUqujceKC4wU= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="ARAIzA/h"; spf=pass (imf30.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.51 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-qv1-f51.google.com with SMTP id 6a1803df08f44-6d92cd1e811so51855206d6.1 for ; Mon, 03 Feb 2025 14:56:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738623377; x=1739228177; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mvJt+fEruqngkpaxyGnr3ktUZyTGWut/bbCY8AbcNuM=; b=ARAIzA/hsqwVvQczAlFzEauqj3yybZrdjPo+oYcCK5e2NA+tK1e87M1uC8i0k+8mhN vN9yRvl8fbDXxikWqO3i5oJBoSdN3k8sRidMu0b6VjxoMnuC5Wx3Bcgm+C7P0BoSuiyh 4ECx+lpWbaJJm2H/v53Zf4vOGyoxt6u0LmEPOAfexzkT5BZNecpjET6MzdPenllW4WL7 PllQyAyG/JLAteAyKRGH75SLy9fg8F/lh5RnpRBRq8OT6CvqB+DfdQrE6LfgPR0jvic7 mQUHk/R9IBKARx8naQDkUhzPswD3BXI75kBKFY8IiOFDjTJABzkigLjbih0ZR0BFg9zX UuSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738623377; x=1739228177; 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=mvJt+fEruqngkpaxyGnr3ktUZyTGWut/bbCY8AbcNuM=; b=G/Xvx11VH5bx3t2V9VrvOr3ZlrY0LgGRyH9C2M3Pp7zljctWvgdeIGFzmUpygGc3Ly jiOFHk57ODsNxDM8ZJq6DgRjGg+HIac7CgRLY+9YO5lel6Kwi4n2LEOi4k83twaA1mU9 8M5UtCHcq58sLgAMOXLOziinteG7I+9AyJ0XcZP7jahVXMHrSkS0W1BDT9XGXKi2Fv+7 MIgKl96TVqlCZSWgWWFYdrtQd8k5TH98od6GEWJ9hSN/4PchIWSnOdWU/1KxEbJB27or tn0LoGECuXOpgDuEgvvWcq8NROI+dGGrkKg+cdKA8h8UQaocfxu8GigMDe3M356sKW5d Abow== X-Forwarded-Encrypted: i=1; AJvYcCXFrQQNs+CmwhE5bpOOPOEysNevsLigJJQlfNvzbj8+ndyzzgM2Ug5sy+Y8WHoGSnSBZ3NgFPTi/g==@kvack.org X-Gm-Message-State: AOJu0Yzbefm8uqCYacYxYaC9OKk+dcZNhmMsq1uDahTYNIbgP0Eks3FY R0psRLpS77U/f17aKMabTs8aVUvKxVYGUc5tz65upliAJzUFMAP4 X-Gm-Gg: ASbGnctP5vgyFzkrdV5JvNnEH2q94vx9I4SNfXXinqVsplFotyhUPeIUrvu78JbtuiD SKMvYxfki6ruW05wuy9qI0ZUmwO6CvwvwGFUjSTC8T4a3lrzQj4oTFVjxBBopCh9KX0YI8NOKE7 QAnkGWTUffkc0Ybq63gzQjRNCqJhXBiHKBjFr8MabD+ts0ekWIjTYyUdrHhjxZaMSIJo8L3Jy/U lifYHt/nTFd3ph0I1oDdofhTfkkaUgo/bZYciMA1OoIGP9USnvcaBR7DazX7Au19CLvDDLZkqOZ W3EfR4YNeqoupQ== X-Google-Smtp-Source: AGHT+IGZGiDWsAItpMx6EqpFdOI9RwZXbh1AnvXhNiaoicoO9ioWU9y5O0LcM7+GW7aqKjxfh7rJbQ== X-Received: by 2002:ad4:542b:0:b0:6e1:715f:cdf5 with SMTP id 6a1803df08f44-6e420f70692mr17900976d6.15.1738623377338; Mon, 03 Feb 2025 14:56:17 -0800 (PST) Received: from localhost ([2a03:2880:20ff:73::]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e254814d0csm55155536d6.43.2025.02.03.14.56.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 14:56:16 -0800 (PST) From: Usama Arif To: sj@kernel.org, akpm@linux-foundation.org Cc: damon@lists.linux.dev, linux-mm@kvack.org, hannes@cmpxchg.org, david@redhat.com, kernel-team@meta.com, Usama Arif Subject: [PATCH v4 2/6] mm/damon/paddr: use damon_get_folio_in_region to obtain folio Date: Mon, 3 Feb 2025 22:55:29 +0000 Message-ID: <20250203225604.44742-3-usamaarif642@gmail.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250203225604.44742-1-usamaarif642@gmail.com> References: <20250203225604.44742-1-usamaarif642@gmail.com> MIME-Version: 1.0 X-Stat-Signature: yehync5ouot8rttp3dqrgmgo4hwhxyx5 X-Rspam-User: X-Rspamd-Queue-Id: 417F08000C X-Rspamd-Server: rspam03 X-HE-Tag: 1738623378-900747 X-HE-Meta: U2FsdGVkX1/EkuaxmzCtGI1bvf/qZmZLbfmthlzUX6NjWpLc0nheaM2ZCUZqDpAmcsfw2myXZqfJak9ctROLqAj6SnXKSCuRZ4j6Lnhro8sChlEkk7e+Sd5Tm+mi2fR+PrKlTi6xxNBcgd6d7LkVlvk1qovd+1qDM/qJe3LnDy1HmN+GRQbEtyyspXNmJce0QkM2RDZwIs0nfm2PZ0fnUTQ/JW7Cc9WJwmmeBh4FCKAeFudcQYnbwxoOIRbydaVGX6Qg05IXD8Pz3DcARGiSkTbABng6MdYn1JMjjjbIQrnKdITYn6dwMGpjfsPF3eyYevBy4C4qVPcLLHLf1n0TAiGSPpDqLHYnMbqlyqYR/15A/WuP6A56nIed5ZC+3vN+PExNoWBwFv55Rnx1gibfvrIm/3YAcgeR9GJSuJim9aNc23TD0BxbmWZU00mFaKRaSjIklXjK7IyEUs2Rzf1EjRdHnSCYihPjy92d6dfOlO4DvkPtcoiyadkgipq489AnkoN31oSm4gj5Kf+tbJluDMUWxylYKVtIiIVgno833pMRdL2/3DT1kUVBHi+HJm1aQdDZskZSAsOmp/U9d8u+nkgYyPQh5pQlRX/0/HvvfxjGJ0D1Xq+Mez+N5vcrHtrK9oL9aa540G78orioOYhXgPrhO9IcCts3QBBSYzIwd1suVpUccatKxv6KZJV7Jxj+6k9UXpesNH4zXZjbNHmJGZ6IhI6oh6x0WP35UdDj2A1IS14lKwgaAmh8LkytNpmhC7NVahh2DjbI8N1QTQKO45vv7p6DLAFyNwfhebduH8tZV7SMvFpms+++pLOK06zL88FI/a412zND1EWhQzEIAfXCgi+nDYNucEcRKBFMNEdIMyJLYlgLO2VPoUWMJIjjyLkGDqkrFhVLz6RqbfCFI2Uly1PCyoqj0iLLFaF5M+oqXpgyyzcyAWCE7uLQXCtKAFjqh+VenuPR05Q4pFc INAIg17u K+MEboRUc5800J9BiCtMIaBWUJWkYRAhstsJNKTaRzR1CF5Pc0CtgvGOw0MearUA14vdhC/bM6Rvtt+DNeBajcK2vyho+EUTBfB9cHbBGMa/kNOTiY4FDb9KYFiFQC1OPzIqWtOkfdDC3yPOBH6HJlXUsQaMm7AnanQgQhvilXRIoLusykglmfqbNWlcLMxN0qkHUCxBwpBwhDR3cP6JvNlzgRv8KVOA4OKDryZRRYhCRm0IMxXJgj5BSKUF2c4qnukhSt+X6nwQh7MrC9YxYHrsely31WoHMPaPh6x1dSHY394wSDOXGERkpSaYGQCEhedDWqM3I2JooSEZIin7EtU3NiaCbhMqZfUlRDSIXZCO1v+d7G5Vyd15qr2aipyPIxIj0qDj7HU3ZFTyHvRvXCsHD1Ye8K2JAhub5F4/MtTNQYGSiPVjIfvazxJSyGbI+4vv7r/QlwD57AFHVma4C0PNUzhMqR47vMUUP6JYjCTcb+YN9J5l3wUe7RLdImb+AsNkt/GL++5JQRRGBPt6dmjl68W7W+MxlTLRROAlvaHB9R0hsLfGbfcVMNTDOTPEAypXEpWGmTn1OIctNXUoPdHru5aK+m7RWS6W8yEgP0ooWKg+eYe0W3ptYmINIsC3qj9uUGoGy0SlhpSPcKKeWLNO1mbIDK40cvho2uMVaLcyHKN+p2RaBUSDn9JgkmAGThExW4erTl4YXqvG2sjSV9FZDwb4XVDa45CQ1e8T7DiLVw9AL0WVUm0vh0v+ftniEVDryB/zr3yZFFlFpSDFnb9tjo8NcwV7/1fPndqePVXpfThrEC4lJVFiDwPW/dW+GGPWthP79aLm7QbY28gf8F46hthyGgLGJLoGAsiuXyf+hSSqTybCGTRn7PfR/QEcd4ZjhliyIOL+SFxnMZC4KE+ovJf/j4/rfs/oW4qOFguVNHzX3aXmoRW//TF0Os4+13CvdL0Ip4lZYJ3aea77aXnNz3ir3 WQAm4mRn /T9q3mQichyIQkB7bo3h7POPHcn9uvkKOwubgUn91SMGP51eQOu5xf7grF9Hlq0nqAYbQkypihLqI2NFK3CIXRXCsKxOUmxMOg9oXXMrS+YxCDTWg4ewZhDeLVkXoj4DBB3PbaP/g2YVtWtzh1MKf2QM4/DAIeaODYYnZ+3WyvVfDvRkBOWxcHmngGFtNO1bWRqdR+Dwgv3AWxrv7s7Zxg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.254857, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: This is introduced for larger folios. If a large folio has subpages present in multiple regions, it will be considered multiple times. This can be when checking access or applying DAMOS schemes. For e.g. in pa_stat, folios split across N regions will be counted N times, giving inaccurate results. Hence, only consider a page for access check/DAMOS scheme only if the head page is part of that region as well. Signed-off-by: Usama Arif --- mm/damon/paddr.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 0fb61f6ddb8d..3f59a3fdc391 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -19,6 +19,30 @@ #include "../internal.h" #include "ops-common.h" +/* + * Get an online page for a paddr if it's in the LRU list and if the head page is + * before region_start. Otherwise, returns NULL. + */ +static struct folio *damon_get_folio_in_region(unsigned long addr, unsigned long region_start) +{ + struct page *page = pfn_to_online_page(PHYS_PFN(addr)); + struct folio *folio; + + if (!page) + return NULL; + + folio = page_folio(page); + if (addr - folio_page_idx(folio, page) * PAGE_SIZE < region_start) + return NULL; + if (!folio_test_lru(folio) || !folio_try_get(folio)) + return NULL; + if (unlikely(page_folio(page) != folio || !folio_test_lru(folio))) { + folio_put(folio); + folio = NULL; + } + return folio; +} + static bool damon_folio_mkold_one(struct folio *folio, struct vm_area_struct *vma, unsigned long addr, void *arg) { @@ -58,9 +82,9 @@ static void damon_folio_mkold(struct folio *folio) } -static void damon_pa_mkold(unsigned long paddr) +static void damon_pa_mkold(unsigned long paddr, unsigned long region_start) { - struct folio *folio = damon_get_folio(PHYS_PFN(paddr)); + struct folio *folio = damon_get_folio_in_region(paddr, region_start); if (!folio) return; @@ -73,7 +97,7 @@ static void __damon_pa_prepare_access_check(struct damon_region *r) { r->sampling_addr = damon_rand(r->ar.start, r->ar.end); - damon_pa_mkold(r->sampling_addr); + damon_pa_mkold(r->sampling_addr, r->ar.start); } static void damon_pa_prepare_access_checks(struct damon_ctx *ctx) @@ -148,9 +172,9 @@ static bool damon_folio_young(struct folio *folio) return accessed; } -static bool damon_pa_young(unsigned long paddr, unsigned long *folio_sz) +static bool damon_pa_young(unsigned long paddr, unsigned long *folio_sz, unsigned long region_start) { - struct folio *folio = damon_get_folio(PHYS_PFN(paddr)); + struct folio *folio = damon_get_folio_in_region(paddr, region_start); bool accessed; if (!folio) @@ -176,7 +200,7 @@ static void __damon_pa_check_access(struct damon_region *r, return; } - last_accessed = damon_pa_young(r->sampling_addr, &last_folio_sz); + last_accessed = damon_pa_young(r->sampling_addr, &last_folio_sz, r->ar.start); damon_update_region_access_rate(r, last_accessed, attrs); last_addr = r->sampling_addr; @@ -268,7 +292,7 @@ static unsigned long damon_pa_pageout(struct damon_region *r, struct damos *s, addr = r->ar.start; while (addr < r->ar.end) { - struct folio *folio = damon_get_folio(PHYS_PFN(addr)); + struct folio *folio = damon_get_folio_in_region(addr, r->ar.start); if (!folio) { addr += PAGE_SIZE; @@ -307,7 +331,7 @@ static inline unsigned long damon_pa_mark_accessed_or_deactivate( addr = r->ar.start; while (addr < r->ar.end) { - struct folio *folio = damon_get_folio(PHYS_PFN(addr)); + struct folio *folio = damon_get_folio_in_region(addr, r->ar.start); if (!folio) { addr += PAGE_SIZE; @@ -474,7 +498,7 @@ static unsigned long damon_pa_migrate(struct damon_region *r, struct damos *s, addr = r->ar.start; while (addr < r->ar.end) { - struct folio *folio = damon_get_folio(PHYS_PFN(addr)); + struct folio *folio = damon_get_folio_in_region(addr, r->ar.start); if (!folio) { addr += PAGE_SIZE; @@ -518,7 +542,7 @@ static unsigned long damon_pa_stat(struct damon_region *r, struct damos *s, addr = r->ar.start; while (addr < r->ar.end) { - struct folio *folio = damon_get_folio(PHYS_PFN(addr)); + struct folio *folio = damon_get_folio_in_region(addr, r->ar.start); if (!folio) { addr += PAGE_SIZE;