Re: [PATCH] mm: remove migration for HugePage in isolate_single_pageblock()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2024/8/17 3:45, David Hildenbrand wrote:
On 16.08.24 13:30, Kefeng Wang wrote:


On 2024/8/16 18:11, David Hildenbrand wrote:
On 16.08.24 06:06, Kefeng Wang wrote:
The gigantic page size may larger than memory block size, so memory
offline always fails in this case after commit b2c9e2fbba32 ("mm: make
alloc_contig_range work at pageblock granularity"),

offline_pages
    start_isolate_page_range
      start_isolate_page_range(isolate_before=true)
        isolate [isolate_start, isolate_start + pageblock_nr_pages)
      start_isolate_page_range(isolate_before=false)
        isolate [isolate_end - pageblock_nr_pages, isolate_end) pageblock
             __alloc_contig_migrate_range
            isolate_migratepages_range
              isolate_migratepages_block
                isolate_or_dissolve_huge_page
                  if (hstate_is_gigantic(h))
                      return -ENOMEM;

In fact, we don't need to migrate page in page range isolation, for
memory offline path, there is do_migrate_range() to move the pages.
For contig allocation, there is another __alloc_contig_migrate_range()
after isolation to migrate the pages. So fix issue by skipping the
__alloc_contig_migrate_range() in isolate_single_pageblock().

...


Please distill some of that in the patch description. Right now you only talk about memory offlining and don't cover why alloc_contig_range() is fine as well with this change.

Borrowing some word from Zi,


PageHuge(gigantic) can bigger than a pageblock, the gigantic PageHuge is freed as order-0. This means MIGRATE_ISOLATE pageblocks will get to the right free list after __alloc_contig_migrate_range(), the one after
start_isolate_page_range() for alloc_contig_range(), this is same as in
memory offline, it has own path to isolate/migrate used page and dissolve the free hugepages, so the migration code in isolate_single_pageblock() is not needed, let's cleanup it and which also fix the above the issue.

Please correct me or help to write better description, thanks.


Let me explore the details in the meantime ... :)





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux