public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Christian Meder <chris@onestepahead.de>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org, gnomemeeting-devel-list@gnome.org
Subject: Re: 2.6 vs 2.4 regression when running gnomemeeting
Date: Mon, 22 Dec 2003 02:19:23 +0100	[thread overview]
Message-ID: <1072055962.999.69.camel@localhost> (raw)
In-Reply-To: <20031221085716.GA21322@elte.hu>

On Sun, 2003-12-21 at 09:57, Ingo Molnar wrote:
> * Christian Meder <chris@onestepahead.de> wrote:
> 
> > I tried to verify your suggestion and found that the P_RTEMS symbol is
> > not defined on Linux. It seems to be some other kind of realtime
> > operating system. So the code in question already uses usleep. Now I'm
> > still digging for other occurances of sched_yield in the pwlib
> > sources.
> 
> could you try to strace -f gnomemeeting? Maybe there's no sched_yield()
> at all. Could you also try to run the non-yielding loop code via:
> 
> 	nice -19 ./loop &
> 
> do a couple of such loops still degrade gnomemeeting?

I found the culprit. It's sched_yield again. When I straced gnomemeeting
even without load I saw a lot of sched_yields. So I googled around for
2.6 and sched_yield and found among others
http://www.hpl.hp.com/research/linux/kernel/o1-openmp.php by David
Mosberger. I tried gnomemeeting with the romp hack at the end of the
article which changes all sched_yields to noops via library preloading.
The difference was _really_ impressive. No matter how many non-yield
loops and kernel compiles I ran gnomemeeting didn't even skip once.

So the questionable code in pwlib is probably: 

> BOOL PSemaphore::Wait(const PTimeInterval & waitTime)
> {
>   if (waitTime == PMaxTimeInterval) {
>     Wait();
>     return TRUE;
>   }
>                                                                                 
>   // create absolute finish time
>   PTime finishTime;
>   finishTime += waitTime;
>                                                                                 
> #ifdef P_HAS_SEMAPHORES
>                                                                                 
>   // loop until timeout, or semaphore becomes available
>   // don't use a PTimer, as this causes the housekeeping
>   // thread to get very busy
>   do {
>     if (sem_trywait(&semId) == 0)
>       return TRUE;
>                                                                                 
>     PThread::Yield(); // One time slice
>   } while (PTime() < finishTime);
>  
>   return FALSE;

Defining Yield to noop and building a new libpt solved the problem
permanently for me.

It seems that not all people have got problems with gnomemeeting and
2.6. Damien Sandras (the gnomemeeting maintainer) for example reported
that he hasn't got any problems with gnomemeeting on 2.6 while compiling
in parallel. So I guess it's depending on the frequency of sched_yields
one gets in gnomemeeting. Which is probably depending on the processor
speed, etc.

That just leaves the question what is the proper fix, to send it
upstream and to note the phenomenon down in a faq.

Thanks to all who helped me with debugging advice and if anybody needs
further information just ask.


				Christian

-- 
Christian Meder, email: chris@onestepahead.de
 
What's the railroad to me ?
I never go to see
Where it ends.
It fills a few hollows,
And makes banks for the swallows, 
It sets the sand a-blowing,
And the blackberries a-growing.
                      (Henry David Thoreau)
 





  reply	other threads:[~2003-12-22  1:23 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-19 20:11 2.6 vs 2.4 regression when running gnomemeeting Christian Meder
2003-12-19 20:32 ` William Lee Irwin III
2003-12-19 23:30   ` Christian Meder
2003-12-20  0:21     ` Nick Piggin
2003-12-20  0:37       ` Christian Meder
2003-12-20  0:48         ` Nick Piggin
2003-12-20  1:11           ` Christian Meder
2003-12-20  1:26             ` Nick Piggin
2003-12-20  1:52               ` Christian Meder
2003-12-20  2:38                 ` Nick Piggin
2003-12-20  2:55                   ` Con Kolivas
2003-12-20  3:32                     ` Christian Meder
2003-12-20  3:50                       ` Nick Piggin
2003-12-20  4:16                         ` Christian Meder
2003-12-20  4:32                           ` Nick Piggin
2003-12-20  5:15                             ` Christian Meder
2003-12-20  8:31                               ` Con Kolivas
2003-12-20 11:19                               ` Ingo Molnar
2003-12-20 16:17                                 ` Christian Meder
2003-12-20 16:49                                 ` Christian Meder
2003-12-20 17:42                                   ` Ingo Molnar
2003-12-21  1:40                                     ` Christian Meder
2003-12-21  8:57                                       ` Ingo Molnar
2003-12-22  1:19                                         ` Christian Meder [this message]
2003-12-22  1:47                                           ` Con Kolivas
2003-12-22  8:48                                           ` Ingo Molnar
2003-12-20 23:29                                   ` Nick Piggin
2003-12-20 22:20                         ` Matthias Andree
2003-12-21 19:23                           ` Jens Axboe
2003-12-22 10:54                       ` Andrew McGregor
2003-12-22 11:15                         ` Con Kolivas
2003-12-22 12:51                         ` Ingo Molnar
2003-12-22 13:25                         ` Nick Piggin
2003-12-20 19:34 ` Marc Schiffbauer
2003-12-21  1:49   ` Christian Meder

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=1072055962.999.69.camel@localhost \
    --to=chris@onestepahead.de \
    --cc=gnomemeeting-devel-list@gnome.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox