group, at least one location: When adding a new dva node into the tree, a kmem_alloc is done with a KM_SLEEP argument. Same goes for the vdev allocs.. ------- thus, this process thread could block waiting for memory. I would suggest adding a pre-allocated pool of each element. When a new dva node is needed, first check this pre-allocated pool and allocate from their. (also vdev) Why? This would eliminate a possible sleep condition if memory is not immediately available. The pool would add a working set of dva nodes (vdev) that could be monitored. Per alloc latencies could be amortized over a chunk allocation. Lastly, if memory is scarce along time may pass before this node could be allocated to the tree. If the number is monitored, it is possible that restricted operations could be done while until the intent log is decreased in size. I can supply untested code within 24 hours if wanted. Mitchell Erblich