lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20100913174533.GA15653@Krystal>
Date:	Mon, 13 Sep 2010 13:45:33 -0400
From:	Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To:	Linus Torvalds <torvalds@...ux-foundation.org>
Cc:	Peter Zijlstra <peterz@...radead.org>,
	LKML <linux-kernel@...r.kernel.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Ingo Molnar <mingo@...e.hu>,
	Steven Rostedt <rostedt@...dmis.org>,
	Thomas Gleixner <tglx@...utronix.de>,
	Tony Lindgren <tony@...mide.com>,
	Mike Galbraith <efault@....de>
Subject: Re: [RFC PATCH] check_preempt_tick should not compare vruntime
	with wall time

* Linus Torvalds (torvalds@...ux-foundation.org) wrote:
> On Mon, Sep 13, 2010 at 9:16 AM, Mathieu Desnoyers
> <mathieu.desnoyers@...icios.com> wrote:
> >
> > OK, the long IRC discussions we just had convinced me that the current scheme
> > takes things into account by adapting the granularity dynamically, but also got
> > me to notice that check_preempt seems to compare vruntime with wall time, which
> > is utterly incorrect. So maybe all my patch was doing was to expose this bug:
> 
> Do you have latency numbers for this patch?

Sure, see below,

In addition to this patch, I also used Peter's approach of reducing the minimum
granularity (given that now I am confident that the value of
sysctl_sched_min_granularity won't affect the preemption granularity directly,
but rather indirectly through the period length). The result, succinctly, is
that just the "check_preempt" fix does not seem to do much difference in terms
of fork wakeup latency (the results below give an order of magnitude, but should
be taken with a grain of salt due to the noise). I ran 3 the tests 3 times each,
and took the average, but there is clearly some noise.

FWIW, Xorg and firefox feel _much more_ responsive with the fix I propose when
running with a make -j10. The system is even usable with a make -j20 on my UP
machine, even though I can start feeling a some lag. This is probably a more
important, yet less scientific, result.

It turns out that the min_granularity value (and hence the associated nr_latency
values) have been brought from 20 down to 5
(commit 722aab0c3bbd7648d66790515c14d95d10a15bf3), and then down to 3 lately
(commit 21406928afe43f1db6acab4931bb8c886f4d04ce). I would not be surprised that
this last change might have been trying to hide the vruntime vs wall time
comparison bug, which has been introduced in
commit f685ceacab07d3f6c236f04803e2f2f0dbcc5afb.


2.0GHz Pentium M

* wakeup-latency.c (SIGEV_THREAD) with make -j10 

- Mainline 2.6.35.2 kernel

maximum latency: 45762.1 µs
average latency: 7348.6 µs
missed timer events: 0

- check_preempt fix

maximum latency: 39858.9 µs
average latency: 7728.1 µs
missed timer events: 0

- With only Peter's smaller min_gran (shown below):

maximum latency: 29100.6 µs
average latency: 6684.1 µs
missed timer events: 0

- check_preempt fix + Peter's smaller min_gran:
maximum latency: 20433.0 µs
average latency: 5112.5 µs
missed timer events: 0

Thanks,

Mathieu


Diminish min granularity patch:

---
 kernel/sched_fair.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6-lttng.git/kernel/sched_fair.c
===================================================================
--- linux-2.6-lttng.git.orig/kernel/sched_fair.c
+++ linux-2.6-lttng.git/kernel/sched_fair.c
@@ -54,13 +54,13 @@ enum sched_tunable_scaling sysctl_sched_
  * Minimal preemption granularity for CPU-bound tasks:
  * (default: 2 msec * (1 + ilog(ncpus)), units: nanoseconds)
  */
-unsigned int sysctl_sched_min_granularity = 2000000ULL;
-unsigned int normalized_sysctl_sched_min_granularity = 2000000ULL;
+unsigned int sysctl_sched_min_granularity = 750000ULL;
+unsigned int normalized_sysctl_sched_min_granularity = 750000ULL;
 
 /*
  * is kept at sysctl_sched_latency / sysctl_sched_min_granularity
  */
-static unsigned int sched_nr_latency = 3;
+static unsigned int sched_nr_latency = 8;
 
 /*
  * After fork, child runs first. If set to 0 (default) then

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ