linux/drivers/staging
Mel Gorman 599d0c954f mm, vmscan: move LRU lists to node
This moves the LRU lists from the zone to the node and related data such
as counters, tracing, congestion tracking and writeback tracking.

Unfortunately, due to reclaim and compaction retry logic, it is
necessary to account for the number of LRU pages on both zone and node
logic.  Most reclaim logic is based on the node counters but the retry
logic uses the zone counters which do not distinguish inactive and
active sizes.  It would be possible to leave the LRU counters on a
per-zone basis but it's a heavier calculation across multiple cache
lines that is much more frequent than the retry checks.

Other than the LRU counters, this is mostly a mechanical patch but note
that it introduces a number of anomalies.  For example, the scans are
per-zone but using per-node counters.  We also mark a node as congested
when a zone is congested.  This causes weird problems that are fixed
later but is easier to review.

In the event that there is excessive overhead on 32-bit systems due to
the nodes being on LRU then there are two potential solutions

1. Long-term isolation of highmem pages when reclaim is lowmem

   When pages are skipped, they are immediately added back onto the LRU
   list. If lowmem reclaim persisted for long periods of time, the same
   highmem pages get continually scanned. The idea would be that lowmem
   keeps those pages on a separate list until a reclaim for highmem pages
   arrives that splices the highmem pages back onto the LRU. It potentially
   could be implemented similar to the UNEVICTABLE list.

   That would reduce the skip rate with the potential corner case is that
   highmem pages have to be scanned and reclaimed to free lowmem slab pages.

2. Linear scan lowmem pages if the initial LRU shrink fails

   This will break LRU ordering but may be preferable and faster during
   memory pressure than skipping LRU pages.

Link: http://lkml.kernel.org/r/1467970510-21195-4-git-send-email-mgorman@techsingularity.net
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Rik van Riel <riel@surriel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-07-28 16:07:41 -07:00
..
android mm, vmscan: move LRU lists to node 2016-07-28 16:07:41 -07:00
board staging: board: line over 80 characters 2016-04-29 17:58:02 -07:00
clocking-wizard
comedi staging: comedi: avoid using timeval 2016-06-17 21:14:34 -07:00
dgnc Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
emxx_udc Staging: emxx_udc: emxx_udc: fixed coding style issue 2016-05-09 14:25:52 +02:00
fbtft
fsl-mc staging: fsl-mc: convert mc command build/parse to use C structs 2016-06-26 17:14:03 -07:00
fwserial Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
gdm724x staging/gdm724x: fix "alignment should match open parenthesis" issues 2016-05-09 14:25:52 +02:00
goldfish
gs_fpgaboot
i4l staging: i4l: act2000: remove extra space 2016-05-01 14:33:34 -07:00
iio Third set of IIO new device support, features and cleanups for the 4.8 cycle. 2016-07-14 12:05:29 +09:00
ks7010 staging: ks7010: remove bogus NULL checks 2016-06-18 19:47:00 -07:00
lustre staging: lustre: quiet lockdep recursive lock warning 2016-06-20 14:28:39 -07:00
media [media] cec: always check all_device_types and features 2016-07-19 13:27:46 -03:00
most
mt29f_spinand staging: mt29f_spinand: set ECC algorithm explicitly 2016-05-05 23:52:04 +02:00
netlogic
nvec
octeon
octeon-usb
olpc_dcon
rtl8188eu Revert "Staging: rtl8188eu: rtw_efuse: Use sizeof type *pointer instead of sizeof type." 2016-06-17 11:21:45 -07:00
rtl8192e treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
rtl8192u rtl8192u: Remove unused semaphore rf_sem 2016-06-18 19:50:48 -07:00
rtl8712 rtl8712: Fixed alignment to match open parenthesis 2016-05-01 13:57:12 -07:00
rtl8723au nl80211: support beacon report scanning 2016-07-06 14:51:31 +02:00
rts5208 staging: rts5208: alignment to match open paranthesis 2016-04-29 17:58:02 -07:00
skein staging: skein: cleanup: align code to parentheses 2016-05-03 14:07:11 -07:00
slicoss staging: slicoss: fix missing blank line 2016-04-29 17:58:02 -07:00
sm750fb
speakup Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
unisys staging: unisys: visornic: change return statements 2016-06-07 22:58:16 -07:00
vme Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
vt6655 Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
vt6656 Staging and IIO driver update for 4.7-rc1 2016-05-20 22:20:48 -07:00
wilc1000 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2016-07-27 12:03:20 -07:00
wlan-ng nl80211: support beacon report scanning 2016-07-06 14:51:31 +02:00
xgifb
Kconfig staging: ks7010: add driver from Nanonote extra-repository 2016-06-07 22:42:53 -07:00
Makefile staging: ks7010: add driver from Nanonote extra-repository 2016-06-07 22:42:53 -07:00