调整 NFS 客户端/服务器堆栈

Sys*_*cus 12 tcpip zfs nfs centos opensolaris

我有一个 CentOS 5 VMWare 服务器通过 NFS 连接到 OpenSolaris 2009.06 机器,该机器保存磁盘映像。我的虚拟机似乎受到缓慢 IO 的限制,所以我想尽我所能来优化连接。

我不确定在生产系统上测量吞吐量的最佳方法,但使用dd bs=1024k count=400显示本地 (OpenSolaris) 写入 ~1.6GB/s 和远程 (CentOS) 写入 ~50MB/s 的一些不科学测试。我想这些比我实际得到的要低,因为目前有 7 个虚拟机正在连接上运行。

目前,这两台机器是直连的 gigE,在两个 NIC 上都启用了巨型帧 (MTU=9000)。除此之外,没有进行任何优化。NFS 挂载/导出使用默认值。

我应该从哪里开始转动旋钮以提高性能?

小智 4

澄清一下,您是否通过单个 Gb 以太网连接使用 NFS 获得 50MB/秒的速度?

主机服务器运行 CentOS,安装了 VMware Server,这又运行 7 个虚拟机?您选择结合使用 CentOS 和 VMware Server,而不是性能更高的 VMware ESXi 解决方案,是否有特殊原因?

50MB/秒并不是很好,但它并不比您对单 Gb 网络电缆的期望低多少 - 一旦您进行了上面提到的 NFS 调整,您可能会看到 70- 80MB/秒。沿线的选项:

“ro,硬,intr,retrans = 2,rsize = 32768,wsize = 32768,nfsvers = 3,tcp”

在系统的两端可能对您来说都是合理的。

为了达到这个目标,您需要将网卡配对,这将使您的吞吐量增加约 90%。您可能需要支持 802.3ad 的交换机才能获得链路聚合的最佳性能。

我建议的一件事是,OpenSolaris 机器上的 IO 吞吐量听起来高得令人怀疑,12 个磁盘不太可能支持 1.6GB/秒的吞吐量,并且可能会被 Solaris + ZFS 大量缓存。