我们有一个 MD3000i 阵列,由三台独立的服务器访问(所有刀片服务器都通过机箱网卡访问)。控制器 1(端口 0 和 1)链接到服务器 A。服务器 B 和 C(活动量都比服务器 A 少得多)链接到控制器 0(端口 0 和 1)。服务器 A 位于单独的 VLAN 上(通过刀片机箱背面的交换机连接到 MD3000i),服务器 B 和 C 位于自己的 VLAN 上(也通过刀片机箱背面的交换机连接到 MD3000i)。
我们遇到的问题是,服务器 A 的读取吞吐量明显优于 MD3000i。例如,查看通过该服务器运行的备份作业时,作业速率约为 3,000MB/分钟。但是,查看通过服务器 B 或 C 运行的备份作业时,作业速率低至 200MB/分钟。
如果我通过 MDSM 查看 iSCSI MAC 传输统计信息,则控制器之间的读数会有很大差异(除了总体音量之外):
Mac transmit statistics
MAC transmit legend
F = Frame Count
B = Byte Count
MF = Multicast Frame Count
BF = Broadcast Frame Count
PF = Pause Frame Count
CF = Control Frame Count
FDF = Frame Deferral Count
FED = Frame Excess Deferral Count
FLC = Frame Late Collisions Count
FA = Frame Abort Count
FSC = Frame Single Collision Count
FMC = Frame Multiple Collisions Count
FC = Frame Collision Count
FDR = Frame Dropped Count
JF = Jumbo Frame Count
iSCSI Host | Port | F | B | MF | BF | PF | CF | FDF | FED | FLC | FA | FSC | FMC | FC | FDR | JF
Controller 0 | port 0 | 440573739 | 651904980400 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
Controller 0 | port 1 | 440549412 | 651892177000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
Controller 1 | port 0 | 109676946034 | 148467634266838 | 0 | 0 | 512 | 131072 | 512 | 1024 | 1024 | 1024 | 512 | 1792 | 2304 | 2304 | 589824
Controller 1 | port 1 | 402653242 | 111669157090 | 524288 | 524288 | 2304 | 720896 | 2304 | 3328 | 3840 | 4352 | 2048 | 3584 | 5632 | 2048 | 1114112
我怀疑服务器 B 和 C 使用的网卡不具备实现我们所需性能所需的功能(请注意,巨型帧数为 0——据我所知,当多台服务器访问单个 MD3000i 控制器时,建议使用巨型帧)。服务器 A 通过 Broadcom BCM57085 NetXtreme II 访问 MD3000i,而服务器 B 和 C 通过 Intel PRO/1000 MB 双端口访问 MD3000i。
到目前为止,我还没有一个可靠的方法来隔离控制器 0(服务器 B 和 C)上读取吞吐量缓慢的原因。
答案1
是的,缺少巨型帧很可能是问题所在。
对于 1500 字节 MTU 帧,iSCSI、校验和、TCP/IP、以太网帧等之间的开销可能约为 200-250 字节。这样,大约有 1250 字节可用于数据传输。另一方面,9000 MTU 巨型帧可以以相同的开销传输大约 7 倍的数据。
您可能还想看看这些卡是否具有 TCP 卸载引擎 (TOE),并确保已启用它们。这可能会对吞吐量产生相当大的影响,尤其是当 CPU 开始成为进程的瓶颈时。