From: Andrew Morton <akpm@osdl.org>
To: Mike Galbraith <efault@gmx.de>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu
Subject: Re: [2.6.16-rc6 patch] fix interactive task starvation
Date: Fri, 17 Mar 2006 22:22:03 -0800 [thread overview]
Message-ID: <20060317222203.06d7f450.akpm@osdl.org> (raw)
In-Reply-To: <1142661030.8937.7.camel@homer>
Mike Galbraith <efault@gmx.de> wrote:
>
> > Does this have to be a macro?
> >
>
> I suppose not, now inlined.
>
It would be nice to uninline the function and then to modify it in a
followup patch. That way, we get to see what changed, which is one of the
reasons to not use megamacros (sorry).
> +static inline int expired_starving(runqueue_t *rq)
> +{
> + int limit = STARVATION_LIMIT * rq->nr_running, starving;
> +
> + if (!limit || !rq->expired_timestamp)
> + return 0;
> + starving = jiffies - rq->expired_timestamp >= limit;
> + starving += rq->curr->static_prio > rq->best_expired_prio;
> +
> + return starving;
> +}
ick. Is that really what that macros does??
The function returns a boolean, so we should short-circuit the evaluation
where possible.
static inline int expired_starving(runqueue_t *rq)
{
int limit;
/* Comment goes here */
if (!rq->expired_timestamp)
return 0;
limit = STARVATION_LIMIT * rq->nr_running;
/* Here too */
if (!limit)
return 0;
/* And here */
if (jiffies - rq->expired_timestamp >= limit)
return 1;
/* And here */
if (rq->curr->static_prio > rq->best_expired_prio)
return 1;
/* And here */
return 0;
}
This way
a) We get somewhere to put comments describing each step of the logic.
b) We get to select the order of the comparisons in decreasing
(probability*expensiveness) order.
See how you're performing an unneeded multiplication if
!rq->expired_timestamp?
c) See how the first test of `limit' comes after that multiplication?
STARVATION_LIMIT is a constant (isn't it?) If so, we need only test
rq->nr_running.
d) The next guy who comes along has to update the comments ;)
next prev parent reply other threads:[~2006-03-18 6:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-18 5:08 [2.6.16-rc6 patch] fix interactive task starvation Mike Galbraith
2006-03-18 5:15 ` Andrew Morton
2006-03-18 5:50 ` Mike Galbraith
2006-03-18 6:22 ` Andrew Morton [this message]
2006-03-18 7:29 ` Mike Galbraith
2006-03-18 7:33 ` Andrew Morton
2006-03-18 7:48 ` Mike Galbraith
2006-03-18 7:52 ` Andrew Morton
2006-03-18 8:51 ` Ingo Molnar
2006-03-18 8:05 ` Andrew Morton
2006-03-18 8:15 ` Con Kolivas
2006-03-18 9:43 ` Mike Galbraith
2006-03-18 8:52 ` Ingo Molnar
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=20060317222203.06d7f450.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.