As I trace code and using DTrace:
I found that root cause it mac os issue vfs sync every 25s.
=================
zfs`spa_sync_allpools+0xad
zfs`zfs_vfs_sync+0x18
mach_kernel`VFS_SYNC+0xc6
mach_kernel`0xffffff80003e4b30+0x43
mach_kernel`vfs_iterate+0x10a
mach_kernel`sync+0x17
mach_kernel`unix_syscall64+0x1f3
mach_kernel`hndl_unix_scall64+0x16
==================
And we handle zfs_vfs_sync as spa_sync_allpools.
spa_sync_allpools force txg to move on and force uberblock updating even if there is no dirty data.
In face, we should separate each vfs and handle this sync call by zil_commit.(just like FreeBSD/Linux)
You can re-produce this issue by just typing 'sync' from the terminal.
http://opensource.apple.com/source/laun ... te_thread()
launchd call sync() every 30s