From: Dimitri Sivanich <sivanich@sgi.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
John Stultz <johnstul@us.ibm.com>
Subject: Re: [PATCH] specific do_timer_cpu value for nohz off mode
Date: Fri, 2 Sep 2011 14:29:58 -0500 [thread overview]
Message-ID: <20110902192958.GB30665@sgi.com> (raw)
In-Reply-To: <alpine.LFD.2.02.1109021015290.2723@ionos>
On Fri, Sep 02, 2011 at 10:19:36AM +0200, Thomas Gleixner wrote:
> On Tue, 23 Aug 2011, Dimitri Sivanich wrote:
> > On Wed, Aug 17, 2011 at 06:47:43PM +0200, Thomas Gleixner wrote:
> > > On Wed, 17 Aug 2011, Dimitri Sivanich wrote:
> > While not necessarily harmful, doing jiffies updates on an application cpu
> > does cause some extra overhead that HPC benchmarking people notice. They
> > prefer to have OS activity isolated to certain cpus. They like reproducibility
> > of results, and having jiffies updates bouncing around introduces variability.
> >
> > Maybe this is useful for other folks as well? It does give an indication
> > of which cpu is currently doing jiffies updates.
> >
> > The patch below puts the file in /proc/sys/kernel, but if you think it should be in
> > /sys, please let me know where you'd like to see it.
>
> /sys/devices/system/timekeeping/timekeeping0/....
>
> Please
>
/sys/devices/system/timekeeping/timekeeping0/jiffies_cpu
Allow manual override of the tick_do_timer_cpu.
Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
---
kernel/time/tick-sched.c | 98 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 98 insertions(+)
Index: linux/kernel/time/tick-sched.c
===================================================================
--- linux.orig/kernel/time/tick-sched.c
+++ linux/kernel/time/tick-sched.c
@@ -815,6 +815,104 @@ void tick_cancel_sched_timer(int cpu)
}
#endif
+
+#ifdef CONFIG_SYSFS
+/**
+ * sysfs_show_do_timer_cpu - sysfs interface for tick_do_timer_cpu
+ * @dev: unused
+ * @buf: char buffer where value of tick_do_timer_cpu is copied
+ *
+ * Provides sysfs interface for showing the current tick_do_timer_cpu.
+ */
+static ssize_t
+sysfs_show_do_timer_cpu(struct sys_device *dev,
+ struct sysdev_attribute *attr, char *buf)
+{
+ ssize_t count = 0;
+
+ count = snprintf(buf, PAGE_SIZE, "%d\n", tick_do_timer_cpu);
+
+ return count;
+}
+
+/**
+ * sysfs_override_do_timer_cpu - manually override tick_do_timer_cpu
+ * @dev: unused
+ * @buf: cpu number of desired tick_do_timer_cpu
+ * @count: length of buffer
+ *
+ * Takes input from sysfs interface for manually overriding the selected
+ * tick_do_timer_cpu. Only applicable when not running in nohz mode.
+ */
+static ssize_t
+sysfs_override_do_timer_cpu(struct sys_device *dev,
+ struct sysdev_attribute *attr,
+ const char *buf, size_t count)
+{
+ char b[16];
+ size_t ret = count;
+ int c;
+
+#ifdef CONFIG_NO_HZ
+ /* nohz mode not supported */
+ if (tick_nohz_enabled)
+ return -EINVAL;
+#endif
+ /* strings from sysfs write are not 0 terminated! */
+ if (count >= sizeof(b))
+ return -EINVAL;
+
+ /* strip off \n: */
+ if (buf[count-1] == '\n')
+ count--;
+ if (count < 1)
+ return -EINVAL;
+
+ memcpy(b, buf, count);
+ b[count] = 0;
+
+ if (sscanf(b, "%d", &c) != 1)
+ return -EINVAL;
+
+ if (!cpu_online(c))
+ return -EINVAL;
+
+ tick_do_timer_cpu = c;
+
+ return ret;
+}
+
+/*
+ * Sysfs setup bits:
+ */
+static SYSDEV_ATTR(jiffies_cpu, 0644, sysfs_show_do_timer_cpu,
+ sysfs_override_do_timer_cpu);
+
+static struct sysdev_class timekeeping_sysclass = {
+ .name = "timekeeping",
+};
+
+static struct sys_device device_timekeeping = {
+ .id = 0,
+ .cls = &timekeeping_sysclass,
+};
+
+static int __init init_timekeeping_sysfs(void)
+{
+ int error = sysdev_class_register(&timekeeping_sysclass);
+
+ if (!error)
+ error = sysdev_register(&device_timekeeping);
+ if (!error)
+ error = sysdev_create_file(
+ &device_timekeeping,
+ &attr_jiffies_cpu);
+ return error;
+}
+
+device_initcall(init_timekeeping_sysfs);
+#endif /* SYSFS */
+
/**
* Async notification about clocksource changes
*/
next prev parent reply other threads:[~2011-09-02 19:30 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-17 16:07 [PATCH] specific do_timer_cpu value for nohz off mode Dimitri Sivanich
2011-08-17 16:47 ` Thomas Gleixner
2011-08-23 19:56 ` Dimitri Sivanich
2011-09-02 8:19 ` Thomas Gleixner
2011-09-02 19:29 ` Dimitri Sivanich [this message]
2011-09-02 19:57 ` Thomas Gleixner
2011-09-02 20:39 ` Dimitri Sivanich
-- strict thread matches above, loose matches on Subject: below --
2011-11-08 19:11 Dimitri Sivanich
2011-11-23 0:08 ` Andrew Morton
2011-11-30 15:29 ` Dimitri Sivanich
2011-12-01 0:11 ` Andrew Morton
2011-12-01 0:16 ` Andrew Morton
2011-12-01 2:07 ` Dimitri Sivanich
2011-12-01 2:13 ` Andrew Morton
2011-12-01 16:37 ` Dimitri Sivanich
2011-12-01 22:56 ` Andrew Morton
2011-12-02 20:14 ` Dimitri Sivanich
2011-12-02 20:22 ` Dimitri Sivanich
2011-12-02 22:42 ` Thomas Gleixner
2011-12-01 2:06 ` Dimitri Sivanich
2011-12-01 2:12 ` Andrew Morton
2011-12-01 2:34 ` Dimitri Sivanich
2011-12-01 2:38 ` Andrew Morton
2012-01-15 13:46 ` Mike Galbraith
2012-01-15 14:04 ` Mike Galbraith
2012-01-15 14:23 ` Mike Galbraith
2012-01-25 11:27 ` Mike Galbraith
2012-02-15 14:16 ` Thomas Gleixner
2012-02-15 14:37 ` Dimitri Sivanich
2012-02-15 14:52 ` Thomas Gleixner
2012-02-15 15:34 ` Dimitri Sivanich
2012-02-15 20:36 ` Thomas Gleixner
2012-02-16 14:59 ` Dimitri Sivanich
2011-08-03 19:57 Dimitri Sivanich
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=20110902192958.GB30665@sgi.com \
--to=sivanich@sgi.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/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.