lkml.org 
[lkml]   [2014]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subject[PATCH V4 00/15] compaction: balancing overhead and success rates
Date
Based on next-20140715.

After a while, here's a V4 of series tweaking memory compaction.

Additional evaluation was made with stress-highalloc configured to use
__GFP_NO_KSWAPD, which makes it look like a THP page fault, so it only does
async compaction and is more likely to abort. This led to different (mostly
better) results in patches 10, 11 and 15, which is according to expectation.

Major changes in V4:

- Patch 2 changed deferred compaction signalling to a new return value instead
of boolean pointer (suggested by Joonsoo Kim)

- Patch 3 is a new small change to make compact_stall reporting more accurate.
I did it separately instead of within patch 2, as that one can also change
reported compact_stall for other reasons, so bisectability etc...

- Patch 5 (previously 4) is bigger than last time as according to the
suggestions it has gone all way to make isolate_migratepages family of
functions to be the same as isolate_freepages family. So there is now a
separate isolate_migratepages_block() function, and redundant parameters
were removed across both families of functions.

- Patch 6 is a new patch triggered by Naoya Horiguchi's suggestion. It further
unifies the scanner families and removes a per-page page_zone check from
the migration scanner.

- Patch 7 (previously 5) was, after some discussions with Minchan Kim, changed
to affect only khugepaged. For that reason, the contention type is passed
back all the way to __alloc_pages_slowpath() where the decisions to continue
or abort are made. I also changed the enum to a simple int, as the enum
definition would otherwise had to be included in more source files.
Also there are now hopefully no remaining holes where need_sched() or fatal
signal pending would not lead to immediate abort through all the layers of
direct compaction.

- Patch 15 remains a RFC, as there are still some not fully clear consequences,
and I need to measure whether not calling update_pageblock_skip() in the
skip_on_failure mode is a good decision. It probably isn't, as not marking
the pageblock as skipped and not updating cached pfn means pageblocks will
be checked repeatedly. On the other hand, marking pageblock as unsuitable
for compaction, even though it was not fully scanned to due skip_on_failure,
means that a lower-order compaction could succeed, but won't try the
pageblock. Sigh.

David Rientjes (2):
mm: rename allocflags_to_migratetype for clarity
mm, compaction: pass gfp mask to compact_control

Vlastimil Babka (13):
mm, THP: don't hold mmap_sem in khugepaged when allocating THP
mm, compaction: defer each zone individually instead of preferred zone
mm, compaction: do not count compact_stall if all zones skipped
compaction
mm, compaction: do not recheck suitable_migration_target under lock
mm, compaction: move pageblock checks up from
isolate_migratepages_range()
mm, compaction: reduce zone checking frequency in the migration
scanner
mm, compaction: khugepaged should not give up due to need_resched()
mm, compaction: periodically drop lock and restore IRQs in scanners
mm, compaction: skip rechecks when lock was already held
mm, compaction: remember position within pageblock in free pages
scanner
mm, compaction: skip buddy pages by their order in the migrate scanner
mm, compaction: try to capture the just-created high-order freepage
mm, compaction: do not migrate pages when that cannot satisfy page
fault allocation

include/linux/compaction.h | 28 +-
include/linux/gfp.h | 2 +-
mm/compaction.c | 781 ++++++++++++++++++++++++++++++++-------------
mm/huge_memory.c | 20 +-
mm/internal.h | 28 +-
mm/page_alloc.c | 189 ++++++++---
6 files changed, 752 insertions(+), 296 deletions(-)

--
1.8.4.5



\
 
 \ /
  Last update: 2014-07-20 02:41    [W:0.147 / U:1.264 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site