From: Gilad Ben-Yossef <gilad@benyossef.com>
To: linux-kernel@vger.kernel.org
Cc: Gilad Ben-Yossef <gilad@benyossef.com>,
Thomas Gleixner <tglx@linutronix.de>, Tejun Heo <tj@kernel.org>,
John Stultz <johnstul@us.ibm.com>,
Andrew Morton <akpm@linux-foundation.org>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Mel Gorman <mel@csn.ul.ie>, Mike Frysinger <vapier@gentoo.org>,
David Rientjes <rientjes@google.com>,
Hugh Dickins <hughd@google.com>,
Minchan Kim <minchan.kim@gmail.com>,
Konstantin Khlebnikov <khlebnikov@openvz.org>,
Christoph Lameter <cl@linux.com>,
Chris Metcalf <cmetcalf@tilera.com>,
Hakan Akkan <hakanakkan@gmail.com>,
Max Krasnyansky <maxk@qualcomm.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
linux-mm@kvack.org
Subject: [PATCH v1 0/6] reduce workqueue and timer noise
Date: Thu, 3 May 2012 17:55:56 +0300 [thread overview]
Message-ID: <1336056962-10465-1-git-send-email-gilad@benyossef.com> (raw)
Timers and work queues both provide a useful way to defer work
for a later time or a different context. However, when the
timer or work item runs, it interrupts the CPU it is running on.
This is good if it is doing useful work, but it turns out this
is not always the case.
This patch set tries to locate and address code paths where work queues
items and timers are scheduled on CPUs where they have no useful work
to do and adapet them to be more selective.
This includes:
- Introducing helper function to schedule work queue items on a subset
of CPUs in the system.
- Use the helper function to schedule work items to attempt to drain
LRUs only on CPUs where there are LRU pages.
- Stop running the per cpu work item that does per-cpu pages reclaim
and VM statistics on CPUs that did not have any VM activity for the
last second (time frame configurable) and re-start it when VM
activity is detected.
- Fix a bug that prevented the timer code to to not program the
underlying HW timer to fire periodically when no future timer
event exists for a CPU
Changelog:
- The vmstat_update patch was changed to use a scapegoat CPU as
suggested by Christoph Lameter when the patch was previously
discussed in response to Frederic Weisbecker's adaptive tick
patch set.
Also included is a testing only patch, not intdented for mainline,
that turns the clock source watchdog into a config option which
I used while testing the timer code fix change.
The patch was boot tested on 32bit x86 in 8 way SMP and UP VMs.
For you reference, I keep a todo list for these and other noise sources
at: https://github.com/gby/linux/wiki
The git branched can be fetched from the git repo at
git@github.com:gby/linux.git on the reduce_workqueue_and_timers_noise_v1
branch
Gilad Ben-Yossef (6):
timer: make __next_timer_interrupt explicit about no future event
workqueue: introduce schedule_on_each_cpu_mask
workqueue: introduce schedule_on_each_cpu_cond
mm: make lru_drain selective where it schedules work
mm: make vmstat_update periodic run conditional
x86: make clocksource watchdog configurable (not for mainline)
arch/x86/Kconfig | 9 +++-
include/linux/vmstat.h | 2 +-
include/linux/workqueue.h | 4 ++
kernel/time/clocksource.c | 2 +
kernel/timer.c | 31 ++++++++++-----
kernel/workqueue.c | 73 ++++++++++++++++++++++++++++++----
mm/swap.c | 25 +++++++++++-
mm/vmstat.c | 95 ++++++++++++++++++++++++++++++++++++++-------
8 files changed, 204 insertions(+), 37 deletions(-)
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Tejun Heo <tj@kernel.org>
CC: John Stultz <johnstul@us.ibm.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Mel Gorman <mel@csn.ul.ie>
CC: Mike Frysinger <vapier@gentoo.org>
CC: David Rientjes <rientjes@google.com>
CC: Hugh Dickins <hughd@google.com>
CC: Minchan Kim <minchan.kim@gmail.com>
CC: Konstantin Khlebnikov <khlebnikov@openvz.org>
CC: Christoph Lameter <cl@linux.com>
CC: Chris Metcalf <cmetcalf@tilera.com>
CC: Hakan Akkan <hakanakkan@gmail.com>
CC: Max Krasnyansky <maxk@qualcomm.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: linux-kernel@vger.kernel.org
CC: linux-mm@kvack.org
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2012-05-03 14:57 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-03 14:55 Gilad Ben-Yossef [this message]
2012-05-03 14:55 ` [PATCH v1 1/6] timer: make __next_timer_interrupt explicit about no future event Gilad Ben-Yossef
2012-05-04 12:04 ` Frederic Weisbecker
2012-05-04 12:20 ` Frederic Weisbecker
2012-05-25 20:48 ` Thomas Gleixner
2012-05-25 20:56 ` Chris Metcalf
2012-05-25 21:04 ` Thomas Gleixner
2012-05-03 14:55 ` [PATCH v1 2/6] workqueue: introduce schedule_on_each_cpu_mask Gilad Ben-Yossef
2012-05-04 4:44 ` Srivatsa S. Bhat
2012-05-03 14:55 ` [PATCH v1 3/6] workqueue: introduce schedule_on_each_cpu_cond Gilad Ben-Yossef
2012-05-03 15:39 ` Tejun Heo
2012-05-06 13:15 ` Gilad Ben-Yossef
2012-05-07 17:17 ` Tejun Heo
2012-05-09 14:26 ` Gilad Ben-Yossef
2012-05-04 4:51 ` Srivatsa S. Bhat
2012-05-06 13:16 ` Gilad Ben-Yossef
2012-05-03 14:56 ` [PATCH v1 4/6] mm: make lru_drain selective where it schedules work Gilad Ben-Yossef
2012-05-03 14:56 ` [PATCH v1 5/6] mm: make vmstat_update periodic run conditional Gilad Ben-Yossef
2012-05-07 15:29 ` Christoph Lameter
2012-05-07 19:33 ` KOSAKI Motohiro
2012-05-07 19:40 ` Christoph Lameter
2012-05-08 15:25 ` Gilad Ben-Yossef
2012-05-08 15:34 ` Christoph Lameter
2012-05-09 14:26 ` Gilad Ben-Yossef
2012-05-08 15:22 ` Gilad Ben-Yossef
2012-05-08 15:18 ` Gilad Ben-Yossef
2012-05-08 15:24 ` Christoph Lameter
2012-05-03 14:56 ` [PATCH v1 6/6] x86: make clocksource watchdog configurable (not for mainline) Gilad Ben-Yossef
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=1336056962-10465-1-git-send-email-gilad@benyossef.com \
--to=gilad@benyossef.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=cmetcalf@tilera.com \
--cc=fweisbec@gmail.com \
--cc=hakanakkan@gmail.com \
--cc=hughd@google.com \
--cc=johnstul@us.ibm.com \
--cc=khlebnikov@openvz.org \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=maxk@qualcomm.com \
--cc=mel@csn.ul.ie \
--cc=minchan.kim@gmail.com \
--cc=rientjes@google.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=vapier@gentoo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox