|
Description
|
The znode_t z_sync_cnt is atomically incremented/decremented in the zfs_open/zfs_close.
Due to forking, there are some valid close that do not have an associtated open
throwing off the field.
This causes write itx to not be marked as synchronous and so are not flushed out by other thread in zil_commit handling other files. For concurrent O_DSYNC writers to different files (same FS) each thread ends up commiting only it's own data and a lot more queuing in the zil than necessary. A simple fix shows a 5X perf gain on vdbench and this load:
fsd=fsd1,anchor=/myfs,depth=1,width=1,files=8,size=100m,openflags=O_DSYNC,fwd=fwd1,fsd=fsd1,operation=write,xfersize=128k,fileio=random,stopafter=2000000,fileselect=random,skew=100,threads=8,rd=rd1,fwd=fwd1,fwdrate=max,iorate=max,format=yes,elapsed=60,interval=20
Within xxxxx , vdbench home : http://webhome.sfbay/nwsspe/speweb/vdbench/index.html
In attachment I have a small program that causes z_sync_cnt to misfire and a d-script that
highlights it.
|