我们有一个相对较大的 ZFS 池(raidz3 中有 23 个 vdev,~1PB 原始)。头节点有 16 个核心和 192GB RAM。我们池中有一个 ZIL,但没有 L2ARC。池运行的是Solaris 11.3
该池可以以恒定的 1GB/s 吞吐量、20kIOPs(峰值 >100kIOPs)运行,但性能会在几天内下降:
- IOP 下降 (
zpool iostat
) - 吞吐量下降
- 有 zio_read_intr、zio_write_issue、zio_write_issue_high 的负载
prstat -amL
尝试查看zilstat.sh
没有显示任何活动,这很奇怪:我不确定为什么我可以在 zpool status 命令中看到附加到池的日志设备,但我看不到zilstat.sh
.
此外,我们还有该系统的近乎精确的复制品,其性能完美无缺,ZIL 的行为也符合其应有的性能。唯一的区别是 ZIL 是通过不同的 SAS 连接器访问的。当 ZIL 使用与其他 vdev 相同的 SAS 通道时,我预计性能可能会较低,但并非完全没有活动。
答案1
iostat -sndzx
提供了一些关于性能低下原因的见解(请参阅@Andrew 对我原来问题的评论)。
池中的一个磁盘报告平均服务时间(asvc_t
列)在 150 毫秒到 4,999 毫秒之间波动,繁忙时间百分比为 60(%b
列)。池中的其他驱动器的 avsc_t 时间为 3.3 毫秒,繁忙率为 2%。
尽管生成了上述数据iostat
,但zpool status
仍将驱动器报告为online
,没有读取或写入错误。
我没有看到活动使用的原因zilstat.sh
是该活动zfs send
/receive
仅在当时。send
/receive
在接收端使用异步写入根本没有使用 ZIL。这些块被直接写入旋转磁盘。
答案2
如果您没有看到 中的任何性能zilstat.sh
,我会冒昧地质疑是否有人意外添加了旨在成为齐尔作为池中其他 23 个 vdev 的另一个 vdev。
您能否提供zpool status
输出来确认池的当前配置?如果有人在创建池时错过添加“日志”,您的齐尔没有按照您的预期行事。