From: Shailabh Nagar <nagar@watson.ibm.com>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [Patch 1/8] Setup
Date: Thu, 30 Mar 2006 10:07:27 -0500 [thread overview]
Message-ID: <442BF42F.8020700@watson.ibm.com> (raw)
In-Reply-To: <20060329210333.2994c838.akpm@osdl.org>
Andrew Morton wrote:
>Shailabh Nagar <nagar@watson.ibm.com> wrote:
>
>
>>delayacct-setup.patch
>>
>>Initialization code related to collection of per-task "delay"
>>statistics which measure how long it had to wait for cpu,
>>sync block io, swapping etc. The collection of statistics and
>>the interface are in other patches. This patch sets up the data
>>structures and allows the statistics collection to be disabled
>>through a kernel boot paramater.
>>
>>...
>>
>>+ delayacct [KNL] Enable per-task delay accounting
>>+
>>
>>
>
>Why does this boot parameter exist?
>
>
To allow people who aren't interested in these statistics from paying the
overhead of collecting the stats for each task, the memory consumed by
per-task
accounting structures that get allocated etc.
>The code is neat-looking.
>
>
Thanks !
>>--- /dev/null 1970-01-01 00:00:00.000000000 +0000
>>+++ linux-2.6.16/kernel/delayacct.c 2006-03-29 18:12:57.000000000 -0500
>>@@ -0,0 +1,92 @@
>>+/* delayacct.c - per-task delay accounting
>>+ *
>>+ * Copyright (C) Shailabh Nagar, IBM Corp. 2006
>>+ *
>>+ * This program is free software; you can redistribute it and/or modify
>>+ * it under the terms of the GNU General Public License as published by
>>+ * the Free Software Foundation; either version 2 of the License, or
>>+ * (at your option) any later version.
>>+ *
>>+ * This program is distributed in the hope that it would be useful, but
>>+ * WITHOUT ANY WARRANTY; without even the implied warranty of
>>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
>>+ * the GNU General Public License for more details.
>>+ */
>>+
>>+#include <linux/sched.h>
>>+#include <linux/slab.h>
>>+#include <linux/time.h>
>>+#include <linux/sysctl.h>
>>+#include <linux/delayacct.h>
>>+
>>+int delayacct_on __read_mostly = 0; /* Delay accounting turned on/off */
>>
>>
>
>Yes, it should be __read_mostly. But it shouldn't be initialised to zero.
>
>
Will fix.
>
>
>>+void __delayacct_tsk_init(struct task_struct *tsk)
>>+{
>>+ tsk->delays = kmem_cache_alloc(delayacct_cache, SLAB_KERNEL);
>>+ if (tsk->delays) {
>>+ memset(tsk->delays, 0, sizeof(*tsk->delays));
>>+ spin_lock_init(&tsk->delays->lock);
>>+ }
>>+}
>>
>>
>
>We have kmem_cache_zalloc() now.
>
>
Will use.
>
>
>>+void __delayacct_tsk_exit(struct task_struct *tsk)
>>+{
>>+ if (tsk->delays) {
>>+ kmem_cache_free(delayacct_cache, tsk->delays);
>>+ tsk->delays = NULL;
>>+ }
>>+}
>>
>>
>
>delayacct_tsk_exit() already checked tsk->delays.
>
>
Oops. Will fix.
>
>
>>+/*
>>+ * Finish delay accounting for a statistic using
>>+ * its timestamps (@start, @end), accumalator (@total) and @count
>>+ */
>>+
>>+static inline void delayacct_end(struct timespec *start, struct timespec *end,
>>+ u64 *total, u32 *count)
>>+{
>>+ struct timespec ts;
>>+ nsec_t ns;
>>+
>>+ do_posix_clock_monotonic_gettime(end);
>>+ ts.tv_sec = end->tv_sec - start->tv_sec;
>>+ ts.tv_nsec = end->tv_nsec - start->tv_nsec;
>>+ ns = timespec_to_ns(&ts);
>>+ if (ns < 0)
>>+ return;
>>+
>>+ spin_lock(¤t->delays->lock);
>>+ *total += ns;
>>+ (*count)++;
>>+ spin_unlock(¤t->delays->lock);
>>+}
>>
>>
>
>It's strange to have a static inline function at the end of a .c file. I
>guess this gets used in later patches.
>
>
Yes. It gets called as part of the __delayacct_blkio_end call in a later
patch.
>It looks rather too big to be inlined.
>
>
It gets used only once currently so defining it as a separate function
was more to
aid understanding.
>I'm surprised that we don't already have a timeval_sub() function
>somewhere.
>
>
There isn't one currently though we'd added a generic function timespec_diff
in an earlier iteration of the patches
http://www.uwsg.indiana.edu/hypermail/linux/kernel/0603.1/1914.html
In the ensuing discussion (under the same thread above), the problem you
mention
below came up - whether a negative ts.tv_nsec should be returned as is
or should the
entire timespec be normalized. The consensus was that a normalized value
would be
appropriate for a generic function.
However, we didn't want to pay the extra cycles of normalizing the
return value since our
usage (using timespec_to_ns) wouldn't need it.
So we chose to remove the generic function and use the two line
subtraction directly.
Especially since we don't really care to use truly negative differences
(which shouldn't happen
since the timestamps are collected assuming monotonically increasing
values).
>The code you have there will cause ts.tv_nsec to go negative half the time.
>It looks like timespec_to_ns() will happily fix that up for us, but it's
>all a bit fragile.
>
>
If you think relying on timespec_to_ns as an "auto" normalizer is flaky,
we can go back to
introducing a timespec_sub (which is a better name than timespec_diff)
which returns a normalized
diff and use that.
--Shailabh
next prev parent reply other threads:[~2006-03-30 15:07 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-30 0:32 [Patch 0/8] per-task delay accounting Shailabh Nagar
2006-03-30 0:35 ` [Patch 1/8] Setup Shailabh Nagar
2006-03-30 5:03 ` Andrew Morton
2006-03-30 15:07 ` Shailabh Nagar [this message]
2006-03-30 0:37 ` [Patch 2/8] Block I/O, swapin delays Shailabh Nagar
2006-03-30 5:03 ` Andrew Morton
2006-03-30 15:21 ` Shailabh Nagar
2006-03-30 0:42 ` [Patch 3/8] cpu delays Shailabh Nagar
2006-03-30 5:03 ` Andrew Morton
2006-03-30 16:01 ` Shailabh Nagar
2006-03-30 16:00 ` Dave Hansen
2006-03-30 16:03 ` Shailabh Nagar
2006-03-30 0:48 ` [Patch 4/8] generic netlink utility functions Shailabh Nagar
2006-03-30 0:52 ` [Patch 5/8] generic netlink interface for delay accounting Shailabh Nagar
2006-03-30 5:04 ` Andrew Morton
2006-03-30 6:10 ` Balbir Singh
2006-03-30 6:26 ` Andrew Morton
2006-03-30 6:29 ` Balbir Singh
2006-03-30 16:24 ` Shailabh Nagar
2006-03-30 0:54 ` [Patch 6/8] virtual cpu run time Shailabh Nagar
2006-03-30 5:04 ` Andrew Morton
2006-03-30 16:10 ` Shailabh Nagar
2006-03-30 0:56 ` [Patch 7/8] proc interface for block I/O delays Shailabh Nagar
2006-03-30 5:04 ` Andrew Morton
2006-03-30 0:59 ` [Patch 8/8] documentation, userspace utility Shailabh Nagar
2006-03-30 5:03 ` [Patch 0/8] per-task delay accounting Andrew Morton
2006-03-30 6:23 ` Balbir Singh
2006-03-30 6:47 ` Andrew Morton
2006-03-30 9:55 ` Paul Jackson
2006-03-30 13:23 ` [Lse-tech] " Dipankar Sarma
2006-03-30 17:23 ` Shailabh Nagar
2006-03-31 2:54 ` Peter Chubb
2006-03-31 5:27 ` Shailabh Nagar
2006-03-31 8:17 ` Peter Chubb
2006-03-31 16:03 ` Shailabh Nagar
[not found] ` <442CCF54.3000501@watson.ibm.com>
2006-03-31 7:31 ` Guillaume Thouvenin
2006-03-31 17:01 ` Shailabh Nagar
[not found] ` <442D8E39.8080606@engr.sgi.com>
[not found] ` <442DED81.5060009@engr.sgi.com>
2006-04-10 17:15 ` Jay Lan
2006-04-10 21:44 ` Shailabh Nagar
2006-04-10 22:33 ` [Lse-tech] " Jay Lan
-- strict thread matches above, loose matches on Subject: below --
2006-04-22 2:16 Shailabh Nagar
2006-04-22 2:23 ` [Patch 1/8] Setup Shailabh Nagar
2006-04-24 2:02 ` Randy.Dunlap
2006-04-24 17:26 ` Shailabh Nagar
2006-05-02 6:12 Balbir Singh
2006-05-08 21:17 ` Andrew Morton
2006-05-09 3:48 ` Balbir Singh
2006-05-08 21:23 ` Andrew Morton
2006-05-09 3:56 ` Balbir Singh
2006-05-09 11:46 ` Thomas Gleixner
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=442BF42F.8020700@watson.ibm.com \
--to=nagar@watson.ibm.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.