diff options
author | Johannes Weiner <hannes@cmpxchg.org> | 2017-05-03 17:52:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-03 18:52:08 -0400 |
commit | 3db65812d68883d1acfd20a9f2bc2cd13a7cd5c5 (patch) | |
tree | 759aa3170445d5c5fce8c469098853c3a2d470fb /mm/vmscan.c | |
parent | c822f6223d03c2c5b026a21da09c6b6d523258cd (diff) |
Revert "mm, vmscan: account for skipped pages as a partial scan"
This reverts commit d7f05528eedb047efe2288cff777676b028747b6.
Now that reclaimability of a node is no longer based on the ratio
between pages scanned and theoretically reclaimable pages, we can remove
accounting tricks for pages skipped due to zone constraints.
Link: http://lkml.kernel.org/r/20170228214007.5621-9-hannes@cmpxchg.org
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Jia He <hejianet@gmail.com>
Cc: Mel Gorman <mgorman@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 02f2eb51b33e..77832f0dbe0d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1472,12 +1472,12 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, | |||
1472 | unsigned long nr_taken = 0; | 1472 | unsigned long nr_taken = 0; |
1473 | unsigned long nr_zone_taken[MAX_NR_ZONES] = { 0 }; | 1473 | unsigned long nr_zone_taken[MAX_NR_ZONES] = { 0 }; |
1474 | unsigned long nr_skipped[MAX_NR_ZONES] = { 0, }; | 1474 | unsigned long nr_skipped[MAX_NR_ZONES] = { 0, }; |
1475 | unsigned long skipped = 0, total_skipped = 0; | 1475 | unsigned long skipped = 0; |
1476 | unsigned long scan, nr_pages; | 1476 | unsigned long scan, nr_pages; |
1477 | LIST_HEAD(pages_skipped); | 1477 | LIST_HEAD(pages_skipped); |
1478 | 1478 | ||
1479 | for (scan = 0; scan < nr_to_scan && nr_taken < nr_to_scan && | 1479 | for (scan = 0; scan < nr_to_scan && nr_taken < nr_to_scan && |
1480 | !list_empty(src);) { | 1480 | !list_empty(src); scan++) { |
1481 | struct page *page; | 1481 | struct page *page; |
1482 | 1482 | ||
1483 | page = lru_to_page(src); | 1483 | page = lru_to_page(src); |
@@ -1491,12 +1491,6 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, | |||
1491 | continue; | 1491 | continue; |
1492 | } | 1492 | } |
1493 | 1493 | ||
1494 | /* | ||
1495 | * Account for scanned and skipped separetly to avoid the pgdat | ||
1496 | * being prematurely marked unreclaimable by pgdat_reclaimable. | ||
1497 | */ | ||
1498 | scan++; | ||
1499 | |||
1500 | switch (__isolate_lru_page(page, mode)) { | 1494 | switch (__isolate_lru_page(page, mode)) { |
1501 | case 0: | 1495 | case 0: |
1502 | nr_pages = hpage_nr_pages(page); | 1496 | nr_pages = hpage_nr_pages(page); |
@@ -1525,6 +1519,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, | |||
1525 | if (!list_empty(&pages_skipped)) { | 1519 | if (!list_empty(&pages_skipped)) { |
1526 | int zid; | 1520 | int zid; |
1527 | 1521 | ||
1522 | list_splice(&pages_skipped, src); | ||
1528 | for (zid = 0; zid < MAX_NR_ZONES; zid++) { | 1523 | for (zid = 0; zid < MAX_NR_ZONES; zid++) { |
1529 | if (!nr_skipped[zid]) | 1524 | if (!nr_skipped[zid]) |
1530 | continue; | 1525 | continue; |
@@ -1532,17 +1527,8 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, | |||
1532 | __count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]); | 1527 | __count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]); |
1533 | skipped += nr_skipped[zid]; | 1528 | skipped += nr_skipped[zid]; |
1534 | } | 1529 | } |
1535 | |||
1536 | /* | ||
1537 | * Account skipped pages as a partial scan as the pgdat may be | ||
1538 | * close to unreclaimable. If the LRU list is empty, account | ||
1539 | * skipped pages as a full scan. | ||
1540 | */ | ||
1541 | total_skipped = list_empty(src) ? skipped : skipped >> 2; | ||
1542 | |||
1543 | list_splice(&pages_skipped, src); | ||
1544 | } | 1530 | } |
1545 | *nr_scanned = scan + total_skipped; | 1531 | *nr_scanned = scan; |
1546 | trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan, | 1532 | trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan, |
1547 | scan, skipped, nr_taken, mode, lru); | 1533 | scan, skipped, nr_taken, mode, lru); |
1548 | update_lru_sizes(lruvec, lru, nr_zone_taken); | 1534 | update_lru_sizes(lruvec, lru, nr_zone_taken); |