Re: [PATCH 1/4] timer: Added usleep[_range] timer

From: Arjan van de Ven
Date: Wed Jul 28 2010 - 17:25:46 EST


On 7/28/2010 2:22 PM, Andrew Morton wrote:
On Wed, 28 Jul 2010 14:04:47 -0700
Arjan van de Ven<arjan@xxxxxxxxxxxxxxx> wrote:

On 7/28/2010 1:58 PM, Andrew Morton wrote:
My main concern is that someone will type usleep(50) and won't realise
that it goes and sleeps for 100 usecs and their code gets slow as a
result. This sort of thing takes *years* to discover and fix. If we'd
forced them to type usleep_range() instead, it would never have happened.



Another question: what is the typical overhead of a usleep()? IOW, at
what delay value does it make more sense to use udelay()? Another way
of asking that would be "how long does a usleep(1) take"? If it
reliably consumes 2us CPU time then we shouldn't do it.

But it's not just CPU time, is it? A smart udelay() should put the CPU
into a lower power state, so a udelay(3) might consume less energy than
a usleep(2), because the usleep() does much more work in schedule() and
friends?

for very low values of udelay() you're likely right.... but we could and
should catch that inside usleep imo and fall back to a udelay
it'll likely be 10 usec or so where we'd cut off.

now there is no such thing as a "low power udelay", not really anyway....
Yup. I can't find any arch which tries to do anything fancy.

x86's rep_nop() tries to save a bit of juice, doesn't it? Should we be
using that?

it doesn't save juice so much as it is a "yield to my hyperthreading brother"
(there is some power saved as well potentially...)

afaik we already use this in udelay() (cpu_relax is rep_nop after all)

Because we use udelay() in many places - it wouldn't surprise me if
some people's machines were consuming significant amounts of
time/energy in there, if they have suitably broken hardware or drivers.

the only real place I've seen it used (based on profiles) is in libata in the intel piix sata driver
(the non-AHCI one)... and those are completly wrong, Alan Cox had patches to fix it but those somehow went nowhere


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/