Messages in this thread | | | Subject | nanosleep with small value | Date | Thu, 17 Nov 2005 18:30:47 +0200 | From | Dag Nygren <> |
| |
Hi,
seeing a strange thing happening here: using nanosleep() with a smallish value gives me a very long sleeptime?
Is this because of a context switch being forced? Shouldn't the scheduler change affect that?
The test program: =================================== #include <time.h> #include <sched.h> #include <stdio.h>
void delay_ns(unsigned long dly) { static struct timespec time; int err; { time.tv_sec = 0; time.tv_nsec = dly; err = nanosleep(&time, NULL); if (err) { perror( "nanosleep failed" ); } } }
main() { int i;
struct sched_param mysched; int err;
if ( sched_getparam( 0, &mysched ) != 0 ) perror( "" ); else { mysched.sched_priority = sched_get_priority_max(SCHED_FIFO); err = sched_setscheduler(0, SCHED_FIFO, &mysched); if( err != 0 ) { fprintf (stderr,"sched_setscheduler returned: %d\n", err ); perror( "" ); } }
for (i=0; i < 1000; i++) delay_ns(1000UL); } ================================== The result running this is: % time ./tst
real 0m8.000s user 0m0.000s sys 0m0.000s
I would have expected about 1000 * 1 us + overhead, but 8 seconds ????
Noticed this when trying to debug a PIC-programming software where the delay_ns() routine is used.
Increasing the nanosleep() argument to something more than HZ will give me the expected sleep times.
Best
-- Dag Nygren email: dag@newtech.fi Oy Espoon NewTech Ab phone: +358 9 8024910 Träsktorpet 3 fax: +358 9 8024916 02360 ESBO Mobile: +358 400 426312 FINLAND
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |