From: Pavel Machek <pavel@ucw.cz>
To: Arjan van de Ven <arjan@infradead.org>
Cc: Thomas Renninger <trenn@suse.de>, Willy Tarreau <w@1wt.eu>,
linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
mingo@elte.hu, peterz@infradead.org, tglx@linutronix.de,
davej@redhat.com, cpufreq@vger.kernel.org, riel@redhat.com
Subject: Re: [PATCH 8/7] cpufreq: make the iowait-is-busy-time a sysfs tunable
Date: Tue, 4 May 2010 07:43:32 +0200 [thread overview]
Message-ID: <20100504054332.GA3130@elf.ucw.cz> (raw)
In-Reply-To: <20100503204818.7b801f43@infradead.org>
On Mon 2010-05-03 20:48:18, Arjan van de Ven wrote:
> On Tue, 27 Apr 2010 13:39:34 +0200
> Thomas Renninger <trenn@suse.de> wrote:
>
> > On Friday 23 April 2010 06:08:19 pm Arjan van de Ven wrote:
> > > On Fri, 23 Apr 2010 10:50:10 +0200
> > > Thomas Renninger <trenn@suse.de> wrote:
> > > Especially on battery, users will appreciate some minutes
> > >
> > > > of more battery lifetime and do not care about some ms of IO
> > > > latencies.
> > >
> > > the assumption that power doesn't matter on AC is a huge fiction
> > > that any data center operator would love to get out of everyones
> > > head as quickly as possible.
> >
> > Have I said power doesn't matter on AC?
> > Do you agree that a datacenter has different performance vs power
> > tradeoff demands as a battery driven mobile device?
> >
> > Back to the topic:
> > As you did not answer on my (several) sysfs knob request(s), I expect
> > you agree with it and will add one.
> >
>
> yup it makes sense to have a sysfs knob with a sane default value
>
> From: Arjan van de Ven <arjan@linux.intel.com>
> Subject: [PATCH] cpufreq: make the iowait-is-busy-time a sysfs tunable
>
> Pavel Machek pointed out that not all CPUs have an efficient idle
> at high frequency. Specifically, older Intel and various AMD cpus
> would get a higher power usage when copying files from USB.
>
> Mike Chan pointed out that the same is true for various ARM chips
> as well.
>
> Thomas Renninger suggested to make this a sysfs tunable with a
> reasonable default.
>
> This patch adds a sysfs tunable for the new behavior, and uses
> a very simple function to determine a reasonable default, depending
> on the CPU vendor/type.
>
> Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
ACK.
> ---
> drivers/cpufreq/cpufreq_ondemand.c | 46 +++++++++++++++++++++++++++++++++++-
> 1 files changed, 45 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
> index ed472f8..4877e8f 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/drivers/cpufreq/cpufreq_ondemand.c
> @@ -109,6 +109,7 @@ static struct dbs_tuners {
> unsigned int down_differential;
> unsigned int ignore_nice;
> unsigned int powersave_bias;
> + unsigned int io_is_busy;
> } dbs_tuners_ins = {
> .up_threshold = DEF_FREQUENCY_UP_THRESHOLD,
> .down_differential = DEF_FREQUENCY_DOWN_DIFFERENTIAL,
> @@ -260,6 +261,7 @@ static ssize_t show_##file_name \
> return sprintf(buf, "%u\n", dbs_tuners_ins.object); \
> }
> show_one(sampling_rate, sampling_rate);
> +show_one(io_is_busy, io_is_busy);
> show_one(up_threshold, up_threshold);
> show_one(ignore_nice_load, ignore_nice);
> show_one(powersave_bias, powersave_bias);
> @@ -310,6 +312,22 @@ static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b,
> return count;
> }
>
> +static ssize_t store_io_is_busy(struct kobject *a, struct attribute *b,
> + const char *buf, size_t count)
> +{
> + unsigned int input;
> + int ret;
> + ret = sscanf(buf, "%u", &input);
> + if (ret != 1)
> + return -EINVAL;
> +
> + mutex_lock(&dbs_mutex);
> + dbs_tuners_ins.io_is_busy = !!input;
> + mutex_unlock(&dbs_mutex);
> +
> + return count;
> +}
> +
> static ssize_t store_up_threshold(struct kobject *a, struct attribute *b,
> const char *buf, size_t count)
> {
> @@ -392,6 +410,7 @@ static struct global_attr _name = \
> __ATTR(_name, 0644, show_##_name, store_##_name)
>
> define_one_rw(sampling_rate);
> +define_one_rw(io_is_busy);
> define_one_rw(up_threshold);
> define_one_rw(ignore_nice_load);
> define_one_rw(powersave_bias);
> @@ -403,6 +422,7 @@ static struct attribute *dbs_attributes[] = {
> &up_threshold.attr,
> &ignore_nice_load.attr,
> &powersave_bias.attr,
> + &io_is_busy.attr,
> NULL
> };
>
> @@ -527,7 +547,7 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
> * from the cpu idle time.
> */
>
> - if (idle_time >= iowait_time)
> + if (dbs_tuners_ins.io_is_busy && idle_time >= iowait_time)
> idle_time -= iowait_time;
>
> if (unlikely(!wall_time || wall_time < idle_time))
> @@ -643,6 +663,29 @@ static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)
> cancel_delayed_work_sync(&dbs_info->work);
> }
>
> +/*
> + * Not all CPUs want IO time to be accounted as busy; this depends on how
> + * efficient idling at a higher frequency/voltage is.
> + * Pavel Machek says this is not so for various generations of AMD and old
> + * Intel systems.
> + * Mike Chan (android.com) says this is also not true for ARM.
> + * Because of this, whitelist specific known (series) of CPUs by default, and
> + * leave all others up to the user.
> + */
> +static int should_io_be_busy(void)
> +{
> +#if defined(CONFIG_X86)
> + /*
> + * For Intel, Core 2 (model 15) and later have an efficient idle.
> + */
> + if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
> + boot_cpu_data.x86 == 6 &&
> + boot_cpu_data.x86_model >= 15)
> + return 1;
> +#endif
> + return 0;
> +}
> +
> static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
> unsigned int event)
> {
> @@ -705,6 +748,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
> dbs_tuners_ins.sampling_rate =
> max(min_sampling_rate,
> latency * LATENCY_MULTIPLIER);
> + dbs_tuners_ins.io_is_busy = should_io_be_busy();
> }
> mutex_unlock(&dbs_mutex);
>
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
next prev parent reply other threads:[~2010-05-04 5:43 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-18 18:59 [PATCH 0/7] Fix performance issue with ondemand governor Arjan van de Ven
2010-04-18 19:00 ` [PATCH 1/7] sched: add a comment to get_cpu_idle_time_us() Arjan van de Ven
2010-04-26 19:25 ` Rik van Riel
2010-04-18 19:01 ` [PATCH 2/7] sched: introduce a function to update the idle statistics Arjan van de Ven
2010-04-26 20:11 ` Rik van Riel
2010-04-18 19:01 ` [PATCH 3/7] sched: update the idle statistics in get_cpu_idle_time_us() Arjan van de Ven
2010-04-26 20:36 ` Rik van Riel
2010-04-18 19:02 ` [PATCH 4/7] sched: fold updating of the last update time into update_ts_time_stats() Arjan van de Ven
2010-04-26 20:58 ` Rik van Riel
2010-04-18 19:02 ` [PATCH 5/7] sched: eliminate the ts->idle_lastupdate field Arjan van de Ven
2010-04-26 21:00 ` Rik van Riel
2010-04-18 19:03 ` [PATCH 6/7] sched: introduce get_cpu_iowait_time_us() Arjan van de Ven
2010-04-26 21:05 ` Rik van Riel
2010-04-18 19:03 ` [PATCH 7/7] ondemand: Solve the big performance issue with ondemand during disk IO Arjan van de Ven
2010-04-19 8:29 ` Éric Piel
2010-04-19 13:43 ` Arjan van de Ven
2010-04-19 14:30 ` Éric Piel
2010-04-19 14:47 ` Arjan van de Ven
2010-04-20 9:24 ` Thomas Renninger
2010-04-27 0:29 ` Mike Chan
2010-04-27 13:01 ` Pavel Machek
2010-04-27 18:10 ` Mike Chan
2010-04-19 9:09 ` Tvrtko Ursulin
2010-04-19 13:46 ` Arjan van de Ven
2010-04-19 15:29 ` Tvrtko Ursulin
2010-04-20 0:47 ` Arjan van de Ven
2010-04-20 9:10 ` Tvrtko Ursulin
2010-04-20 11:02 ` Arjan van de Ven
2010-04-28 8:57 ` Tvrtko Ursulin
2010-04-23 5:26 ` Pavel Machek
2010-04-20 9:29 ` Thomas Renninger
2010-04-20 11:07 ` Arjan van de Ven
2010-04-23 5:24 ` Pavel Machek
2010-04-23 5:38 ` Willy Tarreau
2010-04-23 8:50 ` Thomas Renninger
2010-04-23 16:08 ` Arjan van de Ven
2010-04-27 11:39 ` Thomas Renninger
2010-05-04 3:48 ` [PATCH 8/7] cpufreq: make the iowait-is-busy-time a sysfs tunable Arjan van de Ven
2010-05-04 4:16 ` Willy Tarreau
2010-05-04 5:43 ` Pavel Machek [this message]
2010-05-04 13:51 ` Rik van Riel
2010-04-23 14:10 ` [PATCH 7/7] ondemand: Solve the big performance issue with ondemand during disk IO Arjan van de Ven
2010-04-23 15:35 ` Willy Tarreau
2010-04-23 13:52 ` Arjan van de Ven
2010-04-23 8:38 ` Pavel Machek
2010-04-23 16:06 ` Arjan van de Ven
2010-04-24 4:56 ` Pavel Machek
2010-05-01 23:29 ` Arjan van de Ven
2010-04-26 21:30 ` Rik van Riel
2010-04-26 21:41 ` [PATCH 0/7] Fix performance issue with ondemand governor Dave Jones
2010-04-26 21:45 ` Dominik Brodowski
2010-04-26 21:59 ` Rik van Riel
2010-04-26 22:05 ` Dominik Brodowski
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=20100504054332.GA3130@elf.ucw.cz \
--to=pavel@ucw.cz \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=cpufreq@vger.kernel.org \
--cc=davej@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=tglx@linutronix.de \
--cc=trenn@suse.de \
--cc=w@1wt.eu \
/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.