On Wed, Nov 07, 2007 at 08:57:53AM -0700, Mark Maybee wrote:
> Pawel Jakub Dawidek wrote:
> > On Wed, Nov 07, 2007 at 07:41:54AM -0700, Mark Maybee wrote:
> >> Hmm, seems rather unlikely that these two IOs are related.  Thread 1
> >> is trying to read a dnode in order to extract the znode data from its
> >> bonus buffer.  Thread 2 is completing a dmu_sync() write (so this is
> >> the result of a zil operation).  While its possible that the dmu_sync()
> >> write may involve reading some of the blocks in the dnode from Thread 1,
> >> this should not result in Thread 1 waiting for anything.
> > 
> > Maybe my interpretation is wrong, but moving this VN_RELE() to separate
> > kernel thread for later fixes deadlock for me.
> > 
> Right, but I think the problem here is that you are running out of IO
> threads.  Do you maintain separate thread sets for each "type" of IO
> (i.e. reads, writes, etc)?  We found, early on, that if we didn't
> reserve threads for specific types of IOs that we could run into this
> type of deadlock.

Yes, I've (A * B * C) I/O threads, where A is number of I/O types (6), B
is number of CPUs, and C is 2 (issue and intr threads). This is the same
in Solaris, I belive.

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd at FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: 
<http://mail.opensolaris.org/pipermail/zfs-code/attachments/20071107/b796f37f/attachment.bin>

Reply via email to