zvol_write() can use dmu_tx_hold_write_by_dnode()
We can improve the performance of writes to zvols by using dmu_tx_hold_write_by_dnode() instead of dmu_tx_hold_write(). This reduces lock contention on the first block of the dnode object, and also reduces the amount of CPU needed. The benefit will be highest with multi-threaded async writes (i.e. writes that don't call zil_commit()). Reviewed-by: Jorgen Lundman <lundman@lundman.net> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com> Signed-off-by: Matthew Ahrens <mahrens@delphix.com> Closes #10184
This commit is contained in:
parent
8080848254
commit
20f287855a
|
@ -143,7 +143,7 @@ zvol_write(void *arg)
|
|||
if (bytes > volsize - off) /* don't write past the end */
|
||||
bytes = volsize - off;
|
||||
|
||||
dmu_tx_hold_write(tx, ZVOL_OBJ, off, bytes);
|
||||
dmu_tx_hold_write_by_dnode(tx, zv->zv_dn, off, bytes);
|
||||
|
||||
/* This will only fail for ENOSPC */
|
||||
error = dmu_tx_assign(tx, TXG_WAIT);
|
||||
|
|
Loading…
Reference in New Issue