Re: Memory usage with qemu-kvm-0.12.1.1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 27 Dec 2009, Rik van Riel wrote:
> On 12/27/2009 12:12 PM, Avi Kivity wrote:
> > On 12/27/2009 06:45 PM, Rik van Riel wrote:
> > > 
> > > > If so, it doesn't copy stable@xxxxxxxxxxx Is it queued for -stable?
> > > 
> > > I do not believe that it is queued for -stable.
> > > 
> > > Do performance fixes fit with -stable policy?
> > 
> > If it is a serious regression, I believe it fits.
> 
> It's probably been there since 2.6.28, though it might have been
> introduced later with a cleanup patch.  It seems to go back at
> least as far as March...

It does look as if it would have got worse in 2.6.31 and 2.6.32
- though I am reluctant to predict how these scans work out in
practice from just glancing at the code!

I agree with Avi (or with Avi's implication), that it would be
worth sending the fix to -stable - but it would be nice to hear
if the patch (inline below) actually does fix Daniel's problem.
It applies and builds correctly on 2.6.31.9 and 2.6.32.3.

We have certainly sent much more specialized performance fixes
to -stable (I'm thinking of Lee's anon_vma locking), and I see
this as more of a straightforward bugfix anyway - people get
worried by going into swap without understanding why.

I forget which patch of mine Avi was thinking of,
but I'm pretty sure Rik's will prove much the more relevant.

Hugh

commit b39415b2731d7dec5e612d2d12595da82399eedf
Author: Rik van Riel <riel@xxxxxxxxxx>
Date:   Mon Dec 14 17:59:48 2009 -0800

    vmscan: do not evict inactive pages when skipping an active list scan
    
    In AIM7 runs, recent kernels start swapping out anonymous pages well
    before they should.  This is due to shrink_list falling through to
    shrink_inactive_list if !inactive_anon_is_low(zone, sc), when all we
    really wanted to do is pre-age some anonymous pages to give them extra
    time to be referenced while on the inactive list.
    
    The obvious fix is to make sure that shrink_list does not fall through to
    scanning/reclaiming inactive pages when we called it to scan one of the
    active lists.
    
    This change should be safe because the loop in shrink_zone ensures that we
    will still shrink the anon and file inactive lists whenever we should.
    
    [kosaki.motohiro@xxxxxxxxxxxxxx: inactive_file_is_low() should be inactive_anon_is_low()]
    Reported-by: Larry Woodman <lwoodman@xxxxxxxxxx>
    Signed-off-by: Rik van Riel <riel@xxxxxxxxxx>
    Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx>
    Cc: Tomasz Chmielewski <mangoo@xxxxxxxx>
    Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 2ef59d5..0465818 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1463,20 +1463,26 @@ static int inactive_file_is_low(struct zone *zone, struct scan_control *sc)
 	return low;
 }
 
+static int inactive_list_is_low(struct zone *zone, struct scan_control *sc,
+				int file)
+{
+	if (file)
+		return inactive_file_is_low(zone, sc);
+	else
+		return inactive_anon_is_low(zone, sc);
+}
+
 static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
 	struct zone *zone, struct scan_control *sc, int priority)
 {
 	int file = is_file_lru(lru);
 
-	if (lru == LRU_ACTIVE_FILE && inactive_file_is_low(zone, sc)) {
-		shrink_active_list(nr_to_scan, zone, sc, priority, file);
+	if (is_active_lru(lru)) {
+		if (inactive_list_is_low(zone, sc, file))
+		    shrink_active_list(nr_to_scan, zone, sc, priority, file);
 		return 0;
 	}
 
-	if (lru == LRU_ACTIVE_ANON && inactive_anon_is_low(zone, sc)) {
-		shrink_active_list(nr_to_scan, zone, sc, priority, file);
-		return 0;
-	}
 	return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
 }
 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux