System hangs have been observed when performing heavy I/O on
sandybridge systems with small memory footprints (for example,
less than 2GB of memory). kswapd consumes all the CPU and the
machine effectively becomes unusable because kswapd is missing
every cond_resched(). Also, we need to invert the logic in
commit 1741c877 ("mm: kswapd: keep kswapd awake for high-order
allocations until a percentage of the node is balanced") to
allow kswapd to go to sleep when balanced for high orders.
Testing involved multiply copying ~600MB of files from an install
image on a laptop with 2GB of memory. A 2.5 hour (150 iteration)
soak test cannot trip the hang with these patches, where as
without them the bug occurs in the first 5 to 30 iterations.
BugLink: http://bugs.launchpad.net/bugs/755066
Patches cherry-picked from upstream and are in GregKH's stable 2.6.38.8
Johannes Weiner (1):
mm: vmscan: correct use of pgdat_balanced in sleeping_prematurely
Minchan Kim (1):
mm: vmscan: correctly check if reclaimer should schedule during
shrink_slab