On Tue, 21 Jun 2016 18:22:49 -0700 (PDT) David Rientjes <rientjes@xxxxxxxxxx> wrote: > If the memory compaction free scanner cannot successfully split a free > page (only possible due to per-zone low watermark), terminate the free > scanner rather than continuing to scan memory needlessly. If the > watermark is insufficient for a free page of order <= cc->order, then > terminate the scanner since all future splits will also likely fail. > > This prevents the compaction freeing scanner from scanning all memory on > very large zones (very noticeable for zones > 128GB, for instance) when > all splits will likely fail while holding zone->lock. > This collides pretty heavily with Joonsoo's "mm/compaction: split freepages without holding the zone lock". I ended up with this, in isolate_freepages_block(): /* Found a free page, will break it into order-0 pages */ order = page_order(page); isolated = __isolate_free_page(page, page_order(page)); set_page_private(page, order); total_isolated += isolated; cc->nr_freepages += isolated; list_add_tail(&page->lru, freelist); if (!strict && cc->nr_migratepages <= cc->nr_freepages) { blockpfn += isolated; break; } /* Advance to the end of split page */ blockpfn += isolated - 1; cursor += isolated - 1; continue; isolate_fail: -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html