* hrtimer_nanosleep() weirdness...
@ 2009-10-16 19:37 Peter Barada
2009-10-17 7:53 ` michael
0 siblings, 1 reply; 2+ messages in thread
From: Peter Barada @ 2009-10-16 19:37 UTC (permalink / raw)
To: linux-omap
I'm using an hrtimer in my tsc2004 touch driver to sleep between samples
for 7.5mSec. Here's the essence of the inner loop that grabs samples:
for (;;) {
// Get a point, pass it to input_report_abs...
pen_is_down = tsc2004_get_point(d);
// If pen is up up, then break out
if (!pen_is_down || signal_pending(tsk))
break;
{
struct timespec timeout;
// sleep for 7.5 mSec (giving max 133 touch/sec)
timeout = ns_to_timespec(75 * 100 * 1000);
hrtimer_nanosleep(&timeout, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
}
}
What's really strange is when I use ts_test to measure sample rate, I
see:
OMAP-Torpedo# export TSLIB_TSDEVICE=/dev/input/event0
OMAP-Torpedo# export TSLIB_CONSOLEDEVICE=none
OMAP-Torpedo# ts_test
717.804687: 176 161 234
717.813446: 176 161 234
717.822265: 176 160 234
717.993255: 178 159 234
718.002014: 179 158 234
718.188537: 180 158 234
719.015441: 181 157 234
719.165100: 181 157 234
719.360412: 182 157 234
719.369079: 182 157 234
719.438537: 182 156 234
719.555725: 182 156 234
719.564392: 182 156 234
719.751037: 180 155 234
719.768432: 179 155 234
719.777099: 178 154 234
719.946350: 174 150 234
720.000976: 175 144 234
720.141662: 184 140 234
720.336975: 189 138 234
720.490722: 195 137 234
720.499420: 198 138 234
720.858123: 198 139 234
720.922912: 198 139 234
721.126922: 198 139 234
721.135620: 198 139 234
721.144317: 198 139 234
721.152984: 198 139 234
721.161682: 198 139 234
721.313537: 198 139 234
721.438537: 198 138 0
Which shows over 3.63 seconds 33 samples, or only 9.08 samples/second,
including a max delay of .827 seconds (719.015441 - 718.188537).
But if I "ifup eth0" to bring the networking up (and nothing else is
running), I get:
OMAP-Torpedo# ifup eth0
[sleeping 5s]...net eth0: SMSC911x/921x identified at 0xc8858000, IRQ:
289
eth0: link down
eth0: link up, 100Mbps, full-duplex
udhcpc (v1.15.1) started
Sending discover...
Sending select for 192.168.3.151...
Lease of 192.168.3.151 obtained, lease time 86400
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
OMAP-Torpedo# ts_test
735.615905: 263 140 234
735.615905: 263 140 234
735.625152: 261 141 234
735.634277: 260 141 234
735.643463: 260 141 234
735.652648: 260 142 234
735.661865: 261 142 234
735.671081: 262 141 234
735.680267: 263 141 234
735.689453: 264 140 234
735.698669: 265 139 234
735.707885: 266 139 234
735.717102: 267 138 234
735.726318: 268 138 234
735.735534: 268 138 234
735.744751: 269 137 234
735.762725: 269 137 234
735.771942: 270 137 234
735.790344: 270 136 234
735.799560: 270 136 234
735.808746: 270 136 234
735.817962: 270 136 234
735.845611: 270 136 234
735.910217: 270 136 234
735.919403: 270 136 234
735.928588: 271 136 234
735.937866: 271 136 234
735.947082: 271 136 234
735.955871: 271 136 234
735.974334: 271 136 234
735.983551: 270 136 234
736.001220: 270 136 234
736.010467: 270 136 234
736.047302: 270 136 234
736.056488: 270 136 234
736.074951: 270 137 234
736.093383: 269 137 234
736.102600: 269 137 0
Or 36 samples in 0.486695 seconds -> ~74 samples per second with an
average/deviation that is much more acceptable.
This is completely reproducible.
Any ideas why firing up the SMSC911x driver would cause
hrtimer_nanosleep() to be much more predictable?
--
Peter Barada <peterb@logicpd.com>
Logic Product Development, Inc.
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: hrtimer_nanosleep() weirdness...
2009-10-16 19:37 hrtimer_nanosleep() weirdness Peter Barada
@ 2009-10-17 7:53 ` michael
0 siblings, 0 replies; 2+ messages in thread
From: michael @ 2009-10-17 7:53 UTC (permalink / raw)
To: Peter Barada; +Cc: linux-omap
Hi,
Peter Barada wrote:
> I'm using an hrtimer in my tsc2004 touch driver to sleep between samples
> for 7.5mSec. Here's the essence of the inner loop that grabs samples:
>
> for (;;) {
> // Get a point, pass it to input_report_abs...
> pen_is_down = tsc2004_get_point(d);
>
> // If pen is up up, then break out
> if (!pen_is_down || signal_pending(tsk))
> break;
>
> {
> struct timespec timeout;
> // sleep for 7.5 mSec (giving max 133 touch/sec)
> timeout = ns_to_timespec(75 * 100 * 1000);
> hrtimer_nanosleep(&timeout, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
> }
> }
>
> What's really strange is when I use ts_test to measure sample rate, I
> see:
> OMAP-Torpedo# export TSLIB_TSDEVICE=/dev/input/event0
> OMAP-Torpedo# export TSLIB_CONSOLEDEVICE=none
> OMAP-Torpedo# ts_test
> 717.804687: 176 161 234
> 717.813446: 176 161 234
> 717.822265: 176 160 234
> 717.993255: 178 159 234
> 718.002014: 179 158 234
> 718.188537: 180 158 234
> 719.015441: 181 157 234
> 719.165100: 181 157 234
> 719.360412: 182 157 234
> 719.369079: 182 157 234
> 719.438537: 182 156 234
> 719.555725: 182 156 234
> 719.564392: 182 156 234
> 719.751037: 180 155 234
> 719.768432: 179 155 234
> 719.777099: 178 154 234
> 719.946350: 174 150 234
> 720.000976: 175 144 234
> 720.141662: 184 140 234
> 720.336975: 189 138 234
> 720.490722: 195 137 234
> 720.499420: 198 138 234
> 720.858123: 198 139 234
> 720.922912: 198 139 234
> 721.126922: 198 139 234
> 721.135620: 198 139 234
> 721.144317: 198 139 234
> 721.152984: 198 139 234
> 721.161682: 198 139 234
> 721.313537: 198 139 234
> 721.438537: 198 138 0
>
> Which shows over 3.63 seconds 33 samples, or only 9.08 samples/second,
> including a max delay of .827 seconds (719.015441 - 718.188537).
>
> But if I "ifup eth0" to bring the networking up (and nothing else is
> running), I get:
Not sure,
but I think that you have introduced a new interrupt source and you have
a pickahed of hrtimer in the irq_exit path that run sofirq.
Michael
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-10-17 7:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-16 19:37 hrtimer_nanosleep() weirdness Peter Barada
2009-10-17 7:53 ` michael
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox