FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Ubuntu Kernel Team

 
 
LinkBack Thread Tools
 
Old 07-11-2011, 09:21 AM
Mel Gorman
 
Default mm: vmscan: do not apply pressure to slab if we are =

BugLink: http://bugs.launchpad.net/bugs/808509

commit d7868dae893c83c50c7824bc2bc75f93d114669f

During allocator-intensive workloads, kswapd will be woken frequently
causing free memory to oscillate between the high and min watermark. Thi=
s
is expected behaviour.

When kswapd applies pressure to zones during node balancing, it checks if
the zone is above a high+balance_gap threshold. If it is, it does not
apply pressure but it unconditionally shrinks slab on a global basis whic=
h
is excessive. In the event kswapd is being kept awake due to a high smal=
l
unreclaimable zone, it skips zone shrinking but still calls shrink_slab()=
.

Once pressure has been applied, the check for zone being unreclaimable is
being made before the check is made if all_unreclaimable should be set.
This miss of unreclaimable can cause has_under_min_watermark_zone to be
set due to an unreclaimable zone preventing kswapd backing off on
congestion_wait().

Signed-off-by: Mel Gorman <mgorman@suse.de>
Reported-by: P=C3=A1draig Brady <P@draigBrady.com>
Tested-by: P=C3=A1draig Brady <P@draigBrady.com>
Tested-by: Andrew Lutomirski <luto@mit.edu>
Acked-by: Rik van Riel <riel@redhat.com>
Reviewed-by: Minchan Kim <minchan.kim@gmail.com>
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
---
mm/vmscan.c | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index f50f716..7f8e890 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2436,19 +2436,19 @@ loop_again:
KSWAPD_ZONE_BALANCE_GAP_RATIO);
if (!zone_watermark_ok_safe(zone, order,
high_wmark_pages(zone) + balance_gap,
- end_zone, 0))
+ end_zone, 0)) {
shrink_zone(priority, zone, &sc);
- reclaim_state->reclaimed_slab =3D 0;
- nr_slab =3D shrink_slab(sc.nr_scanned, GFP_KERNEL,
- lru_pages);
- sc.nr_reclaimed +=3D reclaim_state->reclaimed_slab;
- total_scanned +=3D sc.nr_scanned;
=20
- if (zone->all_unreclaimable)
- continue;
- if (nr_slab =3D=3D 0 &&
- !zone_reclaimable(zone))
- zone->all_unreclaimable =3D 1;
+ reclaim_state->reclaimed_slab =3D 0;
+ nr_slab =3D shrink_slab(sc.nr_scanned, GFP_KERNEL,
+ lru_pages);
+ sc.nr_reclaimed +=3D reclaim_state->reclaimed_slab;
+ total_scanned +=3D sc.nr_scanned;
+
+ if (nr_slab =3D=3D 0 && !zone_reclaimable(zone))
+ zone->all_unreclaimable =3D 1;
+ }
+
/*
* If we've done a decent amount of scanning and
* the reclaim ratio is low, start doing writepage
@@ -2458,6 +2458,9 @@ loop_again:
total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2)
sc.may_writepage =3D 1;
=20
+ if (zone->all_unreclaimable)
+ continue;
+
if (!zone_watermark_ok_safe(zone, order,
high_wmark_pages(zone), end_zone, 0)) {
all_zones_ok =3D 0;
--=20
1.7.0.4
 

Thread Tools




All times are GMT. The time now is 09:24 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org