From: Johannes Weiner <hannes@cmpxchg.org>
To: Minchan Kim <minchan.kim@gmail.com>
Cc: Mel Gorman <mel@csn.ul.ie>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm <linux-mm@kvack.org>,
LKML <linux-kernel@vger.kernel.org>,
Ben Gamari <bgamari.foss@gmail.com>,
Wu Fengguang <fengguang.wu@intel.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Nick Piggin <npiggin@kernel.dk>
Subject: Re: [PATCH 2/3] Reclaim invalidated page ASAP
Date: Tue, 30 Nov 2010 12:20:41 +0100 [thread overview]
Message-ID: <20101130112041.GC15564@cmpxchg.org> (raw)
In-Reply-To: <20101129224130.GA1989@barrios-desktop>
On Tue, Nov 30, 2010 at 07:41:30AM +0900, Minchan Kim wrote:
> diff --git a/mm/swap.c b/mm/swap.c
> index 19e0812..1f1f435 100644
> --- a/mm/swap.c
> +++ b/mm/swap.c
> @@ -275,28 +275,51 @@ void add_page_to_unevictable_list(struct page *page)
> * into inative list's head. Because the VM expects the page would
> * be writeout by flusher. The flusher's writeout is much effective
> * than reclaimer's random writeout.
> + *
> + * If the page isn't page_mapped and dirty/writeback, the page
> + * could reclaim asap using PG_reclaim.
> + *
> + * 1. active, mapped page -> none
> + * 2. active, dirty/writeback page -> inactive, head, PG_reclaim
> + * 3. inactive, mapped page -> none
> + * 4. inactive, dirty/writeback page -> inactive, head, PG_reclaim
> + * 5. Others -> none
> + *
> + * In 4, why it moves inactive's head, the VM expects the page would
> + * be writeout by flusher. The flusher's writeout is much effective than
> + * reclaimer's random writeout.
> */
> static void __lru_deactivate(struct page *page, struct zone *zone)
> {
> int lru, file;
> - unsigned long vm_flags;
> + int active = 0;
vm_flags is never used in this series.
> - if (!PageLRU(page) || !PageActive(page))
> + if (!PageLRU(page))
> return;
> -
> /* Some processes are using the page */
> if (page_mapped(page))
> return;
> -
> - file = page_is_file_cache(page);
> - lru = page_lru_base_type(page);
> - del_page_from_lru_list(zone, page, lru + LRU_ACTIVE);
> - ClearPageActive(page);
> - ClearPageReferenced(page);
> - add_page_to_lru_list(zone, page, lru);
> - __count_vm_event(PGDEACTIVATE);
> -
> - update_page_reclaim_stat(zone, page, file, 0);
> + if (PageActive(page))
> + active = 1;
active = PageActive(page)
> + if (PageWriteback(page) || PageDirty(page)) {
> + /*
> + * PG_reclaim could be raced with end_page_writeback
> + * It can make readahead confusing. But race window
> + * is _really_ small and it's non-critical problem.
> + */
> + SetPageReclaim(page);
> +
> + file = page_is_file_cache(page);
> + lru = page_lru_base_type(page);
> + del_page_from_lru_list(zone, page, lru + active);
> + ClearPageActive(page);
> + ClearPageReferenced(page);
> + add_page_to_lru_list(zone, page, lru);
> + if (active)
> + __count_vm_event(PGDEACTIVATE);
> + update_page_reclaim_stat(zone, page, file, 0);
> + }
If we lose the race with writeback, the completion handler won't see
PG_reclaim, won't move the page, and we have an unwanted clean cache
page on the active list. Given the pagevec caching of those pages it
could be rather likely that IO completes before the above executes.
Shouldn't this be
if (PageWriteback() || PageDirty()) {
SetPageReclaim()
move_to_inactive_head()
} else {
move_to_inactive_tail()
}
instead?
Hannes
--
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/ .
Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-11-30 11:20 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-29 15:23 [PATCH v3 0/3] f/madivse(DONTNEED) support Minchan Kim
2010-11-29 15:23 ` [PATCH v3 1/3] deactivate invalidated pages Minchan Kim
2010-11-30 1:01 ` KOSAKI Motohiro
2010-11-30 5:22 ` Johannes Weiner
2010-11-30 6:18 ` Minchan Kim
2010-11-29 15:23 ` [PATCH 2/3] Reclaim invalidated page ASAP Minchan Kim
2010-11-29 16:57 ` Mel Gorman
2010-11-29 22:41 ` Minchan Kim
2010-11-30 9:16 ` Mel Gorman
2010-11-30 14:04 ` Minchan Kim
2010-11-30 11:20 ` Johannes Weiner [this message]
2010-11-30 14:03 ` Minchan Kim
2010-11-30 1:10 ` KOSAKI Motohiro
2010-11-30 9:18 ` Mel Gorman
2010-11-30 14:01 ` Minchan Kim
2010-11-30 14:11 ` Ben Gamari
2010-11-29 15:23 ` [PATCH v3 3/3] Prevent activation of page in madvise_dontneed Minchan Kim
2010-11-30 1:08 ` KOSAKI Motohiro
2010-11-30 11:35 ` Johannes Weiner
2010-12-01 0:50 ` Minchan Kim
2010-11-30 18:34 ` Hugh Dickins
2010-12-01 0:49 ` Minchan Kim
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=20101130112041.GC15564@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=bgamari.foss@gmail.com \
--cc=fengguang.wu@intel.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=minchan.kim@gmail.com \
--cc=npiggin@kernel.dk \
/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