Re: Lock convoys



chris noonan wrote:
Back in the topic "Lock Free -- where to start" (October 2005),
I gave a quantitative example of how using a lock in a
multithreaded application can increase the number of
context switches the system suffers eleven-fold.

My analysis was of the form:
"Every time a thread is caught holding the lock at the expiry of
its scheduling quantum, the following bad things happen ..."

At the time, I couldn't extend the example to an application
in which thread switching is mainly I/O driven. Besides, eleven-
fold is enough to affect performance, but not to destroy it.

Recently I stumbled across this excellent article which
presents a more powerul mechanism:
http://blogs.msdn.com/sloh/archive/2005/05/27/422605.aspx

It's worth pointing out that asynchronous message passing is not
subject to lock convoys, or any similar problem. The equivalent design
in an async message passing system would have a server object in its own
thread/process that accepts messages from clients. The client threads do
not need to block in order to send messages to the server. Note that
this is also true if the clients need a result or confirmation that the
operation has completed; in that case each client will immediately
receive a "promise" for the result, and are called back when this promise
resolves, but they can handle other messages in the meantime.

The gist of it is that certain synchronisation objects impose
fairness, for example only allowing contending threads to take
a lock strictly in the order in which they blocked on it. Then
the argument becomes:
"If a thread is ever caught holding the lock at the expiry of
its scheduling quantum, even once, the following bad things
happen evermore ..."

It is not fairness that is responsible for this problem; it's blocking.
Even in a system where the main synchronization primitives do not block,
it is difficult to avoid some blocking (e.g. for GC or page faults), but
the less frequent it is, the less likely it is to cause performance
problems.

AFAICS, if two threads are involved, normal service is likely
to be resumed at the end of the next quantum. If more threads
are involved, the lock convoy persists indefinitely. The cost
of the convoy is one thread switch per lock access, which
could easily mean thousands of switches per quantum
(before taking into account the cost of the switches
themselves).

The example in the article is for Windows CE critical section,
and the article hints that the way critsec works is subject to
change. Does anyone know which other OS'es are likely to
show this behaviour?

In principle it can happen in any lock-based system; the implementation
of locks (or critical sections) only affects how likely it is to happen.

--
David Hopwood <david.nospam.hopwood@xxxxxxxxxxxxxxxx>
.



Relevant Pages

  • Re: Tech: Whirlwind target bug-like oddity
    ... the game only spots a compass target if you do ... must be completed to light Lock... ... shows what I'd expect - 3 trough switches and ramp down. ...
    (rec.games.pinball)
  • Re: Brewfest
    ... group with guildies, and we run it as many times as we're able. ... This is what I do as well, it's usually my lock, my GM's lock, another ... is done, the dual boxer switches the DK out for a rogue, and our pally ... just a matter of logging to alts and getting them summoned in. ...
    (alt.games.warcraft)
  • Re: Lock convoys
    ... context switches the system suffers eleven-fold. ... "Every time a thread is caught holding the lock at the expiry of ... its scheduling quantum, the following bad things happen ..." ... suspend/resume overhead as long as the contention is not constant. ...
    (comp.programming.threads)
  • Re: Lock Free -- where to start
    ... I know IOCP sometimes schedules more). ... connection between IOCP and lock efficiency is. ... >>> switches before the original thread gets the processor ... you need the assumption that the system can get *no* useful work ...
    (comp.programming.threads)
  • Re: An E28 wiring question.
    ... reverse polarity to make the lock go in the opposite direction. ... lock solenoid are going to be the power that tells the solenoid to push ... The wires going to the lock switches might be grounded ... to tell the locking system what the key is doing. ...
    (alt.autos.bmw)