git: kernel - usched_dfly revamp (8), add reschedule hints
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Sep 25 19:19:51 PDT 2012
commit a3ef5f2ea61017aa6275c92777dc5f693f2ca494
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Sep 25 19:13:39 2012 -0700
kernel - usched_dfly revamp (8), add reschedule hints
* Add reschedule hints when issuing a read() on a pipe or socket, or
issuing a blocking kevent() call.
* usched_dfly will force a reschedule after the round-robin count has
passed the half-way point if it detects a scheduling hint. This is
an attempt to avoid rescheduling in the middle of some critical user
operation (e.g. postgres server holding internal locks).
* Add kern.usched_dfly.fast_resched which allows the scheduler to avoid
interrupting a less desireable process with a more desireable process
as long as the priority difference is not too great.
However, default the value to 0, because setting the value has
consequences for interactive responsiveness.
* When running pgbench we recommend leaving fast_resched disabled and
instead running the pgbench at idprio 15 to work around issues where
the postgres server process(es) get interrupted by the pgbench processes
which causes the postgres server process(es) to hit internal lock conflicts
more quickly and enter a semaphore wait more often (when both pgbench and
the postgres servers are running on the same machine).
This is really an issue with postgres server scaling. Because the pgbench's
use so much less cpu than the postgres server processes they are given a
more desireable priority and thus can interrupt the postgres server
processes. We can't really 'fix' this in the scheduler without really
messing up normal interactive responsiveness for the system.
Example:
idprio pgbench -j 80 -c 80 -T 60 -S bench
Summary of changes:
sys/kern/kern_event.c | 5 ++-
sys/kern/sys_pipe.c | 2 +
sys/kern/sys_socket.c | 2 +
sys/kern/usched_dfly.c | 141 ++++++++++++++++++++++++++++++++----------------
sys/sys/thread.h | 1 +
5 files changed, 104 insertions(+), 47 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/a3ef5f2ea61017aa6275c92777dc5f693f2ca494
--
DragonFly BSD source repository
More information about the Commits
mailing list