Messages in this thread | | | Date | Thu, 1 Jul 1999 15:23:10 +0200 (CEST) | From | Ingo Molnar <> | Subject | Re: Any documentation anywhere on the new wait.h? |
| |
On Thu, 1 Jul 1999, Hans Reiser wrote:
> The wait_queue stuff has changed, and I find stuff like the field > compiler_warning to be cryptic. There are no comments on the > datastructures.... > > Anybody know what has changed, and what the basic idea is behind the new > stuff in 2.3.8?
there have been four major changes/goals wrt. the waitqueues changes:
1) waitqueue heads were separated from waitqueue entries, data-structure wise. Formerly the head was a pointer, which was not generic enough, see later.
2) the waitqueue list has been changed to be a double-linked never-zero ringlist. This has obvious micro-speed and algorithmical scaling benefits, formerly remove_from_wait_queue() had to potentially traverse all the waitqueue to remove a single entry. Now it's all O(1).
3) the generic datastructures enabled us to add per-waitqueue spinlocks which makes us scale better on SMP. Particularly __wake_up() tends to hold the waitqueue lock while doing other stuff (well, waking up processes), so this is a definit win. It was also easy and seemless due to the generic data structures. The spinlock architecture is atm. 'dual', which means that it can be switched between readwrite and 'simple' spinlocks via a define. The 'simple' version was benchmarked to perform better, that one will probably stick and the rw-version will be removed.
4) all these changes enabled to implement the primary goal that triggered all these changes and cleanups: it was possible to add wake-one semantics for wakeup() in a clean way. (see the TASK_EXCLUSIVE stuff)
compiler_warning is there to make old code generate more warning messages when you old-style initialize waitqueues.
the debugging stuff will be removed before 2.4 - the frequency of waitqueue-related bugs is already very low. There is still some small benchmarking work to be done wrt. the wakeup order of exclusive tasks.
-- mingo
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |