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>