diff mbox series

[7/7] migrate_pages(): fix failure counting for retry

Message ID 20220627022515.1067946-1-ying.huang@intel.com (mailing list archive)
State New
Headers show
Series [1/7] migrate: fix syscall move_pages() return value for failure | expand

Commit Message

Huang, Ying June 27, 2022, 2:25 a.m. UTC
After 10 retries, we will give up and the remaining pages will be
counted as failure in nr_failed and nr_thp_failed.  We should count
the failure in nr_failed_pages too.  This is done in this patch.

Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Fixes: 5984fabb6e82 ("mm: move_pages: report the number of non-attempted pages")
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Yang Shi <shy828301@gmail.com>
---
 mm/migrate.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Baolin Wang June 27, 2022, 4:29 a.m. UTC | #1
On 6/27/2022 10:25 AM, Huang Ying wrote:
> After 10 retries, we will give up and the remaining pages will be
> counted as failure in nr_failed and nr_thp_failed.  We should count
> the failure in nr_failed_pages too.  This is done in this patch.
> 
> Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
> Fixes: 5984fabb6e82 ("mm: move_pages: report the number of non-attempted pages")
> Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
> Cc: Zi Yan <ziy@nvidia.com>
> Cc: Yang Shi <shy828301@gmail.com>
> ---
>   mm/migrate.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 70a0e1f34c03..e42bd409d3aa 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -1344,6 +1344,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>   	int thp_retry = 1;
>   	int nr_failed = 0;
>   	int nr_failed_pages = 0;
> +	int nr_retry_pages = 0;
>   	int nr_succeeded = 0;
>   	int nr_thp_succeeded = 0;
>   	int nr_thp_failed = 0;
> @@ -1364,6 +1365,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>   	for (pass = 0; pass < 10 && (retry || thp_retry); pass++) {
>   		retry = 0;
>   		thp_retry = 0;
> +		nr_retry_pages = 0;
>   
>   		list_for_each_entry_safe(page, page2, from, lru) {
>   			/*
> @@ -1449,12 +1451,14 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>   				nr_thp_failed += thp_retry;
>   				if (!no_subpage_counting)
>   					nr_failed += retry;
> +				nr_failed_pages += nr_retry_pages;

Can you move this a little forward to update 'nr_failed_pages' in one 
place, which seems more readable?
nr_failed_pages += nr_subpages + nr_retry_pages;

Otherwise,
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>

>   				goto out;
>   			case -EAGAIN:
>   				if (is_thp)
>   					thp_retry++;
>   				else
>   					retry++;
> +				nr_retry_pages += nr_subpages;
>   				break;
>   			case MIGRATEPAGE_SUCCESS:
>   				nr_succeeded += nr_subpages;
> @@ -1481,6 +1485,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>   	if (!no_subpage_counting)
>   		nr_failed += retry;
>   	nr_thp_failed += thp_retry;
> +	nr_failed_pages += nr_retry_pages;
>   	/*
>   	 * Try to migrate subpages of fail-to-migrate THPs, no nr_failed
>   	 * counting in this round, since all subpages of a THP is counted
Huang, Ying June 27, 2022, 6:21 a.m. UTC | #2
Baolin Wang <baolin.wang@linux.alibaba.com> writes:

> On 6/27/2022 10:25 AM, Huang Ying wrote:
>> After 10 retries, we will give up and the remaining pages will be
>> counted as failure in nr_failed and nr_thp_failed.  We should count
>> the failure in nr_failed_pages too.  This is done in this patch.
>> Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
>> Fixes: 5984fabb6e82 ("mm: move_pages: report the number of non-attempted pages")
>> Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
>> Cc: Zi Yan <ziy@nvidia.com>
>> Cc: Yang Shi <shy828301@gmail.com>
>> ---
>>   mm/migrate.c | 5 +++++
>>   1 file changed, 5 insertions(+)
>> diff --git a/mm/migrate.c b/mm/migrate.c
>> index 70a0e1f34c03..e42bd409d3aa 100644
>> --- a/mm/migrate.c
>> +++ b/mm/migrate.c
>> @@ -1344,6 +1344,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>>   	int thp_retry = 1;
>>   	int nr_failed = 0;
>>   	int nr_failed_pages = 0;
>> +	int nr_retry_pages = 0;
>>   	int nr_succeeded = 0;
>>   	int nr_thp_succeeded = 0;
>>   	int nr_thp_failed = 0;
>> @@ -1364,6 +1365,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>>   	for (pass = 0; pass < 10 && (retry || thp_retry); pass++) {
>>   		retry = 0;
>>   		thp_retry = 0;
>> +		nr_retry_pages = 0;
>>     		list_for_each_entry_safe(page, page2, from, lru) {
>>   			/*
>> @@ -1449,12 +1451,14 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>>   				nr_thp_failed += thp_retry;
>>   				if (!no_subpage_counting)
>>   					nr_failed += retry;
>> +				nr_failed_pages += nr_retry_pages;
>
> Can you move this a little forward to update 'nr_failed_pages' in one
> place, which seems more readable?
> nr_failed_pages += nr_subpages + nr_retry_pages;

Sure.  Will do this in the next version!

> Otherwise,
> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>

Thanks!

Best Regards,
Huang, Ying

>
>>   				goto out;
>>   			case -EAGAIN:
>>   				if (is_thp)
>>   					thp_retry++;
>>   				else
>>   					retry++;
>> +				nr_retry_pages += nr_subpages;
>>   				break;
>>   			case MIGRATEPAGE_SUCCESS:
>>   				nr_succeeded += nr_subpages;
>> @@ -1481,6 +1485,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>>   	if (!no_subpage_counting)
>>   		nr_failed += retry;
>>   	nr_thp_failed += thp_retry;
>> +	nr_failed_pages += nr_retry_pages;
>>   	/*
>>   	 * Try to migrate subpages of fail-to-migrate THPs, no nr_failed
>>   	 * counting in this round, since all subpages of a THP is counted
diff mbox series

Patch

diff --git a/mm/migrate.c b/mm/migrate.c
index 70a0e1f34c03..e42bd409d3aa 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1344,6 +1344,7 @@  int migrate_pages(struct list_head *from, new_page_t get_new_page,
 	int thp_retry = 1;
 	int nr_failed = 0;
 	int nr_failed_pages = 0;
+	int nr_retry_pages = 0;
 	int nr_succeeded = 0;
 	int nr_thp_succeeded = 0;
 	int nr_thp_failed = 0;
@@ -1364,6 +1365,7 @@  int migrate_pages(struct list_head *from, new_page_t get_new_page,
 	for (pass = 0; pass < 10 && (retry || thp_retry); pass++) {
 		retry = 0;
 		thp_retry = 0;
+		nr_retry_pages = 0;
 
 		list_for_each_entry_safe(page, page2, from, lru) {
 			/*
@@ -1449,12 +1451,14 @@  int migrate_pages(struct list_head *from, new_page_t get_new_page,
 				nr_thp_failed += thp_retry;
 				if (!no_subpage_counting)
 					nr_failed += retry;
+				nr_failed_pages += nr_retry_pages;
 				goto out;
 			case -EAGAIN:
 				if (is_thp)
 					thp_retry++;
 				else
 					retry++;
+				nr_retry_pages += nr_subpages;
 				break;
 			case MIGRATEPAGE_SUCCESS:
 				nr_succeeded += nr_subpages;
@@ -1481,6 +1485,7 @@  int migrate_pages(struct list_head *from, new_page_t get_new_page,
 	if (!no_subpage_counting)
 		nr_failed += retry;
 	nr_thp_failed += thp_retry;
+	nr_failed_pages += nr_retry_pages;
 	/*
 	 * Try to migrate subpages of fail-to-migrate THPs, no nr_failed
 	 * counting in this round, since all subpages of a THP is counted