login
Login
/
Register
Search
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2008
»
June
»
7
Re: [patch] Re: PostgreSQL pgbench performance regression in 2.6.23+
view
thread
!MAILaRCHIVE_VOTE_RePLACE
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From:
Peter Zijlstra <peterz@...>
To: Mike Galbraith <efault@...>
Cc: Greg Smith <gsmith@...>, Ingo Molnar <mingo@...>, Dhaval Giani <dhaval@...>, lkml <linux-kernel@...>, Srivatsa Vaddagiri <vatsa@...>
Subject:
Re: [patch] Re: PostgreSQL pgbench performance regression in 2.6.23+
Date: Saturday, June 7, 2008 - 9:08 am
On Sat, 2008-06-07 at 13:38 +0200, Mike Galbraith wrote: Interesting.. Looks good.
quoted text
> Index: linux-2.6.26.git/kernel/sched_fair.c > =================================================================== > --- linux-2.6.26.git.orig/kernel/sched_fair.c > +++ linux-2.6.26.git/kernel/sched_fair.c > @@ -664,6 +664,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, st > > update_stats_dequeue(cfs_rq, se); > if (sleep) { > + se->last_preempter = NULL; > update_avg_stats(cfs_rq, se); > #ifdef CONFIG_SCHEDSTATS > if (entity_is_task(se)) { > @@ -692,8 +693,10 @@ check_preempt_tick(struct cfs_rq *cfs_rq > > ideal_runtime = sched_slice(cfs_rq, curr); > delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; > - if (delta_exec > ideal_runtime) > + if (delta_exec > ideal_runtime) { > + curr->last_preempter = NULL; > resched_task(rq_of(cfs_rq)->curr); > + } > } > > static void > @@ -994,6 +997,7 @@ wake_affine(struct rq *rq, struct sched_ > unsigned int imbalance) > { > struct task_struct *curr = this_rq->curr; > + struct sched_entity *se = &curr->se, *pse = &p->se; > unsigned long tl = this_load; > unsigned long tl_per_task; > int balanced; > @@ -1002,14 +1006,26 @@ wake_affine(struct rq *rq, struct sched_ > return 0; > > /* > + * If the current task is being wakeup preempted by multiple tasks > + * that it awakened, such that it can't get significant work done > + * between preemptions, try to spread these preemption sources. > + */ > + if (sync && se->last_preempter && se->last_preempter != pse) { > + u64 se_last_exec = se->sum_exec_runtime - se->prev_sum_exec_runtime; > + > + if (se_last_exec < sysctl_sched_migration_cost) > + return 0; > + } > + > + /* > * If sync wakeup then subtract the (maximum possible) > * effect of the currently running task from the load > * of the current CPU: > */ > if (sync) > - tl -= current->se.load.weight; > + tl -= se->load.weight; > > - balanced = 100*(tl + p->se.load.weight) <= imbalance*load; > + balanced = 100*(tl + pse->load.weight) <= imbalance*load; > > /* > * If the currently running task will sleep within > @@ -1017,8 +1033,8 @@ wake_affine(struct rq *rq, struct sched_ > * woken task: > */ > if (sync && balanced && curr->sched_class == &fair_sched_class) { > - if (curr->se.avg_overlap < sysctl_sched_migration_cost && > - p->se.avg_overlap < sysctl_sched_migration_cost) > + if (se->avg_overlap < sysctl_sched_migration_cost && > + pse->avg_overlap < sysctl_sched_migration_cost) > return 1; > } > > @@ -1219,8 +1235,27 @@ static void check_preempt_wakeup(struct > pse = parent_entity(pse); > } > > - if (wakeup_preempt_entity(se, pse) == 1) > - resched_task(curr); > + if (wakeup_preempt_entity(se, pse) == 1) { > + int preempt = 1; > + > + /* > + * If current task is being prempted by multiple wakees, > + * tag it for 1:N affine wakeup preemption avoidance. > + */ > + if (se->last_preempter && se->last_preempter != pse && > + se->load.weight >= pse->load.weight) { > + u64 exec = se->sum_exec_runtime - se->prev_sum_exec_runtime; > + > + if (exec < sysctl_sched_migration_cost) > + preempt = 0; > + } > + > + if (se == ¤t->se) > + se->last_preempter = pse; > + > + if (preempt) > + resched_task(curr); > + } > } > > static struct task_struct *pick_next_task_fair(struct rq *rq) > Index: linux-2.6.26.git/include/linux/sched.h > =================================================================== > --- linux-2.6.26.git.orig/include/linux/sched.h > +++ linux-2.6.26.git/include/linux/sched.h > @@ -963,6 +963,7 @@ struct sched_entity { > > u64 last_wakeup; > u64 avg_overlap; > + struct sched_entity *last_preempter; > > #ifdef CONFIG_SCHEDSTATS > u64 wait_start; > Index: linux-2.6.26.git/kernel/sched.c > =================================================================== > --- linux-2.6.26.git.orig/kernel/sched.c > +++ linux-2.6.26.git/kernel/sched.c > @@ -2176,6 +2176,7 @@ static void __sched_fork(struct task_str > p->se.prev_sum_exec_runtime = 0; > p->se.last_wakeup = 0; > p->se.avg_overlap = 0; > + p->se.last_preempter = NULL; > > #ifdef CONFIG_SCHEDSTATS > p->se.wait_start = 0; > >
--
unsubscribe notice
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
PostgreSQL pgbench performance regression in 2.6.23+
, Greg Smith
, (Wed May 21, 1:34 pm)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 3:10 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Dhaval Giani
, (Thu May 22, 4:28 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 5:05 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 6:34 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 7:25 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Peter Zijlstra
, (Thu May 22, 7:44 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 8:09 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Peter Zijlstra
, (Thu May 22, 8:24 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Greg Smith
, (Fri May 23, 3:13 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Fri May 23, 6:00 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Ingo Molnar
, (Fri May 23, 6:10 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Fri May 23, 9:05 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Fri May 23, 9:35 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Fri May 23, 6:15 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Greg Smith
, (Fri May 23, 7:18 pm)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Fri May 23, 7:46 pm)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Greg Smith
, (Mon May 26, 8:28 pm)
[patch] Re: PostgreSQL pgbench performance regression in 2.6...
, Mike Galbraith
, (Tue May 27, 1:59 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Greg Smith
, (Fri Jun 6, 1:03 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Fri Jun 6, 2:13 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Sat Jun 7, 7:38 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Peter Zijlstra
, (Sat Jun 7, 9:08 am)
[patch part 2] Re: [patch] Re: PostgreSQL pgbench performanc...
, Mike Galbraith
, (Sat Jun 7, 10:54 am)
Re: [patch part 2] Re: [patch] Re: PostgreSQL pgbench perfor...
, Peter Zijlstra
, (Sat Jun 7, 12:12 pm)
Re: [patch part 2] Re: [patch] Re: PostgreSQL pgbench perfor...
, Mike Galbraith
, (Sat Jun 7, 1:53 pm)
Re: [patch part 2] Re: [patch] Re: PostgreSQL pgbench perfor...
, Mike Galbraith
, (Sat Jun 7, 2:19 pm)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Sat Jun 7, 8:50 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Peter Zijlstra
, (Sat Jun 7, 9:07 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Sat Jun 7, 10:16 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Peter Zijlstra
, (Sat Jun 7, 12:16 pm)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Sat Jun 7, 1:56 pm)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Tue May 27, 4:20 am)
Re: [patch] Re: PostgreSQL pgbench performance regression in...
, Mike Galbraith
, (Tue May 27, 4:35 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Sat May 24, 4:08 am)
Re: PostgreSQL pgbench performance regression in 2.6.23+
, Mike Galbraith
, (Thu May 22, 9:16 am)
Navigation
Create content
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Zach Brown
[PATCH 3 of 4] Teach paths to wake a specific void * target instead of a whole tas...
Linus Torvalds
Re: LSM conversion to static interface
Greg Kroah-Hartman
[PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO
Andrew Morton
-mm merge plans for 2.6.23
git
:
linux-netdev
:
Gregory Haskins
[RFC PATCH 00/17] virtual-bus
David Miller
[GIT]: Networking
Jarek Poplawski
Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock().
Gerrit Renker
[PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side)
openbsd-misc
:
Colocation donated by:
Who's online
There are currently
2 users
and
1036 guests
online.
Online users
vv_ivango
Jeremy
Syndicate