From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7173C52D6F for ; Wed, 21 Aug 2024 19:09:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3296394000D; Wed, 21 Aug 2024 15:09:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2DA0E94000B; Wed, 21 Aug 2024 15:09:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1C88794000D; Wed, 21 Aug 2024 15:09:07 -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 F41DD94000B for ; Wed, 21 Aug 2024 15:09:06 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id ACE504020C for ; Wed, 21 Aug 2024 19:09:06 +0000 (UTC) X-FDA: 82477190292.08.AB2FD86 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) by imf21.hostedemail.com (Postfix) with ESMTP id BB1FB1C0004 for ; Wed, 21 Aug 2024 19:09:04 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DC8PFLSY; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724267285; a=rsa-sha256; cv=none; b=4VPuGsBrT3kr4vU6zVi7aCuZOKtObDIpkiowufCD+T8cu5gDtqoE1yDkoNL9qA4B6qykJs UWBIzaJVN5iFPq8Xmbc4wGgxSq95faZUHaoAscQvRBlauCUZm6LovtjM/GNwlnXV5f/iTF TjaTv3rnQVV6vj9FdZ/WIGfVGsfusiY= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DC8PFLSY; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724267285; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vZV/86LxCKwuyalRbCAJV54TAfVVYMgUKitJ9ozX55o=; b=L9fUtUlOorI8nzYi+CfNycHgTUi98WdmjNqvVn28Hef35AK9ygSNCTzHvBW19DrU8Bvf7q l7F4DopiY4UtCNFnbXbaIoMQexqEZWBpCK3/qnmXMBEBtQqau9xwTRPJg043Shzl/DzrQe 2WoiQgQTTscWt999fYqYfJ088/V1xVQ= Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6bd6f2c9d52so37075776d6.3 for ; Wed, 21 Aug 2024 12:09:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724267344; x=1724872144; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=vZV/86LxCKwuyalRbCAJV54TAfVVYMgUKitJ9ozX55o=; b=DC8PFLSYY8WaZGYoI+XIJHqUpktHJq7sJu/iJRvZAKtvZxCiOKV2zPV+kxd3MU2gOM jZh+JjH21iRlfcTKBY2b+w+XxxRS4t8iPmF85IJcM87r5/1xw9P+Zogeoj5r4pLPRNRp UVzHccUVfAlm5HZwf7aKWlwRvmAWekbbj1X3HSBsoqiV7LBYtNFHlL/4zlDwPS2Sja4P GQUNeoQobYNF7CEK291FyREDL36vxdiLKxXpxPnkcmac2GEqyAM48jSXulmsQ3fs89DN 7g++k5vMrLl0/F6NJrqGapcdr3j5aH+YWM7KzOw1ZkskQLsWcK9gfFZyFiFnnZ+z76J/ 4sVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724267344; x=1724872144; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vZV/86LxCKwuyalRbCAJV54TAfVVYMgUKitJ9ozX55o=; b=cs33elrmuKV0LYd5jIa1/E9L9Zu9B0zx5uwifN9WMe4jNVXQhCQdDwCfqluaEThTe2 xGMaV46MtxDaFmJv1pfUdTEocI9DQmR6MN4zEMEgkgSF+Mp2hdooWONeSFVzeHGx2IsD diT5676VuUhzArZootd05vj/kttzXSiqnvJA4NPJVY/e7oRmQMfhjB2PZQoprP2DGkwj Q24XYpab9zgVOoSXwak9WI/jdFmVqk8gFCpVHuvZ6QFbARUqa/VEZ13+BhuyhQ0m4oyZ 8oBzostSutkXsik9EbwfDDABosAE3NZAG9qeaGXfM07eqWNtSCCuwWY9IXqA+v5NZ5Vg +yFA== X-Forwarded-Encrypted: i=1; AJvYcCXWUlduoS4IsS5mFoKtj2mt4Bp16+hS1xko2FsD+R3B7hle0C4L9nH4H8llvG1pwoyLGNhfO+FjQw==@kvack.org X-Gm-Message-State: AOJu0Yyv6ERHBH41ZI3WrhJShlz+NhG4BIjmWNilp8CEvfF7iAkBXmzY ESMfBy0J0n0hq95HKuN27M3Jn4bC86XZsN9V+N1o/aOiI0rehug9 X-Google-Smtp-Source: AGHT+IHxFdoYPWOkH1JCwrfDN5ypheMtxskVdCt/+SSzy7Py+zSpnykAjoilf3pepyWz8i16wVJ/jg== X-Received: by 2002:a05:6214:3c9f:b0:6bf:796a:23ef with SMTP id 6a1803df08f44-6c15687d4e6mr29363086d6.56.1724267343564; Wed, 21 Aug 2024 12:09:03 -0700 (PDT) Received: from ?IPV6:2a03:83e0:1145:4:1409:786c:cb1d:c3fb? ([2620:10d:c091:500::4:d08d]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6bf6fdd8c22sm64402896d6.14.2024.08.21.12.09.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Aug 2024 12:09:03 -0700 (PDT) Message-ID: <340d86df-94ce-4db8-8628-f75e4352bea2@gmail.com> Date: Wed, 21 Aug 2024 15:09:02 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 3/6] mm: selftest to verify zero-filled pages are mapped to zeropage To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, roman.gushchin@linux.dev, yuzhao@google.com, david@redhat.com, baohua@kernel.org, ryan.roberts@arm.com, rppt@kernel.org, willy@infradead.org, cerasuolodomenico@gmail.com, ryncsn@gmail.com, corbet@lwn.net, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kernel-team@meta.com, Alexander Zhu References: <20240819023145.2415299-1-usamaarif642@gmail.com> <20240819023145.2415299-4-usamaarif642@gmail.com> Content-Language: en-US From: Usama Arif In-Reply-To: <20240819023145.2415299-4-usamaarif642@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: BB1FB1C0004 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: d4hcrfcxgotsar9wyg9ira88orf9ppti X-HE-Tag: 1724267344-270989 X-HE-Meta: U2FsdGVkX1+o15LneL5JgkpIjbzB1rQvwnpaqzQ6Fvgj/QCfDS+PLw2zGQiHSZ6yZdLSIZqV2ysT5z6JJ6WtqbZU4VxnR+UqyuguZU66uhIPUDigF+lRRgl2mrAQS+GSevkl6e+CRGSDLG5V0vKNRPCPs+OjZGrQUhA5JnfJH4a0To8v65zi/Q/iOdSnrwrdSDuyf3fa/z1gSNnCfh5wa668GFPSF/EVcvg6hVskSmk2FByADVN3gNzeubXoaQx0ktaiWqwqLU4M4qzmhz8/M+17Kyvor7TW9tfZyTw0+aLgKCmPuHZps0LG3YkI8c02SIY1Qpfs4S5iZMonulWb9ysvYgsruv9SVp6RM1Xcg5vmYjn9Z5GAnL6OY2T0+3AQEUo+LNS2hZJjeOP0Y9Tl3NpupEHeic1t47Mdj4n3JxNj+PxezssRElCVh56YXhbT7r0uQonsNS9GMz/DIl3y/LkBVhAGTYQajmcjq8mn1yF2Js7GuCSLXH3q+GQG3N9nlD3aMw1dzajqHqOhKulLIz9sVz/fh4Q2SxKxuDAH8348OJkqqWniqQ9kL1BG0sxEMgBQunybPSZk8boQMY1b65Cc/eWSdimHpLvaHaBEehze6vCkPvty4iapdJZMSirfrXIhm8z/h57iePXqxskBTRisluAwYdjfHvmV1QRBWlhDVMzQpYqOb0xcig6t7jnRJP6Vp441kA+K9OAO9g76Bb5jggRbW++QelkN1H6jAhRjuJ8rqzkkFNUYDUls1a0ffm7/DLdCEqPSEY7awOWOFEMFQtpycX8fUJI1M+6hiwrl2+hdS+YpeCiTRcks6QY7XlihlXlDzEegQaDr87J3K6DGHHYOwqryHpGuVQV7HqxAHpq16JCq9gDT/s18Yq1vusWmCx6VODGen3YGaq/MmsB7116TA/TmKRzNtxhzo+iYUG7stl7dY/I4+k4VNGcoD7gSyYRPxM+uGivpgEh BYGiRgpF l+GEmMvuCcKYHXg+cVYmXwMXAFG3Au+BbEkPZc9CxOhS8/B7tHw4pjLVUbqY2aXfOepoHMXu//xC92wVBle2PTuLlI7mOYINZvlcjYqF64tgTgn7HS4FvoXu3fe/CljVfgF+OlG3q4IfCy7YOsRgW4/1YyKTcu4filEld1hc/h/j6MXxBVq/dTJ5/tFoa/t2Ygrf488fAHfHwb5D7NN63t7MwBs8cMe8IQFo+TlaupYriCH/R3JVz0VHDkDBADnNemBYVlRb6k9njFNKZx46/uCb98blH3iocchZKmdCo+BWUfAszOci8sqP/O9sFsSPrQtM8iFEeiKvrcqqggZig/tJu8G7LOqZc2LwUmTOgGOc+P8UiawDInpboMkLt3G5GQR1hqMObNJmOU93dzNGZatb3K8F9W5eibQxizi3qyvIcfuJ4oNSfjCHKASASwzzNnqbdjZcNAcX5YyCcmz/h2w1i/uH7WvbH6cK92SBcLDbK+IL89V2oPUt+nTB8WYWknePMumNKyLph/O5j7cObeTJTG+945ijbHDgMcB1s1DetBtg= 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: On 18/08/2024 22:30, Usama Arif wrote: > From: Alexander Zhu > > When a THP is split, any subpage that is zero-filled will be mapped > to the shared zeropage, hence saving memory. Add selftest to verify > this by allocating zero-filled THP and comparing RssAnon before and > after split. > > Signed-off-by: Alexander Zhu > Acked-by: Rik van Riel > Signed-off-by: Usama Arif > --- > .../selftests/mm/split_huge_page_test.c | 71 +++++++++++++++++++ > tools/testing/selftests/mm/vm_util.c | 22 ++++++ > tools/testing/selftests/mm/vm_util.h | 1 + > 3 files changed, 94 insertions(+) > > diff --git a/tools/testing/selftests/mm/split_huge_page_test.c b/tools/testing/selftests/mm/split_huge_page_test.c > index e5e8dafc9d94..eb6d1b9fc362 100644 > --- a/tools/testing/selftests/mm/split_huge_page_test.c > +++ b/tools/testing/selftests/mm/split_huge_page_test.c > @@ -84,6 +84,76 @@ static void write_debugfs(const char *fmt, ...) > write_file(SPLIT_DEBUGFS, input, ret + 1); > } > > +static char *allocate_zero_filled_hugepage(size_t len) > +{ > + char *result; > + size_t i; > + > + result = memalign(pmd_pagesize, len); > + if (!result) { > + printf("Fail to allocate memory\n"); > + exit(EXIT_FAILURE); > + } > + > + madvise(result, len, MADV_HUGEPAGE); > + > + for (i = 0; i < len; i++) > + result[i] = (char)0; > + > + return result; > +} > + > +static void verify_rss_anon_split_huge_page_all_zeroes(char *one_page, int nr_hpages, size_t len) > +{ > + unsigned long rss_anon_before, rss_anon_after; > + size_t i; > + > + if (!check_huge_anon(one_page, 4, pmd_pagesize)) { > + printf("No THP is allocated\n"); > + exit(EXIT_FAILURE); > + } > + > + rss_anon_before = rss_anon(); > + if (!rss_anon_before) { > + printf("No RssAnon is allocated before split\n"); > + exit(EXIT_FAILURE); > + } > + > + /* split all THPs */ > + write_debugfs(PID_FMT, getpid(), (uint64_t)one_page, > + (uint64_t)one_page + len, 0); > + > + for (i = 0; i < len; i++) > + if (one_page[i] != (char)0) { > + printf("%ld byte corrupted\n", i); > + exit(EXIT_FAILURE); > + } > + > + if (!check_huge_anon(one_page, 0, pmd_pagesize)) { > + printf("Still AnonHugePages not split\n"); > + exit(EXIT_FAILURE); > + } > + > + rss_anon_after = rss_anon(); > + if (rss_anon_after >= rss_anon_before) { > + printf("Incorrect RssAnon value. Before: %ld After: %ld\n", > + rss_anon_before, rss_anon_after); > + exit(EXIT_FAILURE); > + } > +} > + > +void split_pmd_zero_pages(void) > +{ > + char *one_page; > + int nr_hpages = 4; > + size_t len = nr_hpages * pmd_pagesize; > + > + one_page = allocate_zero_filled_hugepage(len); > + verify_rss_anon_split_huge_page_all_zeroes(one_page, nr_hpages, len); > + printf("Split zero filled huge pages successful\n"); > + free(one_page); > +} > + > void split_pmd_thp(void) > { > char *one_page; > @@ -431,6 +501,7 @@ int main(int argc, char **argv) > > fd_size = 2 * pmd_pagesize; > > + split_pmd_zero_pages(); > split_pmd_thp(); > split_pte_mapped_thp(); > split_file_backed_thp(); > diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests/mm/vm_util.c > index 5a62530da3b5..d8d0cf04bb57 100644 > --- a/tools/testing/selftests/mm/vm_util.c > +++ b/tools/testing/selftests/mm/vm_util.c > @@ -12,6 +12,7 @@ > > #define PMD_SIZE_FILE_PATH "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size" > #define SMAP_FILE_PATH "/proc/self/smaps" > +#define STATUS_FILE_PATH "/proc/self/status" > #define MAX_LINE_LENGTH 500 > > unsigned int __page_size; > @@ -171,6 +172,27 @@ uint64_t read_pmd_pagesize(void) > return strtoul(buf, NULL, 10); > } > > +unsigned long rss_anon(void) > +{ > + unsigned long rss_anon = 0; > + FILE *fp; > + char buffer[MAX_LINE_LENGTH]; > + > + fp = fopen(STATUS_FILE_PATH, "r"); > + if (!fp) > + ksft_exit_fail_msg("%s: Failed to open file %s\n", __func__, STATUS_FILE_PATH); > + > + if (!check_for_pattern(fp, "RssAnon:", buffer, sizeof(buffer))) > + goto err_out; > + > + if (sscanf(buffer, "RssAnon:%10lu kB", &rss_anon) != 1) > + ksft_exit_fail_msg("Reading status error\n"); > + > +err_out: > + fclose(fp); > + return rss_anon; > +} > + > bool __check_huge(void *addr, char *pattern, int nr_hpages, > uint64_t hpage_size) > { > diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests/mm/vm_util.h > index 9007c420d52c..71b75429f4a5 100644 > --- a/tools/testing/selftests/mm/vm_util.h > +++ b/tools/testing/selftests/mm/vm_util.h > @@ -39,6 +39,7 @@ unsigned long pagemap_get_pfn(int fd, char *start); > void clear_softdirty(void); > bool check_for_pattern(FILE *fp, const char *pattern, char *buf, size_t len); > uint64_t read_pmd_pagesize(void); > +uint64_t rss_anon(void); > bool check_huge_anon(void *addr, int nr_hpages, uint64_t hpage_size); > bool check_huge_file(void *addr, int nr_hpages, uint64_t hpage_size); > bool check_huge_shmem(void *addr, int nr_hpages, uint64_t hpage_size); Need below fixlet as well >From 2476b7a46908c801ab446f41566f4af52b939ac7 Mon Sep 17 00:00:00 2001 From: Usama Arif Date: Wed, 21 Aug 2024 20:06:53 +0100 Subject: [PATCH] mm: selftest to verify zero-filled pages are mapped to zeropage fix change uint64_t to unsigned long for rss_anon Signed-off-by: Usama Arif --- tools/testing/selftests/mm/vm_util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests/mm/vm_util.h index 71b75429f4a5..2eaed8209925 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -39,7 +39,7 @@ unsigned long pagemap_get_pfn(int fd, char *start); void clear_softdirty(void); bool check_for_pattern(FILE *fp, const char *pattern, char *buf, size_t len); uint64_t read_pmd_pagesize(void); -uint64_t rss_anon(void); +unsigned long rss_anon(void); bool check_huge_anon(void *addr, int nr_hpages, uint64_t hpage_size); bool check_huge_file(void *addr, int nr_hpages, uint64_t hpage_size); bool check_huge_shmem(void *addr, int nr_hpages, uint64_t hpage_size); -- 2.43.5