From: Nick Piggin <npiggin@suse.de>
To: Shailabh Nagar <nagar@watson.ibm.com>,
Hugh Dickins <hugh@veritas.com>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: [patch][rfc] delayacct: fix swapin delay accounting (maybe)
Date: Mon, 3 Sep 2007 21:58:47 +0200 [thread overview]
Message-ID: <20070903195847.GD24413@wotan.suse.de> (raw)
Hi,
I can't convince myself that delay accounting for swapin is quite right
at the moment (not having a test setup handy to run and check for myself).
Maybe I'm not reading the swapin code very well...
lookup_swap_cache, and read_swap_cache_async should be non-blocking
operations for the most part.
read_swap_cache_async might, when allocating the new page, go into reclaim
and take a long time to come back. However is that any more a "swapin" delay
than eg. when we sleep on mmap_sem when first taking the fault, or any other
types of fault which require allocations? None of which we account for as
swapin delay.
But the most obvious delay, where we actually lock the page waiting for
the swap IO to finish, does not seem to be accounted at all!
My proposed fix is to just move the swaping delay accounting to the
point where the VM does actually wait, for the swapin.
I have no idea what uses swapin delay accounting, but it would be good to
see if this makes a positive (or at least not negative) impact on those
users...
Thanks,
Nick
--
Index: linux-2.6/mm/memory.c
===================================================================
--- linux-2.6.orig/mm/memory.c
+++ linux-2.6/mm/memory.c
@@ -2158,7 +2158,6 @@ static int do_swap_page(struct mm_struct
migration_entry_wait(mm, pmd, address);
goto out;
}
- delayacct_set_flag(DELAYACCT_PF_SWAPIN);
page = lookup_swap_cache(entry);
if (!page) {
grab_swap_token(); /* Contend for token _before_ read-in */
@@ -2172,7 +2171,6 @@ static int do_swap_page(struct mm_struct
page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
if (likely(pte_same(*page_table, orig_pte)))
ret = VM_FAULT_OOM;
- delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
goto unlock;
}
@@ -2181,9 +2179,10 @@ static int do_swap_page(struct mm_struct
count_vm_event(PGMAJFAULT);
}
- delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
mark_page_accessed(page);
+ delayacct_set_flag(DELAYACCT_PF_SWAPIN);
lock_page(page);
+ delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
/*
* Back out if somebody else already faulted in this pte.
--
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 reply other threads:[~2007-09-03 19:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-03 19:58 Nick Piggin [this message]
[not found] ` <20070904064802.GA5527@mail.ustc.edu.cn>
2007-09-04 6:48 ` Fengguang Wu
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=20070903195847.GD24413@wotan.suse.de \
--to=npiggin@suse.de \
--cc=hugh@veritas.com \
--cc=linux-mm@kvack.org \
--cc=nagar@watson.ibm.com \
/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