[Vm-dev] Slow Unix socket write()s?

Andreas Raab andreas.raab at gmx.de
Wed Feb 18 04:22:32 UTC 2009

Hi John -

Good points, but we've long given up on MessageTally and replaced it 
with our own SystemProfiler and I do really trust its results. So the 
question still stands: Why could write() possibly be so slow?

   - Andreas

John M McIntosh wrote:
> mmm I do need to ask how do you know the measurements are correct? Well 
> assuming you  used message tally?
> I noticed in some benchmarking of object file out that it was saying 20% 
> of the time in this case 24 SECONDS was taken up
> in SystemDictionary(IdentityDictionary)>>scanFor:    in looking at why 
> by adding a method to SystemDictionary and collecting information
> about the number of objects been looked for, and how many milliseconds I 
> came to the conclusion that message tally was lying, there
> was only 90 some usages, accounting for 0 milliseconds.
> However I've not been able to determine why it's broken.
> System (System-adrian_lienhard.ducasse.207) btw
> In the past I've suggested using the message tracing VM and logging 
> information in a more meaningful way since that  hooks into the actual 
> message
> send in the VM would give exact information. Plus it would leave less 
> foot prints in the image since you aren't mixing another process (tally 
> keeping)
> into the running of the smalltalk code.
> On 17-Feb-09, at 6:38 PM, Andreas Raab wrote:
>> Folks -
>> I've been doing a bit of load-testing on our servers and thing that 
>> surprised me was that even in moderate load tests the VM appears to be 
>> spending some 20-30% of its total execution time in 
>> Socket>>primSocket:sendData:startIndex:count:. This is roughly at a 
>> throughput of 10Mbit so nothing spectacular and a long ways before we 
>> hit our bandwidth limits.
>> Given that the primitive in the Unix VM appears to be a vanilla call 
>> to write() I cannot possibly imagine what could cause this to take 
>> that much time. Also, all of these sends are guarded so 
>> socketSendDone: returned true prior to calling the send function 
>> (socketSendDone: takes about 2% total time in the profiles).
>> Has anyone seen similar behavior or has an idea on how to find out 
>> what is going on? If this is known write() behavior I would definitely 
>> consider putting this into a pthread for our servers. It is currently 
>> by far the biggest bottleneck that I can see.
>> Any ideas?
>> Cheers,
>>  - Andreas
> -- 
> ===========================================================================
> John M. McIntosh <johnmci at smalltalkconsulting.com>
> Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
> ===========================================================================

More information about the Vm-dev mailing list