Re: FILEDESC_LOCK() implementation

From: Robert Watson <rwatson_at_FreeBSD.org>
Date: Wed, 21 Jun 2006 23:00:52 +0100 (BST)
On Wed, 21 Jun 2006, John Baldwin wrote:

>> The problem is this: when you have threads in the same process, file 
>> descriptor lookup is performed against a common file descriptor array. 
>> That array is protected by a lock, the filedesc lock.  When lots of threads 
>> simultaneously perform file descriptor operations, they contend on the file 
>> descriptor array lock.  So if you have 30 threads all doing I/O, they are 
>> constantly looking up file descriptors and bumping into each other.  This 
>> is particularly noticeable for network workloads, where many operations are 
>> very fast, and so they occur in significant quantity.  The M:N threading 
>> library actually handles this quite well by bounding the number of threads 
>> trying to acquire the lock to the number of processors, but with libthr you 
>> get pretty bad performance.  This contention problem also affects MySQL, 
>> etc.
>>
>> You can imagine a number of ways to work on this, but it's a tricky problem 
>> that has to be looked at carefully.
>
> Are the lookup operations using a shared lock so that only things like open 
> and close would actually contend?

I'm not sure anyone has tried that.  The semantics of the filedesc lock seem a 
bit complicated, I don't remember why that is right now.

Robert N M Watson
Computer Laboratory
University of Cambridge
Received on Wed Jun 21 2006 - 20:00:54 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:57 UTC