On Tue, 2009-09-08 at 11:13 +0200, Jens Axboe wrote: > And here's a newer version. I tinkered a bit with your proglet and finally found the problem. You used a single pipe per child, this means the loop in run_child() would consume what it just wrote out until it got force preempted by the parent which would also get woken. This results in the child spinning a while (its full quota) and only reporting the last timestamp to the parent. Since consumer (parent) is a single thread the program basically measures the worst delay in a thundering herd wakeup of N children. The below version yields: idle [root@opteron sched]# ./latt -c8 sleep 30 Entries: 664 (clients=8) Averages: ------------------------------ Max 128 usec Avg 26 usec Stdev 16 usec make -j4 [root@opteron sched]# ./latt -c8 sleep 30 Entries: 648 (clients=8) Averages: ------------------------------ Max 20861 usec Avg 3763 usec Stdev 4637 usec Mike's patch, make -j4 [root@opteron sched]# ./latt -c8 sleep 30 Entries: 648 (clients=8) Averages: ------------------------------ Max 17854 usec Avg 6298 usec Stdev 4735 usec