Component-Based Lock Allocation
The allocation of lock objects to critical sections in concurrent
programs affects both performance and correctness. Recent work
explores automatic lock allocation, aiming primarily to minimize
conflicts and maximize parallelism by allocating locks to individual
critical section interferences. We investigate component-based lock
allocation, which allocates locks to entire groups of interfering
critical sections. Our allocator depends on a thread-based side
effect analysis, and benefits from precise points-to and may happen in
parallel information. Thread-local object information has a small
impact, and dynamic locks do not improve significantly on static
locks. We experiment with a range of small and large Java benchmarks
on 2-way, 4-way, and 8-way machines, and find that a single static
lock is sufficient for mtrt, that performance degrades by 10% for
hsqldb, that jbb2000 becomes mostly serialized, and that for lusearch,
xalan, and jbb2005, component-based lock allocation recovers the
performance of the original program.
Greg Steffan
Last modified: Fri Aug 31 10:24:07 EDT 2007