diff options
| author | Vinayak Menon <vinmenon@codeaurora.org> | 2014-12-26 19:29:41 +0530 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-05-31 15:23:28 -0700 |
| commit | 44bd107fc9cdb2d3b195e01611b074f609b97f1a (patch) | |
| tree | dee71c4f53a91e03a5cc8e847f36899ecab1d0e6 /scripts | |
| parent | eaee620aa28e718a9eabe642b2249764f2d86614 (diff) | |
mm: vmscan: fix the page state calculation in too_many_isolated
It is observed that sometimes multiple tasks get blocked in
the congestion_wait loop below, in shrink_inactive_list.
(__schedule) from [<c0a03328>]
(schedule_timeout) from [<c0a04940>]
(io_schedule_timeout) from [<c01d585c>]
(congestion_wait) from [<c01cc9d8>]
(shrink_inactive_list) from [<c01cd034>]
(shrink_zone) from [<c01cdd08>]
(try_to_free_pages) from [<c01c442c>]
(__alloc_pages_nodemask) from [<c01f1884>]
(new_slab) from [<c09fcf60>]
(__slab_alloc) from [<c01f1a6c>]
In one such instance, zone_page_state(zone, NR_ISOLATED_FILE)
had returned 14, zone_page_state(zone, NR_INACTIVE_FILE)
returned 92, and the gfp_flag was GFP_KERNEL which resulted
in too_many_isolated to return true. But one of the CPU pageset
vmstat diff had NR_ISOLATED_FILE as -14. As there weren't any more
update to per cpu pageset, the threshold wasn't met, and the
tasks were blocked in the congestion wait.
This patch uses zone_page_state_snapshot instead, but restricts
its usage to avoid performance penalty.
Change-Id: Iec767a548e524729c7ed79a92fe4718cdd08ce69
Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions
