Messages in this thread | | | Date | Tue, 18 Jun 2002 14:21:52 -0400 (EDT) | From | "Richard B. Johnson" <> | Subject | RE: Question about sched_yield() |
| |
On Tue, 18 Jun 2002 mgix@mgix.com wrote:
> > > It's all in the accounting. Use usleep(0) if you want it to "look good". > > > Two things: > > 1. First, I think there's a misunderstanding on what my > original issue was: I am not interested in any way by > CPU cycle accounting, and wether the yielding loop should > log any of it. All I want is: when I run a bunch of > yielders and a actual working process, I want the > working process to not be slown down (wall clock) in > anyway. That's all. What top shows is of little interest > (to me). What matters is how many real world seconds it takes > for the actually working process to complete its task. > And that should not be affected by the presence of running > yielders. And, David, no one is arguing the fact that a yielder > running all by itself should log 100% of the CPU. >
Well the problem seems to be an inconsistancy I reported to 'the list' some time ago. As I recall, Ingo replied that I should use usleep(0) and the problem I reported would "go away". It did go away. However, if you run this on a single-processor machine, 'top' will show that each task gets 99+ percent of the CPU, which of course can't be correct.
#include <stdio.h> #include <string.h> #include <unistd.h>
int main(int c, char *argv[]) { if(!fork()) { strcpy(argv[0], "Child"); for(;;) ; } strcpy(argv[0], "Parent");
for(;;) sched_yield();
return c; }
So, it seems that the guy that's yielding the CPU gets 'charged' for the CPU time he gave away. Fair enough, I guess. As I see it, sched_yield() will give the CPU to any single computible task once. After this, the caller gets the CPU back whether or not he wants it.
> 2. I have a question about usleep(0). You seem to make the point > that usleep(0) is equivalent to sched_yield(). I can see how > intuitively this should be the case, but I am not sure if it > will always be true. It's certainly documented anywhere. >
No. I did not mention or imply "equivalent", only that you can use it instead, in many, perhaps most, instances.
Cheers, Dick Johnson
Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).
Windows-2000/Professional isn't.
- 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/
| |