我有以下测试设置:HP Microserver N36L(双核低功耗 Athlon64)8GB ECC RAM 2 端口英特尔千兆网卡 4x3TB WD Green(5400 RPM?)1 个用于操作系统映像的 SATA 磁盘(FreeBSD 10.1)
交换机是 HP v1910-24G(托管 L2 交换机,24 个千兆端口)
客户端为:DH67BL 主板上的 Core i5 2400 24GB RAM 1 Intel 千兆位(板载)
FreeBSD 计算机通过 iSCSI 公开其 zvol,启动器是 Windows。在 Windows 上,iSCSI 卷被格式化为 NTFS,VMWare Workstation 将其用作其他 VM(在本例中,也是 Windows 7 VM)的磁盘。
我尝试了几种 zvols 配置,主要是 volblocksizes 值不同,从 4k 到 64k,以及 NTFS 簇大小从 4 到 64k。我尝试了块大小 = 簇大小和块大小 > 簇大小的组合。
在所有情况下我得到的结果基本相同:
连续读取速度为 110-120MB/s(千兆以太网限制)。随机读取速度为 <5MB/s
在虚拟机内外复制大型文件是可以接受的。启动 Windows 非常慢(全新安装后需要 3 分钟以上才能进入登录屏幕。启动桌面需要 1 分钟以上)
这是预期的行为吗?
答案1
这种配置有很多组件和设计决策,导致其性能不佳。
HP Microserver 是低性能产品。RAM 受限,CPU 低端。
Western Digital Green 硬盘转速较低和要求特别考虑用于 4k 扇区格式化。这可能是主要问题。
看起来你可能在三个磁盘上使用 RAIDZ1。该设置下的随机读/写性能也相当低。预计在两种情况下都会看到单个磁盘的性能。
没有写入缓存/ZIL 设备。
1GbE iSCSI 到 Windows 软件启动器的效果并不好。
VMware Workstation 肯定没啥帮助。
某些 ZFS 属性可能会对您不利:重复数据删除不好。gzip 压缩不好(lz4 还可以)。分配给 ARC 的 RAM 过多也不好。
答案2
机械硬盘在随机 I/O 访问方面表现不佳。4x
WD Green 可提供 5 MB/s 的随机读取性能,这比我预期的还要好。
一些数学知识:在 5400 RPM 时,单次旋转需要 11 毫秒,因此半次旋转需要 ~5.5 毫秒。这是旋转延迟. 再增加约 8ms寻道时间(执行器正确定位读/写头所需的时间)使总时间达到~13ms。这意味着每个磁盘的 IOPS 为 1000ms(1 秒)/13ms = ~76 IOPS。在 4K 随机读取时,其速度约为 300 KB/s
考虑到 ZFS RAIDZ 本身在 IOPS 方面相当糟糕(这是设计使然:ZFS 牺牲 IOPS 来换取数据安全,请阅读这里有关更多详细信息)我很惊讶您的随机读取性能达到 5 MB/s。您是否使用 4KB 随机读取或更大的读取(例如:64KB)进行测试?
回到您最初的问题:我认为它是小型 iSCSI volblocksize/recordsize、RAIDZ 卷和 4K 磁盘的组合。在 RAIDZ Vols 中,每次读/写都会按数据磁盘数量分解,然后转发到物理磁盘。例如,在您的设置中,单个 8K 写入将分解为多个 ~3KB 写入(3x 3KB 写入数据和 1x 3KB 写入奇偶校验),这将触发磁盘本身的读取-修改-写入(因为它们是基于 4K 的磁盘)。由于 Windows 启动是随机写入繁重的,因此它可能会受到磁盘行为的影响。
尝试这个:如果你有能力销毁你的 ZPOOL/ZDEV,请销毁它并使用 16K 或 32K 的卷块大小重新创建它(请参阅这里)。然后重新安装 Windows 机器并重新尝试您的场景。