David Hildenbrand <david@xxxxxxxxxx> writes: > On 18.05.23 03:09, Huang, Ying wrote: >> David Hildenbrand <david@xxxxxxxxxx> writes: >> >>> On 17.05.23 18:15, Khalid Aziz wrote: >>>> Pages pinned in memory through extra refcounts can not be migrated. >>>> Currently as isolate_migratepages_block() scans pages for >>>> compaction, it skips any pinned anonymous pages. All non-migratable >>>> pages should be skipped and not just the anonymous pinned pages. >>>> This patch adds a check for extra refcounts on a page to determine >>>> if the page can be migrated. This was seen as a real issue on a >>>> customer workload where a large number of pages were pinned by vfio >>>> on the host and any attempts to allocate hugepages resulted in >>>> significant amount of cpu time spent in either direct compaction or >>>> in kcompactd scanning vfio pinned pages over and over again that can >>>> not be migrated. >>> >>> How will this change affect alloc_contig_range(), such as used for CMA >>> allocations or virtio-mem? alloc_contig_range() ends up calling >>> isolate_migratepages_range() -> isolate_migratepages_block(). >> IIUC, cc->alloc_contig can be used to distinguish contiguous >> allocation >> and compaction. And, from the original commit which introduced >> anonymous pages skipping (commit 119d6d59dcc0 ("mm, compaction: avoid >> isolating pinned pages ")) and this patch, large number of migration >> failure during compaction causes real issue too. So, I suggest to use >> cc->alloc_contig here. > > Agreed. I further wonder if we want to special-case the !alloc_contig > case also for MIGRATE_CMA and ZONE_MOVABLE, where we cannot have > longterm page pinnings (e.g., vfio pinned pages). This makes sense. The skipping is more accurate in this way. Best Regards, Huang, Ying