kern/117954: [ufs] dirhash on very large directories blocks the machine for tens of seconds

John Baldwin jhb at freebsd.org
Thu Apr 1 13:10:15 UTC 2010


The following reply was made to PR kern/117954; it has been noted by GNATS.

From: John Baldwin <jhb at freebsd.org>
To: bug-followup at freebsd.org,
 martin at nowhere.com
Cc:  
Subject: Re: kern/117954: [ufs] dirhash on very large directories blocks the machine for tens of seconds
Date: Thu, 1 Apr 2010 09:01:57 -0400

 While the kernel scheduler will not preempt a thread in the kernel (e.g. 
 during a system call) if a timeslice expires, it will preempt that thread for 
 interrupts (assuming you have 'options PREEMPTION' enabled which has been on 
 by default in GENERIC for some time now on i386), thus the dirhash 
 calculations should not starve interrupts.  However, X is not an interrupt, so 
 while things like ping should still work, X will not get to run.
 
 While it would be tempting to defer the hashing of the directory contents to 
 an asynchronous task for large directories running in a thread with a low 
 priority, this might have bad side effects due to priority inversions related 
 to a very low priority thread holding various vnode locks.
 
 -- 
 John Baldwin


More information about the freebsd-bugs mailing list