slow nanosleep?

From: Joakim Tjernlund
Date: Wed Sep 08 2010 - 03:50:07 EST



Hi Thomas

while playing with nanosleep I noticed that it is slow
compared to select. This little test program shows what
the effect:
#include <time.h>
#include <sys/time.h>
#include <stdio.h>
#define NANO_SLEEP 1
main()
{
struct timespec req, rem;
struct timeval tv1, tv2, tv_res;
int res;

rem.tv_sec = 0;
rem.tv_nsec = 0;

req.tv_sec = 0;
req.tv_nsec = 0;

tv2.tv_sec = req.tv_sec;
tv2.tv_usec = req.tv_nsec/1000;

gettimeofday(&tv1, NULL);
#ifdef NANO_SLEEP
res = nanosleep(&req, &rem);
#else
res = select(0, NULL,NULL,NULL, &tv2);
#endif
gettimeofday(&tv2, NULL);
timersub(&tv2, &tv1, &tv_res);
#ifdef NANO_SLEEP
printf("nanosleep\n");
#else
printf("selectsleep\n");
#endif
printf("req:%d :%d\n", (int)req.tv_sec, (int)req.tv_nsec/1000);
printf("tv_res:%d :%d\n", (int)tv_res.tv_sec, (int)tv_res.tv_usec);
}
root@localhost ~ # ./nanosleep
nanosleep
req:0 :0
tv_res:0 :119
root@localhost ~ # ./selectsleep
selectsleep
req:0 :0
tv_res:0 :36


Isn't nanosleep to slow here? The min time is about 120 us compared
to select which is 36 us. I would expect nanosleep to be better than
select.

Kernel 2.6.35 with HIGH_RES timers on Powerpc(MPC8321, 266 MHz)
x86 shows the same effect.

Jocke

--
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/