From: Muhammad Usama Anjum <usama.anjum@arm.com>
To: Dev Jain <dev.jain@arm.com>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
Vlastimil Babka <vbabka@kernel.org>,
Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Shuah Khan <shuah@kernel.org>,
Zi Yan <ziy@nvidia.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Nico Pache <npache@redhat.com>,
Ryan Roberts <ryan.roberts@arm.com>,
Barry Song <baohua@kernel.org>, Lance Yang <lance.yang@linux.dev>,
Usama Arif <usama.arif@linux.dev>,
Miaohe Lin <linmiaohe@huawei.com>,
Naoya Horiguchi <nao.horiguchi@gmail.com>,
linux-mm@kvack.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org, sarthak.sharma@arm.com
Cc: usama.anjum@arm.com
Subject: Re: [PATCH v2 5/5] selftests/mm: retry migration failures for the full runtime
Date: Fri, 24 Jul 2026 12:53:21 +0100 [thread overview]
Message-ID: <a3ed6793-8285-4043-a0bb-10bd3890be19@arm.com> (raw)
In-Reply-To: <15111e85-4143-476a-830e-9f7d47cc236e@arm.com>
On 24/07/2026 12:46 pm, Dev Jain wrote:
>
>
> On 24/07/26 3:54 pm, Muhammad Usama Anjum wrote:
>> move_pages() is best effort and can temporarily fail when concurrent
>> faults race with page unmapping. A busy shared-anon workload can exhaust
>> the current 100 retries long before the intended 20-second runtime and
>> produce a false failure.
>>
>> Use the full runtime as the retry window. Since the initial page location
>> is unknown, require it to reach both alternating NUMA targets to confirm
>> that cross-node migration made progress despite transient contention.
>>
>> Signed-off-by: Muhammad Usama Anjum <usama.anjum@arm.com>
>> ---
>
> Makes sense, but see below.
>
>
>> Changes since v1:
>> - Retry per-page failures for the full runtime
>> - Verify that both alternating NUMA targets are reached
>> ---
>> tools/testing/selftests/mm/migration.c | 39 ++++++++++++++------------
>> 1 file changed, 21 insertions(+), 18 deletions(-)
>>
>> diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftests/mm/migration.c
>> index 29f7492453d43..4d55a424058a9 100644
>> --- a/tools/testing/selftests/mm/migration.c
>> +++ b/tools/testing/selftests/mm/migration.c
>> @@ -7,7 +7,7 @@
>> #include "kselftest_harness.h"
>> #include "hugepage_settings.h"
>>
>> -#include <strings.h>
>> +#include <string.h>
>> #include <pthread.h>
>> #include <numa.h>
>> #include <numaif.h>
>> @@ -20,7 +20,6 @@
>>
>> #define TWOMEG (2<<20)
>> #define RUNTIME (20)
>> -#define MAX_RETRIES 100
>> #define ALIGN(x, a) (((x) + (a - 1)) & (~((a) - 1)))
>>
>> HUGETLB_SETUP_DEFAULT_PAGES(1)
>> @@ -110,7 +109,7 @@ int migrate(uint64_t *ptr, int n1, int n2)
>> int ret, tmp;
>> int status = 0;
>> struct timespec ts1, ts2;
>> - int failures = 0;
>> + int success = 0;
>>
>> if (clock_gettime(CLOCK_MONOTONIC, &ts1))
>> return -1;
>> @@ -119,29 +118,33 @@ int migrate(uint64_t *ptr, int n1, int n2)
>> if (clock_gettime(CLOCK_MONOTONIC, &ts2))
>> return -1;
>>
>> - if (ts2.tv_sec - ts1.tv_sec >= RUNTIME)
>> - return 0;
>> + if (ts2.tv_sec - ts1.tv_sec >= RUNTIME) {
>> + /* Reaching both targets verifies a cross-node move. */
>> + if (success >= 2)
>> + return 0;
>> + else
>> + return -2;
>> + }
>>
>> ret = move_pages(0, 1, (void **) &ptr, &n2, &status,
>> MPOL_MF_MOVE_ALL);
>> - if (ret) {
>> - if (ret > 0) {
>> - /* Migration is best effort; try again */
>> - if (++failures < MAX_RETRIES)
>> - continue;
>> - printf("Didn't migrate %d pages\n", ret);
>> - }
>> - else
>> - perror("Couldn't migrate pages");
>> - return -2;
>> + if (ret < 0) {
>> + perror("Couldn't migrate pages");
>> + return ret;
>> }
>> - failures = 0;
>> + /* Migration is best effort. Try again */
>> + if (ret > 0 || status < 0)
>
> old code wasn't using status, so why now?
The old code not using it does not mean we cannot use it now. ret gives the
aggregate result, while status gives the per-page result: the destination
node on success or a negative errno explaining the failure. In particular,
move_pages() can return 0 with a negative status, so checking it prevents a
failed move from being counted as successful.
>
>> + continue;
>> + if (status != n2) {
>> + printf("Page is on node %d instead of target node %d\n",
>> + status, n2);
>> + return status;
>> + }
>> + success++;
>> tmp = n2;
>> n2 = n1;
>> n1 = tmp;
>> }
>> -
>> - return 0;
>> }
>>
>> void *access_mem(void *ptr)
>
--
Thanks,
Usama
next prev parent reply other threads:[~2026-07-24 11:54 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 10:24 [PATCH v2 0/5] selftests/mm: Handle unsupported and transient test conditions Muhammad Usama Anjum
2026-07-24 10:24 ` [PATCH v2 1/5] selftests/mm: skip COW tmpfile cases when fallocate() is unsupported Muhammad Usama Anjum
2026-07-24 10:24 ` [PATCH v2 2/5] selftests/mm: skip guard hole-punch test if MADV_REMOVE " Muhammad Usama Anjum
2026-07-24 10:24 ` [PATCH v2 3/5] selftests/mm: skip khugepaged swap tests without swap Muhammad Usama Anjum
2026-07-24 11:16 ` Sarthak Sharma
2026-07-24 10:24 ` [PATCH v2 4/5] selftests/mm: skip hard dirty page-cache test on NFS Muhammad Usama Anjum
2026-07-25 2:10 ` Miaohe Lin
2026-07-27 9:21 ` Muhammad Usama Anjum
2026-07-24 10:24 ` [PATCH v2 5/5] selftests/mm: retry migration failures for the full runtime Muhammad Usama Anjum
2026-07-24 11:46 ` Dev Jain
2026-07-24 11:53 ` Muhammad Usama Anjum [this message]
2026-07-24 15:23 ` Dev Jain
2026-07-24 15:57 ` Muhammad Usama Anjum
2026-07-25 9:25 ` Dev Jain
2026-07-27 9:20 ` Muhammad Usama Anjum
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=a3ed6793-8285-4043-a0bb-10bd3890be19@arm.com \
--to=usama.anjum@arm.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=nao.horiguchi@gmail.com \
--cc=npache@redhat.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=sarthak.sharma@arm.com \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=usama.arif@linux.dev \
--cc=vbabka@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
all inboxes | Powered by JetHome®