On Mon, Feb 18, 2002 at 07:38:01PM +0100, Michel Dänzer wrote:
> > This must have been introduced roughly in November. I remember it worked
> > wonderfully right after Michel and I wrote the DMA patch in September, aviplay
> > was able to eat 99% and X ate nothing. I remember now this isn't a hardware
> > problem, I also had this before I upgraded the motherboard, just wasn't able
> > to reproduce it predictably (now I CAN reproduce it anytime).
> What has changed since then is that the CCE is now used for 2D
> acceleration with DRI, and the info->accel->Sync() function waits for
> the CCE to go idle.
I have a feeling you found it.

> My first question is: Can you trust top?
Basically not, but this is such a large amount and I don't understand why a
simple XSync should make a difference of 25% if it wasn't "guilty"?
Surprisingly, the numbers are rougly the same as back in August, before we
made the DMACopyStuff422, even if now I have 40% faster CPU. Don't you think
it is a strange coincidence? This would indicate that about the same real time
is being wasted waiting for something, although we got rid of the stupid
memcpy.

> Or could it be that CPU time from the client gets accounted to X?
No. It is client-independent.

> It doesn't make too much sense that whether the client 'does something' has
> influence on the amount of CPU X uses, does it?
No, it really doesn't, but if SOMETHING is calling X functions while XSync is
pending, it would explain it.

> > Zdenek's (aviplay maintainer) and my current theory is that calling the
> > XvShmPutImage returns before it is actually run.
> If you look at the code, you see that it returns after it has memcpy'd
> the data to the framebuffer (without DRI) / after it has fired the
> indirect DMA buffers for the image transfer (with DRI).
Aha, so the assumption is correct.

> > A player then does XSync, so that I can actually see the picture appear
> > on screen,
> This could be where X uses all the CPU. While waiting for the CCE to go
> idle, it can't do much but busy loop.
Why is it so more difficult to do this correctly with CCE when it worked
without? I'll look at the code.

> (The DRM uses a loop with udelay() actually; see r128_do_cce_idle() in
> r128_cce.c)
Ok, I'll grep for it and try some magic :-)

> > and calling another X function until it's finished causes X to "hang"
> > and this "eats" CPU time. 
> It might be a good idea to test if XSync alone causes the same
> behaviour.
Yes it might, but I'm too lazy, I'll simply write some code and hope it solves
the problem :-)

Mit freundlichen Grüßen

Peter Surda (Shurdeek) <[EMAIL PROTECTED]>, ICQ 10236103, +436505122023

--
         The computer revolution is over. The computers won.

Attachment: msg02890/pgp00000.pgp
Description: PGP signature

Reply via email to