ESXi 上的磁盘 IO 很慢,VM 上的磁盘 IO 甚至更慢(freeNAS + iSCSI)

ESXi 上的磁盘 IO 很慢,VM 上的磁盘 IO 甚至更慢(freeNAS + iSCSI)

我有一台带有 ESXi 5 和 iSCSI 连接网络存储的服务器。存储服务器在 freenas 8.0.4 上的 Raid-Z 中有 4x1Tb SATA II 磁盘。这两台机器通过千兆以太网相互连接,与其他一切都隔离。两者之间没有交换机。SAN 盒本身是一台 1U 超微服务器,配备 3 GHz 的 Intel Pentium D 和 2 GB 内存。磁盘连接到集成控制器(Intel 什么的?)。

raid-z 卷分为三部分:两个 zvol,与 iscsi 共享,一个直接位于 zfs 之上,与 nfs 等共享。

我通过 ssh 进入 freeNAS 机箱,并对磁盘进行了一些测试。我曾经dd测试过磁盘的第三部分(直接在 ZFS 之上)。我将一个 4GB(2 倍 RAM 量)的块从 /dev/zero 复制到磁盘,速度为 80MB/s。

另一个 iSCSI 共享 zvols 是 ESXi 的数据存储。我在time dd ..那里做了类似的测试。由于dd那里没有给出速度,我将传输的数据量除以时间显示time。结果约为 30-40 MB/s。这大约是 freeNAS 主机速度的一半!

然后,我在运行在同一 ESXi 主机上的虚拟机上测试了 IO。该虚拟机是一台轻量级 CentOS 6.0 机器,当时它实际上没有做任何其他事情。当时服务器上没有运行其他虚拟机,磁盘阵列的其他两个“部分”也未使用。类似的测试dd结果约为 15-20 MB/s。这又是较低级别结果的一半左右!

当然,raid-z -> zfs -> zvolume -> iSCSI -> VMFS -> VM 中确实存在一些开销,但我不认为它会那么大。我相信我的系统一定出了问题。

我听说过 freeNAS 的 iSCSI 性能不佳,是这样的吗?我还没有设法让任何其他“大型”SAN OS 在该机器上运行(NexentaSTOR、openfiler)。

您能发现我的设置中有什么明显问题吗?

答案1

为了加快速度,您需要更多 RAM。我会从这些渐进式改进开始。

首先,加快文件系统速度:1) ZFS 需要的 RAM 比使用 ARC 缓存所需的 RAM 多得多。越多越好。如果您可以将其增加至少 8GB 或更多,那么您应该会看到相当大的改进。我们的有 64GB。

2) 接下来,我将添加一个 ZIL Log 磁盘,即大约 20GB 的小型 SSD 驱动器。使用 SLC 类型而不是 MLC。建议使用 2 个 ZIL 磁盘来实现冗余。这将大大加快写入速度。

3) 添加 L2ARC 磁盘。这可以由一个大小合适的 SSD 组成,例如 250GB MLC 驱动器就足够了。从技术上讲,不需要 L2ARC。但是,添加大量快速 SSD 存储通常比添加更多主 RAM 更便宜。但是,首先从您可以安装/负担得起的尽可能多的 RAM 开始。

有许多网站声称可以帮助进行 zfs 常规调优,并且这些参数/变量可以通过 GUI 设置。值得研究/尝试。

另外,请咨询 freenas 论坛。您可能会在那里获得比这里更好的支持。

其次:您可以加快网络速度。如果您的超微服务器恰好有多个 NIC 接口。您可以对它们进行通道绑定,以使网络吞吐量几乎翻倍,并具有一定的冗余度。 http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1004088

答案2

一些建议。

  • RAID 1+0 或 ZFS 镜像通常比 RAIDZ 表现更好。
  • 您没有提到存储服务器的实际规格,但是您的 CPU 类型/速度、RAM 数量和存储控制器是什么?
  • 是否涉及网络交换机?存储是否位于其自己的网络上,与虚拟机流量隔离?

我认为 80 兆字节/秒的速度对于 FreeNAS 系统上的直接测试来说太慢了。您可能遇到了磁盘问题。您使用的是“高级格式”还是 4K 扇区磁盘?如果是,则可能存在分区对齐问题这会影响你的表现。

答案3

您可能看到的不是转换开销,而是由于不同的访问模式而导致的性能损失。对 ZFS 卷的顺序写入只会创建一个几乎顺序的数据流,以写入您的底层物理磁盘。对 ZFS 卷上的 VMFS 数据存储的顺序写入将创建一个数据流,该数据流被 VMFS 文件系统结构的元数据更新和针对此元数据的频繁同步/缓存刷新请求“穿透”。再次,由于客户的文件系统元数据,从客户端内部对虚拟磁盘的顺序写入会再次增加顺序流的更多“穿透”。

在这些情况下通常建议的解决方法是启用写入缓存,忽略缓存刷新请求。这将缓解随机写入和同步问题,并提高您在 VM 客户机中看到的性能。但请记住,如果缓存无法在断电/突然重启后持续存在,您的数据完整性将面临风险。

iostat -xd 5通过在 FreeNAS 盒上发出类似命令并查看底层物理设备的队列大小和利用率统计信息,您可以轻松测试是否已达到磁盘限制。esxtopdisk device模式下运行还应该有助于您通过显示 ESX 端的磁盘利用率统计信息来了解正在发生的事情。

答案4

首先 - VMware 性能实际上不是 iSCSI(在 FreeNAS 上)或 NFS 3 或 CIFS(Windows)协议的问题,而是 XFS 文件系统写入和“同步”状态的问题。

FreeNAS 有一个名为“sync”的属性,可以将其设置为打开或关闭。默认情况下会设置“zfs sync=always”,这会导致每次写入都被刷新。这会大大降低性能,但可以保证磁盘写入。例如,在现代设备(3.x GHZ CPU、Seagate 7200 HD、1GigE 网络)上运行 VMware ESXI 5.5 和 FreeNAS,通常可以在 VMware 克隆或 Windows robocopy 或其他“写入”操作上实现 4-5MB/秒的性能。通过设置“zfs sync=disabled”,写入性能很容易达到 40MBs 甚至高达 80Mbs(即每秒兆字节)。禁用同步后,速度会快 10 到 20 倍,这正是您所期望的……但写入并不那么安全。

因此,当我想要进行大量克隆或表示 robocopy 等时,我会“暂时”使用 sync=disabled。然后我会重置 sync=always 以进行“标准”VM 操作。

FreeNAS 有一个“清理”功能,可以验证磁盘上的所有字节...12TB 大约需要 8 小时,我每周运行一次作为后续操作,以确保在 sync=disabled 期间写入的字节正常。

相关内容