FreeBSD ZFS + HBA 狂喷 SYNCHRONIZE CACHE 错误讯息
好不容易 FreeBSD 9.0 上 ZFS 的 filesystem 版本升级到 5, storage pool 的版本升级到 28, 总算有个较完整的功能可用, 兴沖沖的就给他上去.
刚上去时, 系统一直狂喷
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): CAM status: SCSI Status Error
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SCSI status: Check Condition
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SCSI sense: ILLEGAL REQUEST asc:20,0 (Invalid command operation code)
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): Command byte 0 bit 0 is invalid
整个效能变笑能.....
本以为是 driver 和 HBA 卡不相容或 FreeBSD 版本问题, 不信邪先把硬碟格式化成 UFS 反倒不会喷这个讯息出来, 这下确认了是 ZFS 在搞鬼.
因为 ZFS 在完成同步写入时, 会强制在 HBA 上执行 NVRAM 的清除作业, 这会影响效能!!
为避免此问题必须要在 /boot/loader.conf 内加入
vfs.zfs.cache_flush_disable=1
以阻止 ZFS 对 HBA 上的 NVRAM 执行 SYNCHRONIZE CACHE 指令.