kern/117954: [ufs] dirhash on very large directories blocks the
machine for tens of seconds
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
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.
More information about the freebsd-bugs