linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* madvise_inject_error skips pages
@ 2024-07-16 15:12 Matthew Wilcox
  2024-07-16 21:33 ` Jane Chu
  0 siblings, 1 reply; 3+ messages in thread
From: Matthew Wilcox @ 2024-07-16 15:12 UTC (permalink / raw)
  To: linux-mm; +Cc: Miaohe Lin, Naoya Horiguchi, Jane Chu

I was going to send this patch:

+++ b/mm/madvise.c
@@ -1136,9 +1136,10 @@ static int madvise_inject_error(int behavior,
                /*
                 * When soft offlining hugepages, after migrating the page
                 * we dissolve it, therefore in the second loop "page" will
-                * no longer be a compound page.
+                * no longer be part of a large folio.
                 */
-               size = page_size(compound_head(page));
+               size = folio_size(page_folio(page));
+               start = start & ~(size - 1);

                if (behavior == MADV_SOFT_OFFLINE) {
                        pr_info("Soft offlining pfn %#lx at process virtual address %#lx\n",

because right now if you start in the middle of (e.g.) an order-4 folio
followed by an order-0 folio, you'll skip the order-0 folio immediately
following it.

But then I realised that we can come to this path in the middle of
a large file-backed folio that's mapped misaligned and has a COW page
in the middle, and the whole thing is just misguided.  So I gave up.
Anyone want to take a crack at fixing & testing this?


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: madvise_inject_error skips pages
  2024-07-16 15:12 madvise_inject_error skips pages Matthew Wilcox
@ 2024-07-16 21:33 ` Jane Chu
  2024-07-17  6:51   ` Miaohe Lin
  0 siblings, 1 reply; 3+ messages in thread
From: Jane Chu @ 2024-07-16 21:33 UTC (permalink / raw)
  To: Matthew Wilcox, linux-mm; +Cc: Miaohe Lin, Naoya Horiguchi, Jane Chu

Hi, Matthew,

On 7/16/2024 8:12 AM, Matthew Wilcox wrote:
> I was going to send this patch:
>
> +++ b/mm/madvise.c
> @@ -1136,9 +1136,10 @@ static int madvise_inject_error(int behavior,
>                  /*
>                   * When soft offlining hugepages, after migrating the page
>                   * we dissolve it, therefore in the second loop "page" will
> -                * no longer be a compound page.
> +                * no longer be part of a large folio.
>                   */
> -               size = page_size(compound_head(page));
> +               size = folio_size(page_folio(page));
> +               start = start & ~(size - 1);
>
>                  if (behavior == MADV_SOFT_OFFLINE) {
>                          pr_info("Soft offlining pfn %#lx at process virtual address %#lx\n",
>
> because right now if you start in the middle of (e.g.) an order-4 folio
> followed by an order-0 folio, you'll skip the order-0 folio immediately
> following it.
>
> But then I realised that we can come to this path in the middle of
> a large file-backed folio that's mapped misaligned and has a COW page
> in the middle, and the whole thing is just misguided.  So I gave up.
> Anyone want to take a crack at fixing & testing this?

Thanks for the report.

My understanding is, we should run folio_test_large() upfront, and treat 
both ends as special case

unless they're folio_size aligned, and iterate in folio_size for the 
middle.   I think this should work for

hugetlb and large folio in general, but I need to confirm this with tests.

Any thoughts?

BTW, unpoison does look right, I can address them together.

thanks,

-jane




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: madvise_inject_error skips pages
  2024-07-16 21:33 ` Jane Chu
@ 2024-07-17  6:51   ` Miaohe Lin
  0 siblings, 0 replies; 3+ messages in thread
From: Miaohe Lin @ 2024-07-17  6:51 UTC (permalink / raw)
  To: Jane Chu, Matthew Wilcox; +Cc: Naoya Horiguchi, Linux-MM

On 2024/7/17 5:33, Jane Chu wrote:
> Hi, Matthew,
> 
> On 7/16/2024 8:12 AM, Matthew Wilcox wrote:
>> I was going to send this patch:
>>
>> +++ b/mm/madvise.c
>> @@ -1136,9 +1136,10 @@ static int madvise_inject_error(int behavior,
>>                  /*
>>                   * When soft offlining hugepages, after migrating the page
>>                   * we dissolve it, therefore in the second loop "page" will
>> -                * no longer be a compound page.
>> +                * no longer be part of a large folio.
>>                   */
>> -               size = page_size(compound_head(page));
>> +               size = folio_size(page_folio(page));
>> +               start = start & ~(size - 1);
>>
>>                  if (behavior == MADV_SOFT_OFFLINE) {
>>                          pr_info("Soft offlining pfn %#lx at process virtual address %#lx\n",
>>
>> because right now if you start in the middle of (e.g.) an order-4 folio
>> followed by an order-0 folio, you'll skip the order-0 folio immediately
>> following it.
>>
>> But then I realised that we can come to this path in the middle of
>> a large file-backed folio that's mapped misaligned and has a COW page
>> in the middle, and the whole thing is just misguided.  So I gave up.
>> Anyone want to take a crack at fixing & testing this?
> 
> Thanks for the report.

Thanks both for your thoughts.

> 
> My understanding is, we should run folio_test_large() upfront, and treat both ends as special case
> 
> unless they're folio_size aligned, and iterate in folio_size for the middle.   I think this should work for
> 
> hugetlb and large folio in general, but I need to confirm this with tests.
> 
> Any thoughts?

I might be wrong but there might be some corner cases even if they're folio_size aligned.
For example, if pte[0] points to a pte mapped thp and pte[1..n] are cowed pages, these cowed
pages might be skipped in next loop because folio_size covers them but they doesn't belong to
this thp? Will it be better to decide @size upon pte entry?

Thanks.
.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-07-17  6:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-16 15:12 madvise_inject_error skips pages Matthew Wilcox
2024-07-16 21:33 ` Jane Chu
2024-07-17  6:51   ` Miaohe Lin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).