[kaffe] Kaffe fast locks against slower locks
Guilhem Lavaux
guilhem at kaffe.org
Tue Mar 1 09:15:14 PST 2005
Hi,
I've been quite busy these latter days so I haven't yet a patch ready
for locks. Here is a summary of the problems/solutions:
* currently kaffe uses a fast lock mechanism which needs to work to get
a unique pointer for each thread. These pointer represents the holder.
The stack pointer is a good candidate and it gives also the possibility
to handle quickly recursive locks (when there are not contended).
* However there are two drawbacks (at least):
1) getHeavyLock is really slow because it uses a ksem semaphore in
timeout mode. It also looks to me a bit unreliable because this is the
same semaphore that is used for waking up locked threads. So the wrong
thread may be catching the signal (I haven't really analyzed fully the
code at this place so it may not be the case but a timeout is really bad
anyway for a lock).
Solution: use a specific heavy semaphore lock however all threads must
be aware of it at the time it is used.
2) More problematic I've noticed that the JNI calls MonitorEnter and
MonitorExit uses lockObject and so the stack pointers to handle
recursive locks. This is not _right_ and even buggy in most cases as the
stack is rewinded when lockObject exits. The specification says also
that we must really take care of the number of times monitorenter has
been called.
Solution: use a real counter and not the stack pointer as the fast lock
mechanism does not track the number of times MonitorEnter and
MonitorExit has been called.
Consequence: Either we use a standard pthread lock mechanism and locks.c
transforms into a simple adaptative layer for jmutex_* and jcondvar_*
functions (and so we must update jthreads' functions because they do not
support recursive locks), or we keep the ksem implementation but
implement a "not so fast" locking mechanism with also two layers
(contended and not contended) and we give up stack pointers handling.
I have already begun modifying locks.c in case we're ok to keep ksem's
implementation.
Any suggestion ? Any problems ? Any improvements ?
Cheers,
Guilhem.
More information about the kaffe
mailing list