更新:我应该只将巨型帧设置为服务器和文件服务器,而不是客户端吗?
如果是,那么对服务器和客户端之间的通信有影响吗?
我正在对我们的产品进行一些性能测试。
目前,所有测试相关的机器(服务器、文件服务器、客户端、数据库)都在通过强大的 Dell OpenManage Switch 连接的 10G 网络上。
我们正在使用 iscsi 作为文件服务器。我们有一个包含多个节点的集群服务器。
我正在进行的性能测试基本上是模拟以下场景:1.客户端机器将创建大量线程向服务器发送http请求。2.根据不同类型的请求,服务器需要从所有其他服务器节点共享的文件服务器中获取一些数据。
测试结果是:无巨型帧,MTU 1500,服务器CPU 70%,http请求的平均响应时间为1秒。
使用巨型帧、MTU 9000、服务器 CPU 20%、http 请求的平均响应时间为 5 秒。
我们已经在所有机器上配置了巨型帧,并更改了 TCP 设置。
有任何想法吗?
答案1
出色地:
- 更大的帧 = 每个包上的数据更多 = 您的 CPU 发送数据的工作量更少(每秒处理的包数量更少),但组装每个有效载荷所需的时间更长(延迟更大)。
- 较小的帧 = 每个包上的数据较少 = 您的 CPU 需要做更多工作来发送数据(每秒发送更多包),但需要更少的时间来组装每个有效载荷(延迟更少)。
答案2
我一直在尝试阅读并了解更多有关使用巨型帧的影响的信息,并且为什么十多年后,它仍然没有成为主流。本文暗示了巨型帧大小所面临的现实问题,这些问题阻碍了它实现批量文件传输以外的更多应用场景。
http://www.chelsio.com/jumbo_enet_frames.html
导致高延迟的问题摘要
- 跨传输介质的延迟流水线
- 发送/接收缓冲区太小导致丢包=重新发送
- 数据包越大 = 发生碰撞的可能性越高 = 重新传输
- 有效载荷长度越大,CRC 质量越低 = 数据包损坏 = 重传
- 端到端路径 MTU 发现(双向)
答案3
您的“服务器”应该有一个用于 iSCSI 的接口(此接口是磁盘总线!)和一个用于客户端访问服务器的接口。iSCSI 接口应该是 MTU9000,客户端访问接口应该有一个默认 MTU。此外,您的交换机需要配置为同时支持巨型帧和流量控制,否则性能会很差。