2011/2/26 Phillip Susi psusi@cfl.rr.com:
On 02/26/2011 03:09 AM, Michel Dänzer wrote:
On Fre, 2011-02-25 at 12:11 -0500, Phillip Susi wrote:
It seems like the GPU is executing a few different microcode kernels that process commands placed into ring buffers. When the ring buffers are empty and the gui is idle, it seems like the GPU is still busily executing an infinite loop checking for work in the ring buffers.
As has been pointed out by Alex, that's not true to the best of our knowledge.
I wonder how that is though. I see nothing in the R600 microcode documentation about a way to halt execution, and it explicitly says it does not support interrupts, so I don't see any way for the CP to avoid busy waiting other than to be explicitly stopped by the driver.
Changing the wptr is a trigger to start the cp. When the rptr and wptr are equal the cp is idle. See chapter 5 of the r5xx acceleration guide as I mentioned earlier.
Shouldn't the driver detect the idle condition and issue an r600_cp_stop() to halt execution and stop wasting power?
Feel free to try it, but I wouldn't expect it to make much if any difference.
I tried adding a debugfs file to call it and it didn't seem to make any difference.
Did you check that your card runs significantly cooler in the other OS before starting all this ruckus? (Though even if it does, the lack of clock gating might explain the difference)
I don't even have a working copy of the other OS any more. It is on my old first gen WD raptor fakeraid 0 that the new system's bios and Windows driver won't recognize. Now that you mention it though, I do think it always tended to run hot there and I usually underclocked it a bit to try and help. Maybe I just have a poorly designed card with insufficient heatsink+fan?
It's possible. The default clocks are designed to be safe however even if the temperature seems a bit high.
It seems like clock gating, while helpful to maximize power savings, should not be needed to stay below critical temperatures when idle.
Strange. This morning it seems to be running at "only" 66 C instead of 80+.
Make sure you clean out the fan and heatsink if a lot of dust has built up in there.
Alex