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


10

我有一台CentOS 5 VMWare服务器通过NFS连接到OpenSolaris 2009.06计算机,该计算机保存磁盘映像。我的虚拟机似乎受到缓慢的IO的束缚,因此我想尽我所能来优化连接。

我不确定测量生产系统上吞吐量的最佳方法,但是使用dd bs=1024k count=400显示本地(OpenSolaris)写入速度约为1.6GB / s,而远程(CentOS)写入速度约为50MB / s的一些不科学的测试。我想这些比我实际获得的要低,因为当前有7个VM通过该连接运行。

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

我应该从哪里开始旋转旋钮以改善性能?


吞吐量应该没有太大关系。运行OpenSolaris的系统上的基本硬件规格是什么?您有多少个磁盘/主轴?多少内存?
ewwhite

在具有4GB RAM的一个控制器上的2个raidz1池中分布12个磁盘。如果吞吐量无关紧要,我应该看什么指标?
Sysadminicus 2009年

cat / proc / mounts是什么?grep solaris_server在Linux客户端上说吗?不同版本的Linux具有不同的默认挂载选项:(
James

10.10.1.1:/tank/vm / vm nfs rw,vers = 3,rsize = 1048576,wsize = 1048576,hard,proto = tcp,timeo = 600,retrans = 2,sec = sys,addr = 10.10.1.1 0 0
Sysadminicus

某些版本的Solaris 10中,nfs3不稳定。如果可以转到nfs4,则可能会看到一些改进。但是,正如其他评论者所说,在gigE链接上看到50MB / s的速度接近您所能看到的最高速度
warren

Answers:


2

需要说明的是,通过单Gb以太网连接使用NFS可获得50MB /秒的速度吗?

并且主机服务器正在运行安装了VMware Server的CentOS,而后者又正在运行7个VM?您将CentOS和VMware Server结合使用是不是有一个特定的原因,而不是采用性能更高的解决方案VMware ESXi?

50MB /秒的传输速度不是很好,但远低于您在单Gb网络电缆上的预期速度-一旦您进行了NFS调整(人们已经提到过),您将可能会看到70- 80MB /秒 以下选项:

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

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

为了达到这一点,您需要将网络卡成对组合,这将使吞吐量提高约90%。您可能需要一个支持802.3ad的交换机,以通过链路聚合获得最佳性能。

我要建议的一件事是,您在OpenSolaris机器上的IO吞吐量听起来非常高,十二个磁盘不太可能支持1.6GB /秒的吞吐量,而Solaris + ZFS可能会大量缓存它们。


我们正在使用CentOS + VMWare Server,因为它是免费的。最后,我检查了ESXi的价格。根据/ proc / mounts,rsize / wsize当前为1048576。只需确认一下,您认为将这些值减小到32k会有助于提高速度吗?我将检查链接聚合。我要在连接的两端还是只在一端进行?我认为您对缓存的IO是正确的。将dd提升到512MB以上会大大降低传输速率(介于50-120MB / s之间)。
Sysadminicus

我不再能够在UI中接受该问题的答案,但我对此表示赞同,因为似乎链接聚合将是我最好的选择。
Sysadminicus 2009年

抱歉,延迟回复,ESXi现在以其基本形式免费提供,并且可以提高性能,但是功能有限,因此可能不适合您。您需要在网络链接的两端进行链接聚合,才能看到很多改进。希望它对您
有用

1

对于我们的RHEL / CentOS 5机器,我们使用以下安装标志

nfsvers = 3,tcp,timeo = 600,retrans = 2,rsize = 32768,wsize = 32768,hard,intr,noatime

较新的Linux内核版本支持甚至更大的rsize / wsize参数,但EL5中2.6.18内核的最大值为32k。

在NFS服务器上,至少对于Linux,如果您有一个带有BBWC的磁盘控制器,则no_wdelay应该会有所帮助。另外,如果在客户端上使用noatime标志,则也可以使用noatime在服务器上挂载文件系统。

并且,正如已经提到的,不要打扰UDP。使用高速网络(1GbE +)时,序号回绕的可能性很小,但非零,从而导致数据损坏。另外,如果有丢包的可能,TCP的性能将优于UDP。

如果您不太担心数据的完整性,则“异步”导出选项可以极大地提高性能(异步的问题是,如果服务器崩溃,您可能会丢失数据)。

另外,至少对于Linux服务器,您需要确保运行了足够的NFS服务器线程。默认值8太低了。


1

我曾经用Dell r710、1 cpu,4 GB RAM,6个带有RAID-10的SATA磁盘进行过测试。客户端是sun x2100,均带有CentOS 5.3和上述的nfs参数

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

安装在noatime的两侧。

我的确将nfsds提高到256,并将noop调度程序用于perc6 raid控制器。我所做的另一件事是使分区与RAID控制器的64K条带大小对齐。

然后我用dd测量了nfs的性能-对于读取,我可以填充gigE管道,但是对于写入,我只能获得稍微更好的结果。启用异步后,我可以获得70至80 MB / s的速度,但是异步对我来说是没有选择的。

也许您无法通过gigE链接获得更多有关nfs的信息?


1

尝试以下操作:通过以下两个步骤临时在OpenSolaris NFS服务器上禁用ZFS意向日志(ZIL)

  1. echo zil_disable/W0t1 | mdb -kw
  2. 重新安装测试分区

然后再次测试。您可以使用zilstat来确保ZIL确实没有更多的IO。如果测试运行速度更快,您就会知道性能问题与ZIL有关。如果它仍然运行缓慢,您就会知道ZIL并非罪魁祸首,并且将SSD用作ZIL也无济于事。有关ZIL的更多信息,请参见《ZFS Evil Tuning Guide》

另一种选择是捕获网络流量(例如,使用Wireshark)并查看是否存在任何问题,例如,巨型帧。验证线路上的数据包看起来是否像您期望的配置那样。有什么不好的碎片吗?有转发吗?


0

增大读取和写入有效负载大小可能会有所帮助。特别是与巨型框架结合使用。

我倾向于找到32k为最佳。

rsize=32768,wsize=32768

切换到UDP传输当然比TCP快,因为它节省了传输控制的开销。但这仅适用于可靠的网络以及未使用NFSv4的网络。


看来CentOS正在使用NFSv3进行连接。NFSv4对我们的用例有用吗?我要说的是,由于两个NIC之间只有交叉电缆,因此网络非常可靠。
Sysadminicus

2
UDP完全不值得麻烦。坚持使用TCP。我不建议您尝试使用NFSv4,直到您使v3正常工作为止。
詹姆斯

0

通过将SSD用作ZFS意向日志(ZIL),可以大大提高ZFS上的NFS性能,因为这可以减少操作的延迟。有关OpenSolaris NFS和ZFS邮件列表中有关ZFS性能的VMWare NFS的线程,它具有更多信息,包括基准测试工具,以查看ZIL性能是否成为瓶颈。


0

仅供参考,dd命令将写入高速缓存而不写入磁盘,这会导致疯狂的数字,例如1.6G / s,因为在Solaris上写入RAM而不是磁盘时,可以使用“ -oflag = sync”强制写入磁盘

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.