zfs set sync=xxx tank/xxx でファイルシステムごとにsyncのポリシーを変更できるようになったのでどういう仕様なのかソースコードをながめてみた。

基本的にalwaysを指定すると何かするたびにzil_commit()が走る。readでもcommitしているのは先行するwriteをちゃんと書き込んでからという意図があるっぽい。fsyncはdisable指定するとfsyncの効き目がなくなる。NFSとかでcommitを無視したいときに使うのかな。

operation disable standard always
read - - commit
write - - commit
mkdirとか - - commit
fsync - commit commit
zvol関係 - - commit

zvolはioctlでwrite cacheをoffにするとzvol_write()でzil_commit()しなくなるようだ。