mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
DDT: Reduce global DDT lock scope during writes
Before this change DDT lock was taken 4 times per written block, and as effectively a pool-wide lock it can be highly congested. This change introduces a new per-entry dde_io_lock, protecting some fields during I/O ready and done stages, so that we don't need the global lock there. According to my write tests on 64-thread system with 4KB blocks this significantly reduce the global lock contention, reducing CPU usage from 100% to expected ~80%, and increasing write throughput by 10%. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Rob Norris <robn@despairlabs.com> Signed-off-by: Alexander Motin <alexander.motin@TrueNAS.com> Closes #17960
This commit is contained in:
@@ -219,6 +219,9 @@ typedef enum {
|
||||
* because its relatively rarely used.
|
||||
*/
|
||||
typedef struct {
|
||||
/* protects dde_phys, dde_orig_phys and dde_lead_zio during I/O */
|
||||
kmutex_t dde_io_lock;
|
||||
|
||||
/* copy of data after a repair read, to be rewritten */
|
||||
abd_t *dde_repair_abd;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user