Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1765009AbXIMTJY (ORCPT ); Thu, 13 Sep 2007 15:09:24 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753481AbXIMTJQ (ORCPT ); Thu, 13 Sep 2007 15:09:16 -0400 Received: from pentafluge.infradead.org ([213.146.154.40]:53327 "EHLO pentafluge.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754684AbXIMTJQ (ORCPT ); Thu, 13 Sep 2007 15:09:16 -0400 Subject: Re: [announce] CFS-devel, performance improvements From: Peter Zijlstra To: Kyle Moffett Cc: Roman Zippel , Ingo Molnar , linux-kernel@vger.kernel.org, Mike Galbraith In-Reply-To: References: <20070911200459.GA6974@elte.hu> <20070913075258.GA9173@elte.hu> <20070913142842.GA26016@elte.hu> Content-Type: text/plain Date: Thu, 13 Sep 2007 21:08:50 +0200 Message-Id: <1189710530.5643.8.camel@lappy> Mime-Version: 1.0 X-Mailer: Evolution 2.11.92 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2116 Lines: 67 On Thu, 2007-09-13 at 14:28 -0400, Kyle Moffett wrote: > with the exception of one patch that's missing a changelog entry. Ah, that would have been one of mine. --- From: Peter Zijlstra Handle vruntime overflow by centering the key space around min_vruntime. Signed-off-by: Peter Zijlstra Signed-off-by: Ingo Molnar --- kernel/sched_fair.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index a306f05..b8e2a0d 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -116,11 +116,18 @@ set_leftmost(struct cfs_rq *cfs_rq, struct rb_node *leftmost) cfs_rq->rb_leftmost = leftmost; if (leftmost) { se = rb_entry(leftmost, struct sched_entity, run_node); - cfs_rq->min_vruntime = max(se->vruntime, - cfs_rq->min_vruntime); + if ((se->vruntime > cfs_rq->min_vruntime) || + (cfs_rq->min_vruntime > (1ULL << 61) && + se->vruntime < (1ULL << 50))) + cfs_rq->min_vruntime = se->vruntime; } } +s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se) +{ + return se->fair_key - cfs_rq->min_vruntime; +} + /* * Enqueue an entity into the rb-tree: */ @@ -130,7 +137,7 @@ __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) struct rb_node **link = &cfs_rq->tasks_timeline.rb_node; struct rb_node *parent = NULL; struct sched_entity *entry; - s64 key = se->fair_key; + s64 key = entity_key(cfs_rq, se); int leftmost = 1; /* @@ -143,7 +150,7 @@ __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se) * We dont care about collisions. Nodes with * the same key stay together. */ - if (key - entry->fair_key < 0) { + if (key < entity_key(cfs_rq, entry)) { link = &parent->rb_left; } else { link = &parent->rb_right; - 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/