From: Shailabh Nagar <nagar@watson.ibm.com>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
elsa-devel <elsa-devel@lists.sourceforge.net>,
LSE <lse-tech@lists.sourceforge.net>,
ckrm-tech <ckrm-tech@lists.sourceforge.net>
Subject: [Patch 4/6] Delay accounting: Swap in delays
Date: Tue, 03 Jan 2006 23:30:09 +0000 [thread overview]
Message-ID: <43BB0901.9050308@watson.ibm.com> (raw)
In-Reply-To: <43BB05D8.6070101@watson.ibm.com>
Changes since 12/7/05
- removed __attribute((unused)) qualifiers from timespec vars (dave hansen)
- use existing timestamping function do_posix_clock_monotonic_gettime() (jay lan)
Changes since 11/14/05
- use nanosecond resolution, adjusted wall clock time for timestamps
instead of sched_clock (akpm, andi, marcelo)
- collect stats only if delay accounting enabled (parag)
- collect delays for only swapin page faults instead of all page faults.
11/14/05: First post
delayacct-swapin.patch
Record time spent by a task waiting for its pages to be swapped in.
This statistic can help in adjusting the rss limits of
tasks (process), especially relative to each other, when the system is
under memory pressure.
Signed-off-by: Shailabh Nagar <nagar@watson.ibm.com>
include/linux/delayacct.h | 3 +++
include/linux/sched.h | 2 ++
kernel/delayacct.c | 15 +++++++++++++++
mm/memory.c | 16 +++++++++-------
4 files changed, 29 insertions(+), 7 deletions(-)
Index: linux-2.6.15-rc7/include/linux/delayacct.h
===================================================================
--- linux-2.6.15-rc7.orig/include/linux/delayacct.h
+++ linux-2.6.15-rc7/include/linux/delayacct.h
@@ -20,11 +20,14 @@
extern int delayacct_on; /* Delay accounting turned on/off */
extern void delayacct_tsk_init(struct task_struct *tsk);
extern void delayacct_blkio(struct timespec *start, struct timespec *end);
+extern void delayacct_swapin(struct timespec *start, struct timespec *end);
#else
static inline void delayacct_tsk_init(struct task_struct *tsk)
{}
static inline void delayacct_blkio(struct timespec *start, struct timespec *end)
{}
+static inline void delayacct_swapin(struct timespec *start, struct timespec *end)
+{}
#endif /* CONFIG_TASK_DELAY_ACCT */
#endif /* _LINUX_TASKDELAYS_H */
Index: linux-2.6.15-rc7/include/linux/sched.h
===================================================================
--- linux-2.6.15-rc7.orig/include/linux/sched.h
+++ linux-2.6.15-rc7/include/linux/sched.h
@@ -548,6 +548,8 @@ struct task_delay_info {
/* Add stats in pairs: uint64_t delay, uint32_t count */
uint64_t blkio_delay; /* wait for sync block io completion */
uint32_t blkio_count;
+ uint64_t swapin_delay; /* wait for pages to be swapped in */
+ uint32_t swapin_count;
};
#endif
Index: linux-2.6.15-rc7/mm/memory.c
===================================================================
--- linux-2.6.15-rc7.orig/mm/memory.c
+++ linux-2.6.15-rc7/mm/memory.c
@@ -2171,16 +2171,15 @@ static inline int handle_pte_fault(struc
old_entry = entry = *pte;
if (!pte_present(entry)) {
- if (pte_none(entry)) {
- int ret;
- struct timespec start, end;
+ int ret;
+ struct timespec start, end;
+ do_posix_clock_monotonic_gettime(&start);
+ if (pte_none(entry)) {
if (!vma->vm_ops || !vma->vm_ops->nopage)
return do_anonymous_page(mm, vma, address,
pte, pmd, write_access);
- if (vma->vm_file)
- do_posix_clock_monotonic_gettime(&start);
ret = do_no_page(mm, vma, address,
pte, pmd, write_access);
if (vma->vm_file) {
@@ -2192,8 +2191,11 @@ static inline int handle_pte_fault(struc
if (pte_file(entry))
return do_file_page(mm, vma, address,
pte, pmd, write_access, entry);
- return do_swap_page(mm, vma, address,
- pte, pmd, write_access, entry);
+ ret = do_swap_page(mm, vma, address,
+ pte, pmd, write_access, entry);
+ do_posix_clock_monotonic_gettime(&end);
+ delayacct_swapin(&start, &end);
+ return ret;
}
ptl = pte_lockptr(mm, pmd);
Index: linux-2.6.15-rc7/kernel/delayacct.c
===================================================================
--- linux-2.6.15-rc7.orig/kernel/delayacct.c
+++ linux-2.6.15-rc7/kernel/delayacct.c
@@ -50,3 +50,18 @@ inline void delayacct_blkio(struct times
current->delays.blkio_count++;
spin_unlock(¤t->delays.lock);
}
+
+inline void delayacct_swapin(struct timespec *start, struct timespec *end)
+{
+ unsigned long long delay;
+
+ if (!delayacct_on)
+ return;
+
+ delay = timespec_diff_ns(start, end);
+
+ spin_lock(¤t->delays.lock);
+ current->delays.swapin_delay += delay;
+ current->delays.swapin_count++;
+ spin_unlock(¤t->delays.lock);
+}
next prev parent reply other threads:[~2006-01-03 23:31 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-03 23:16 [Patch 0/6] Per-task delay accounting Shailabh Nagar
2006-01-03 23:23 ` [Patch 1/6] Delay accounting: timespec diff Shailabh Nagar
2006-01-03 23:26 ` [Patch 2/6] Delay accounting: Initialization, kernel boot option Shailabh Nagar
2006-01-03 23:28 ` [Patch 3/6] Delay accounting: Sync block I/O delays Shailabh Nagar
2006-01-03 23:30 ` Shailabh Nagar [this message]
2006-01-03 23:31 ` [Patch 5/6] Delay accounting: /proc interface Shailabh Nagar
2006-01-03 23:33 ` [Patch 6/6] Delay accounting: Connector interface Shailabh Nagar
2006-01-04 0:21 ` Greg KH
2006-01-04 0:42 ` Shailabh Nagar
2006-01-04 0:51 ` Greg KH
2006-01-04 7:49 ` [Lse-tech] " Shailabh Nagar
2006-01-04 19:04 ` Jay Lan
2006-01-04 21:31 ` Shailabh Nagar
2006-01-04 22:40 ` [ckrm-tech] " Matt Helsley
2006-01-04 23:17 ` Andrew Morton
2006-01-05 18:42 ` [PATCH 00/01] Move Exit Connectors Matt Helsley
2006-01-05 19:17 ` [PATCH 01/01][RFC] " Matt Helsley
2006-01-05 19:20 ` [PATCH 00/01] " Matt Helsley
2006-01-05 23:10 ` Andrew Morton
2006-01-06 0:06 ` [ckrm-tech] " Matt Helsley
2006-01-06 8:57 ` [Lse-tech] " Jes Sorensen
2006-01-06 16:45 ` Shailabh Nagar
2006-01-11 10:36 ` Jes Sorensen
2006-01-11 12:56 ` John Hesterberg
2006-01-11 13:50 ` Jes Sorensen
2006-01-11 21:02 ` Matt Helsley
2006-01-11 21:39 ` John Hesterberg
2006-01-11 22:42 ` Matt Helsley
2006-01-12 10:01 ` Jes Sorensen
2006-01-12 23:20 ` Matt Helsley
2006-01-13 9:35 ` Jes Sorensen
2006-01-14 7:23 ` Matt Helsley
2006-01-12 3:29 ` Keith Owens
2006-01-12 5:04 ` Paul E. McKenney
2006-01-12 5:38 ` Keith Owens
2006-01-12 6:19 ` Keith Owens
2006-01-12 6:51 ` Paul E. McKenney
2006-01-12 7:50 ` Keith Owens
2006-01-12 15:17 ` Paul E. McKenney
2006-01-17 17:26 ` Paul E. McKenney
2006-01-17 23:57 ` Keith Owens
2006-01-18 2:49 ` Paul E. McKenney
2006-01-18 2:55 ` Lee Revell
2006-01-18 6:29 ` Paul E. McKenney
2006-01-12 5:26 ` Matt Helsley
2006-01-12 5:45 ` Keith Owens
2006-01-12 9:51 ` Jes Sorensen
2006-01-12 23:01 ` Matt Helsley
2006-01-13 9:59 ` Jes Sorensen
2006-01-13 10:38 ` Jes Sorensen
2006-01-13 23:22 ` Matt Helsley
2006-01-12 23:49 ` Matt Helsley
2006-01-05 0:01 ` [ckrm-tech] Re: [Patch 6/6] Delay accounting: Connector interface Shailabh Nagar
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=43BB0901.9050308@watson.ibm.com \
--to=nagar@watson.ibm.com \
--cc=akpm@osdl.org \
--cc=ckrm-tech@lists.sourceforge.net \
--cc=elsa-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lse-tech@lists.sourceforge.net \
/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