From: Johannes Weiner <hannes@cmpxchg.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>, Rik van Riel <riel@redhat.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: [PATCH 3/3][RFC] swsusp: shrink file cache first
Date: Fri, 06 Feb 2009 04:11:28 +0100 [thread overview]
Message-ID: <20090206031324.004715023@cmpxchg.org> (raw)
In-Reply-To: <20090206031125.693559239@cmpxchg.org>
[-- Attachment #1: swsusp-shrink-file-cache-first.patch --]
[-- Type: text/plain, Size: 3518 bytes --]
File cache pages are saved to disk either through normal writeback by
reclaim or by including them in the suspend image written to a
swapfile.
Writing them either way should take the same amount of time but doing
normal writeback and unmap changes the fault behaviour on resume from
prefault to on-demand paging, smoothening out resume and giving
previously cached pages the chance to stay out of memory completely if
they are not used anymore.
Another reason for preferring file page eviction is that the locality
principle is visible in fault patterns and swap might perform really
bad with subsequent faulting of contiguously mapped pages.
Since anon and file pages now live on different lists, selectively
scanning one type only is straight-forward.
This patch also removes the scanning of anon pages without allowing to
swap, which does not make much sense.
The five memory shrinking passes now look like this:
Pass 0: shrink inactive file cache
This has the best chances of not being used any time soon again after
resume, so trade inactive file cache against space for anon pages.
Pass 1: shrink file cache
Essentially the same as before but replenish the inactive file list
with borderline active pages.
Pass 2: shrink all file pages and inactive anon
Reclaim mapped pages file pages and go for aged anon pages as well.
Pass 3: shrink all file pages and anon
Same as before but also shrink the active anon list to have enough
anon pages for actual reclaim should we need pass 4.
Pass 4: repeat pass 3
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
---
mm/vmscan.c | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2069,13 +2069,23 @@ static unsigned long shrink_all_zones(un
for_each_evictable_lru(l) {
enum zone_stat_item ls = NR_LRU_BASE + l;
- unsigned long lru_pages = zone_page_state(zone, ls);
+ unsigned long lru_pages;
- /* For pass = 0, we don't shrink the active list */
- if (pass == 0 && (l == LRU_ACTIVE_ANON ||
- l == LRU_ACTIVE_FILE))
- continue;
+ switch (pass) {
+ case 0:
+ if (l == LRU_ACTIVE_FILE)
+ continue;
+ case 1:
+ if (l == LRU_INACTIVE_ANON)
+ continue;
+ case 2:
+ if (l == LRU_ACTIVE_ANON)
+ continue;
+ default:
+ break;
+ }
+ lru_pages = zone_page_state(zone, ls);
zone->lru[l].nr_scan += (lru_pages >> prio) + 1;
if (zone->lru[l].nr_scan >= nr_pages || pass > 3) {
unsigned long nr_to_scan;
@@ -2134,17 +2144,17 @@ unsigned long shrink_all_memory(unsigned
/*
* We try to shrink LRUs in 5 passes:
- * 0 = Reclaim from inactive_list only
- * 1 = Reclaim from active list but don't reclaim mapped
- * 2 = 2nd pass of type 1
- * 3 = Reclaim mapped (normal reclaim)
- * 4 = 2nd pass of type 3
+ * 0 = Reclaim unmapped inactive file pages
+ * 1 = Reclaim unmapped file pages
+ * 2 = Reclaim file and inactive anon pages
+ * 3 = Reclaim file and anon pages
+ * 4 = Second pass 3
*/
for (pass = 0; pass < 5; pass++) {
int prio;
- /* Force reclaiming mapped pages in the passes #3 and #4 */
- if (pass > 2)
+ /* Reclaim mapped pages in higher passes */
+ if (pass > 1)
sc.may_swap = 1;
for (prio = DEF_PRIORITY; prio >= 0; prio--) {
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-02-06 3:13 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-06 3:11 [PATCH 0/3] [PATCH 0/3] " Johannes Weiner
2009-02-06 3:11 ` [PATCH 1/3] swsusp: clean up shrink_all_zones() Johannes Weiner
2009-02-06 3:20 ` KOSAKI Motohiro
2009-02-06 3:11 ` [PATCH 2/3] swsusp: dont fiddle with swappiness Johannes Weiner
2009-02-06 3:21 ` KOSAKI Motohiro
2009-02-06 3:11 ` Johannes Weiner [this message]
2009-02-06 3:39 ` [PATCH 3/3][RFC] swsusp: shrink file cache first KOSAKI Motohiro
2009-02-06 4:49 ` Johannes Weiner
2009-02-06 5:59 ` KOSAKI Motohiro
2009-02-06 12:24 ` Johannes Weiner
2009-02-06 13:35 ` MinChan Kim
2009-02-06 17:15 ` MinChan Kim
2009-02-06 23:37 ` Johannes Weiner
2009-02-09 19:43 ` [patch] vmscan: rename sc.may_swap to may_unmap Johannes Weiner
2009-02-09 23:02 ` MinChan Kim
2009-02-10 10:00 ` KOSAKI Motohiro
2009-03-27 6:19 ` [PATCH] vmscan: memcg needs may_swap (Re: [patch] vmscan: rename sc.may_swap to may_unmap) Daisuke Nishimura
2009-03-27 6:30 ` KAMEZAWA Hiroyuki
2009-03-29 23:45 ` KOSAKI Motohiro
2009-03-31 0:18 ` Daisuke Nishimura
2009-03-31 1:26 ` Minchan Kim
2009-03-31 1:42 ` KAMEZAWA Hiroyuki
2009-03-31 1:48 ` KOSAKI Motohiro
2009-04-01 4:09 ` Johannes Weiner
2009-04-01 5:08 ` Daisuke Nishimura
2009-04-01 9:04 ` KAMEZAWA Hiroyuki
2009-04-01 9:11 ` KOSAKI Motohiro
2009-04-01 9:49 ` Johannes Weiner
2009-04-01 9:55 ` KOSAKI Motohiro
2009-04-01 16:03 ` Johannes Weiner
2009-03-31 1:52 ` Daisuke Nishimura
2009-02-06 21:00 ` [PATCH 3/3][RFC] swsusp: shrink file cache first Andrew Morton
2009-02-06 23:27 ` Johannes Weiner
2009-02-07 17:23 ` Rafael J. Wysocki
2009-02-08 20:56 ` Johannes Weiner
2009-02-07 4:41 ` Nigel Cunningham
2009-02-07 16:51 ` KOSAKI Motohiro
2009-02-07 21:20 ` Nigel Cunningham
2009-02-27 13:27 ` Pavel Machek
2009-03-01 10:37 ` KOSAKI Motohiro
2009-02-06 8:03 ` MinChan Kim
2009-02-06 10:06 ` MinChan Kim
2009-02-06 11:50 ` Johannes Weiner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090206031324.004715023@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=riel@redhat.com \
--cc=rjw@sisk.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox