我们在使用 Windows 2008 CIFS 客户端时遇到了性能问题。我们有一个 FreeNAS 服务器,在 ZFS 写入时提供 1.3GB/s 的速度。我们有 10Gb 网络连接 NAS 服务器和 CIFS 客户端。使用两个 Linux CIFS 客户端,我们可以获得大约 1.2GB/s 的速度。但 Windows 2008 客户端只能提供 400MB/s 的速度。
这是 Windows 2008 客户端可以提供的最好的功能吗,或者我们的 Windows 客户端配置不佳?
非常感激。
答案1
您可能想要尝试在服务器端启用 smb2 支持。
smb.conf 的 [global] 部分中的最大协议 = SMB2
答案2
需要考虑的是 MTU 大小,或者说巨型帧。全双工和 TOE 是另外两个需要关注的事项。
我正在运行 FreeNAS 8.3.1,并将 iSCSI 磁盘导出回运行虚拟机的 Linux 机器,这些虚拟机的挂载非常密集。将帧大小设置为大于默认值 1500 会对性能和吞吐量产生巨大影响。必须在客户端和服务器端都设置,否则不会生效。
FreeNAS 有一些很好的图表,可以让您在系统信息选项卡上找出瓶颈所在。
哦,还有一点需要注意,更改 MTU 大小既是一门艺术,也是一门科学。FreeBSD、Linux 和 Windows 中的驱动程序在允许的大小方面并不可靠。您可能需要深入研究驱动程序文档或进行实验才能获得可接受的大小。此外,最低值是整个路径的默认值。
在 linux 或 freebsd/freenas 上:
ifconfig -a | grep -i mtu
ifconfig eth0 mtu 9122 up
ifconfig em0 mtu 9122
在 Windows 上,右键单击设备管理器中的 NIC,然后查看 NIC 驱动程序的属性。MTU 或 Jumbo Frame 或 Framesize 可能是驱动程序设置的名称。默认值通常为 1500。
要从 Linux 测试路由 MTU 值:
route get <ipaddr>
有些笔记会提到硬连线全双工,但任何现代交换机都可以快速处理这个问题,不会有问题。我没有看到现代硬件上存在双工问题。
对于我的 iSCSI 使用,导出卷的块大小必须更大,我将虚拟设备的块大小设置为 4096。请注意底层导出卷的块大小,因为它们也会影响性能。这可能不会影响您的 SMB 导出。
最后一个问题,如果你的 10Gb NIC脚趾(TCP 卸载已启用)或硬件加速?
TOE 是网卡上的 GPU,相当于显卡上的 GPU,以及旧式硬盘控制器使用的 DMA(直接内存访问)。它允许将 TCP/IP 堆栈的工作卸载到 NIC,而不是通过主板前端总线和 CPU 来运行,因为后者是这种速度下数据处理的瓶颈。
为了使您的请求正常工作,您需要在操作系统和驱动程序中启用 10Gbps 卡的 TOE(硬件加速)。如果您已经启用了 TOE,请忽略响应的这一部分。