Re: 2048 CPUs [was: Re: New filesystem for Linux]

From: Mikulas Patocka
Date: Fri Nov 10 2006 - 10:20:56 EST


Hi!

If some rogue threads (and it may not even be intetional) call the same
syscall stressing the one spinlock all the time, other syscalls needing
the same spinlock may stall.

Fortunately, they'll unstall with probability of 1... so no, I do not
think this is real problem.

You can't tell that CPUs behave exactly probabilistically --- it may
happen that one gets out of the wait loop always too late.

Well, I don't need them to be _exactly_ probabilistical.

Anyway, if you have 2048 CPUs... you can perhaps get some non-broken
ones.

No intel document guarantees you that if more CPUs simultaneously execute locked cmpxchg in a loop that a CPU will see compare success in a finite time. In fact, CPUs can't guarantee this at all, because they don't know that they're executing a spinlock --- for them its just an instruction stream like anything else.

Intel only guarantees that cmpxchg (or any other instruction) completes in finite time, but it doesn't say anything about the result of it.

If someone takes semaphore in syscall (we do), same problem may
happen, right...? Without need for 2048 cpus. Maybe semaphores/mutexes
are fair (or mostly fair) these days, but rwlocks may not be or
something.

Scheduler increases priority of sleeping process, so starving process
should be waken up first. But if there are so many processes, that
process

I do not think this is how Linux scheduler works.
Pavel

<= 2.4 scheduler worked exactly like this. 2.6 has it more complicated, but does similar thing. But you are right that starvation on semaphore can happen, if the process has too high nice value, it will never be risen above other processes.

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