Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757653AbZD2Prg (ORCPT ); Wed, 29 Apr 2009 11:47:36 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753077AbZD2Pr1 (ORCPT ); Wed, 29 Apr 2009 11:47:27 -0400 Received: from mx2.redhat.com ([66.187.237.31]:57366 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751957AbZD2Pr1 (ORCPT ); Wed, 29 Apr 2009 11:47:27 -0400 Date: Wed, 29 Apr 2009 11:47:08 -0400 From: Rik van Riel To: Peter Zijlstra Cc: Elladan , linux-kernel@vger.kernel.org, tytso@mit.edu, kosaki.motohiro@jp.fujitsu.com, linux-mm@kvack.org Subject: [PATCH] vmscan: evict use-once pages first (v2) Message-ID: <20090429114708.66114c03@cuia.bos.redhat.com> In-Reply-To: <1240987349.4512.18.camel@laptop> References: <20090428044426.GA5035@eskimo.com> <20090428192907.556f3a34@bree.surriel.com> <1240987349.4512.18.camel@laptop> Organization: Red Hat, Inc Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2178 Lines: 58 When the file LRU lists are dominated by streaming IO pages, evict those pages first, before considering evicting other pages. This should be safe from deadlocks or performance problems because only three things can happen to an inactive file page: 1) referenced twice and promoted to the active list 2) evicted by the pageout code 3) under IO, after which it will get evicted or promoted The pages freed in this way can either be reused for streaming IO, or allocated for something else. If the pages are used for streaming IO, this pageout pattern continues. Otherwise, we will fall back to the normal pageout pattern. Signed-off-by: Rik van Riel --- On Wed, 29 Apr 2009 08:42:29 +0200 Peter Zijlstra wrote: > Isn't there a hole where LRU_*_FILE << LRU_*_ANON and we now stop > shrinking INACTIVE_ANON even though it makes sense to. Peter, after looking at this again, I believe that the get_scan_ratio logic should take care of protecting the anonymous pages, so we can get away with this following, less intrusive patch. Elladan, does this smaller patch still work as expected? diff --git a/mm/vmscan.c b/mm/vmscan.c index eac9577..4471dcb 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1489,6 +1489,18 @@ static void shrink_zone(int priority, struct zone *zone, nr[l] = scan; } + /* + * When the system is doing streaming IO, memory pressure here + * ensures that active file pages get deactivated, until more + * than half of the file pages are on the inactive list. + * + * Once we get to that situation, protect the system's working + * set from being evicted by disabling active file page aging. + * The logic in get_scan_ratio protects anonymous pages. + */ + if (nr[LRU_INACTIVE_FILE] > nr[LRU_ACTIVE_FILE]) + nr[LRU_ACTIVE_FILE] = 0; + while (nr[LRU_INACTIVE_ANON] || nr[LRU_ACTIVE_FILE] || nr[LRU_INACTIVE_FILE]) { for_each_evictable_lru(l) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/