From: Sayali Patil <sayalip@linux.ibm.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Shuah Khan <shuah@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Ritesh Harjani <ritesh.list@gmail.com>
Cc: David Hildenbrand <david@kernel.org>, Zi Yan <ziy@nvidia.com>,
Michal Hocko <mhocko@kernel.org>,
Oscar Salvador <osalvador@suse.de>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Dev Jain <dev.jain@arm.com>,
Liam.Howlett@oracle.com, linuxppc-dev@lists.ozlabs.org,
Sayali Patil <sayalip@linux.ibm.com>
Subject: [PATCH v2 04/13] selftest/mm: fix cgroup task placement and tolerance in hugetlb_reparenting_test.sh
Date: Thu, 12 Mar 2026 17:55:31 +0530 [thread overview]
Message-ID: <3b5b4275fed509e13567bba7471a9130bbfa6841.1773305677.git.sayalip@linux.ibm.com> (raw)
In-Reply-To: <cover.1773305677.git.sayalip@linux.ibm.com>
Launch write_to_hugetlbfs as a separate process and move only its PID
into the target cgroup before waiting for completion. This avoids moving
the test shell itself, prevents unintended charging to the shell, and
ensures hugetlb and memcg accounting is attributed only to the intended
workload.
Add a short delay before the hugetlb allocation to avoid a race where
memory may be charged before the task migration takes effect, which
can lead to incorrect accounting and intermittent test failures.
Also increase the assert_with_retry() tolerance from 7MB to 8MB. With
MEMCG_CHARGE_BATCH=64U and a 64K base page size, per-CPU batching can
result in up to 8MB of temporary charge being attributed to the parent.
The previous 7MB threshold could be exceeded, causing false failures;
raise the limit to cover the maximum expected batched charge.
Fixes: 29750f71a9b4 ("hugetlb_cgroup: add hugetlb_cgroup reservation tests")
Signed-off-by: Sayali Patil <sayalip@linux.ibm.com>
---
.../selftests/mm/hugetlb_reparenting_test.sh | 17 ++++++++---------
tools/testing/selftests/mm/write_to_hugetlbfs.c | 5 ++++-
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/mm/hugetlb_reparenting_test.sh b/tools/testing/selftests/mm/hugetlb_reparenting_test.sh
index 073a71fa36b4..9c79ad69e4c6 100755
--- a/tools/testing/selftests/mm/hugetlb_reparenting_test.sh
+++ b/tools/testing/selftests/mm/hugetlb_reparenting_test.sh
@@ -70,7 +70,7 @@ function cleanup() {
function assert_with_retry() {
local actual_path="$1"
local expected="$2"
- local tolerance=$((7 * 1024 * 1024))
+ local tolerance=$((8 * 1024 * 1024))
local timeout=20
local interval=1
local start_time
@@ -153,18 +153,17 @@ write_hugetlbfs() {
local size="$3"
if [[ $cgroup2 ]]; then
- echo $$ >$CGROUP_ROOT/$cgroup/cgroup.procs
+ cg_file="$CGROUP_ROOT/$cgroup/cgroup.procs"
else
echo 0 >$CGROUP_ROOT/$cgroup/cpuset.mems
echo 0 >$CGROUP_ROOT/$cgroup/cpuset.cpus
- echo $$ >"$CGROUP_ROOT/$cgroup/tasks"
- fi
- ./write_to_hugetlbfs -p "$path" -s "$size" -m 0 -o
- if [[ $cgroup2 ]]; then
- echo $$ >$CGROUP_ROOT/cgroup.procs
- else
- echo $$ >"$CGROUP_ROOT/tasks"
+ cg_file="$CGROUP_ROOT/$cgroup/tasks"
fi
+
+ # Spawn write_to_hugetlbfs in a separate task to ensure correct cgroup accounting
+ ./write_to_hugetlbfs -p "$path" -s "$size" -m 0 -o -d & pid=$!
+ echo "$pid" > "$cg_file"
+ wait "$pid"
echo
}
diff --git a/tools/testing/selftests/mm/write_to_hugetlbfs.c b/tools/testing/selftests/mm/write_to_hugetlbfs.c
index ecb5f7619960..6b01b0485bd0 100644
--- a/tools/testing/selftests/mm/write_to_hugetlbfs.c
+++ b/tools/testing/selftests/mm/write_to_hugetlbfs.c
@@ -83,7 +83,7 @@ int main(int argc, char **argv)
setvbuf(stdout, NULL, _IONBF, 0);
self = argv[0];
- while ((c = getopt(argc, argv, "s:p:m:owlrn")) != -1) {
+ while ((c = getopt(argc, argv, "s:p:m:owlrnd")) != -1) {
switch (c) {
case 's':
if (sscanf(optarg, "%zu", &size) != 1) {
@@ -118,6 +118,9 @@ int main(int argc, char **argv)
case 'n':
reserve = 0;
break;
+ case 'd':
+ sleep(1);
+ break;
default:
errno = EINVAL;
perror("Invalid arg");
--
2.52.0
next prev parent reply other threads:[~2026-03-12 12:26 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-12 12:25 [PATCH v2 00/13] selftests/mm: fix failures and robustness improvements Sayali Patil
2026-03-12 12:25 ` [PATCH v2 01/13] selftests/mm: restore default nr_hugepages value during cleanup in charge_reserved_hugetlb.sh Sayali Patil
2026-03-12 12:43 ` David Hildenbrand (Arm)
2026-03-12 12:25 ` [PATCH v2 02/13] selftests/mm: fix hugetlb pathname construction " Sayali Patil
2026-03-12 12:25 ` [PATCH v2 03/13] selftests/mm: fix hugetlb pathname construction in hugetlb_reparenting_test.sh Sayali Patil
2026-03-12 12:25 ` Sayali Patil [this message]
2026-03-12 12:25 ` [PATCH v2 05/13] selftests/mm: size tmpfs according to PMD page size in split_huge_page_test Sayali Patil
2026-03-12 12:46 ` David Hildenbrand (Arm)
2026-03-12 12:25 ` [PATCH v2 06/13] selftest/mm: adjust hugepage-mremap test size for large huge pages Sayali Patil
2026-03-12 12:25 ` [PATCH v2 07/13] selftest/mm: register existing mapping with userfaultfd in hugepage-mremap Sayali Patil
2026-03-12 12:25 ` [PATCH v2 08/13] selftests/mm: ensure destination is hugetlb-backed " Sayali Patil
2026-03-12 12:25 ` [PATCH v2 09/13] selftests/mm: skip uffd-wp-mremap if UFFD write-protect is unsupported Sayali Patil
2026-03-12 12:50 ` David Hildenbrand (Arm)
2026-03-13 14:26 ` Sayali Patil
2026-03-24 23:56 ` Andrew Morton
2026-03-26 18:01 ` Sayali Patil
2026-03-26 18:38 ` Andrew Morton
2026-03-12 12:25 ` [PATCH v2 10/13] selftests/mm: skip uffd-stress test when nr_pages_per_cpu is zero Sayali Patil
2026-03-12 12:25 ` [PATCH v2 11/13] selftests/mm: fix double increment in linked list cleanup in compaction_test Sayali Patil
2026-03-12 12:51 ` David Hildenbrand (Arm)
2026-03-12 12:25 ` [PATCH v2 12/13] selftests/mm: move hwpoison setup into run_test() and silence modprobe output for memory-failure category Sayali Patil
2026-03-12 12:25 ` [PATCH v2 13/13] selftests/cgroup: extend test_hugetlb_memcg.c to support all huge page sizes Sayali Patil
2026-03-12 22:05 ` [PATCH v2 00/13] selftests/mm: fix failures and robustness improvements Andrew Morton
2026-03-13 14:16 ` Sayali Patil
2026-03-17 6:00 ` Venkat Rao Bagalkote
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3b5b4275fed509e13567bba7471a9130bbfa6841.1773305677.git.sayalip@linux.ibm.com \
--to=sayalip@linux.ibm.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@kernel.org \
--cc=osalvador@suse.de \
--cc=ritesh.list@gmail.com \
--cc=shuah@kernel.org \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox