注意
本文包含在 3 部分系列中。 可以查看 第 2 部分:TCP/IP 性能基础网络问题 ,第 3 部分:TCP/IP 性能已知问题。
传输控制协议/Internet 协议 (TCP/IP) 性能是一种比较。 应按照硬件、网络路径和操作系统 (OS) 方面的相同终结点进行比较。 实际性能因涉及多个因素而有所不同,可能会导致瓶颈。 这些因素通常是基础网络、TCP 设计和存储 IO 的实际传输速率。
详细了解 性能优化 以设置终结点的性能最佳配置。
TCP 接收窗口自动眩晕 是一项应用程序定义的功能,用于纵向扩展连接,以利用高延迟网络中的带宽。 例如,如果将 TCP 配置为使用自动通配级别正常,并且应用程序为 TCP 窗口定义了足够的缓冲区,则 OS 将快速将 TCP 缩放为最大值。 但是,此功能专为更高的延迟网络而设计。 对于低延迟网络,没有这样的要求,因为动态上不会有太多段(例如,在网络基础结构上)。
对于具有一次不缩放为最大值的 TCP 窗口的高延迟网络,有一些算法(如 CUBIC、 NewReno 和 复合 TCP )来确定带宽延迟产品(BDP)并相应地缩放窗口。 Windows OS 将拥塞算法分配给创建的每个套接字。
TCP 设置在 Windows 10 中预定义。 使用 Get-NetTCPSettings cmdlet 获取 TCP 设置,并使用 Get-NetTCPConnection cmdlet 查看 TCP 连接属性,例如本地或远程 IP 地址、本地或远程端口以及连接状态。
下面是提高吞吐量的提示:
- 请确保不存在基础网络问题(数据包丢失)。
- 启用 NIC 的高级属性以获取性能特性(例如 Jumbo frames、RSS/VMQ、卸载功能和 RSC),除非存在基础网络兼容性问题或出于故障排除目的。
- 请确保将 TCP 配置为使用自动调谐级别为正常。
- 使用性能监视器分析确保没有 CPU 或存储瓶颈。
- 根据实际组织的要求选择安全功能。
- 创建基线。
TCP 吞吐量测试工具
若要达到特定硬件的最高可能吞吐量,必须调整性能因素。 请确保没有基础网络问题(数据包丢失)。 使用NTttcp.exe或ctsTraffic.exe工具测试吞吐量。 请参阅适用于网络工作负荷的性能工具。
TCP 吞吐量的瓶颈
不要在 TCP 吞吐量测试期间使用网络监视器或获取网络数据包级别日志。 每次记录数据包时,网络驱动程序接口规范(NDIS)监视筛选器都会为发送方和接收方添加延迟。 此操作需要 CPU 资源并生成许多存储 IO。 当执行数据包级别日志时,性能会降低,因为 TCP 正尝试 从数据包丢失中恢复。
添加安全性具有自身的成本和性能问题。 Internet 协议安全性(IPsec)等安全协议具有开销和额外的处理要求。 将数据保护与数据完整性进行比较,应首选 IPsec 的完整性模式,以降低处理成本。 安全软件在数据包处理方面也会产生巨大的成本,这将导致输出变慢。
如果测试的性能不符合预期,请根据网络相关性能计数器中定义的日志。
检查 TCP 性能问题后,请检查上层关联的协议,例如文件系统协议(服务器消息块(SMB)或网络文件系统(NFS)。 这些协议需要处理器资源和磁盘 IO。 速度缓慢是由有故障的驱动程序或硬件、高延迟的过程调用(DPC)队列或/和慢磁盘 IO 引起的。 找出 OS 中的哪个组件会导致高 DPC 具有挑战性,因为这需要使用 Xperf/Windows 性能记录器(WPR)(CPU)日志记录进行分析。 查找与磁盘相关的缓慢问题相对容易。 有关详细信息,请参阅 “检查和优化磁盘性能”。
在测试期间,可以调整测试应用程序(客户端和服务器应用程序),以使用具有足够高缓冲区值的多个线程,以达到最大吞吐量。 但是,这可能不反映实际条件,因为每个 API 调用可以利用的线程数和缓冲区根据编程受到限制。 此外,应用程序层协议(SMB 或通用 Internet 文件系统 (CIFS)具有自己的缓冲区和优化(文件服务器 或 SMB 的性能优化:故障排除指南)。 如果应用程序无法按预期运行基线,请与应用程序专家合作,找出瓶颈。
如何创建基线
必须创建性能基线才能比较当前吞吐量。 若要更好地了解网络,请在部署开始时创建基线。
基线由以下要点组成:
- 源网络和目标网络
- 这些网络之间的延迟和跃点计数
- 处理器/接口功能和配置
- 测试的时间范围(工作时间/非工作时间/高峰时间)
- OS 版本
- 吞吐量拉取和吞吐量推送
注意
使用相同的服务器模型(相同数量的 NIC 卡和处理器容量)创建基线,使处理能力几乎相等。
监视缓冲区并跟踪测试工具创建的传输会话数。 在启用 RSS 的情况下,四个同时的 TCP 传输会话可以评估使用 CPU 均匀。
下面是度量吞吐量和创建基线的步骤:
下载 ctsTraffic 工具。 下面是 ctsTraffic 工具的某些参数的说明。
参数 说明 -listen:<IP/*>
此选项用于在服务器上侦听端口。 如果 *
已指定,ctsTraffic 工具将侦听该计算机上可用的所有 IP 地址。 例如,-listen:*
。-target:<IP>
此选项用于客户端,并指定运行ctsTraffic.exe且处于侦听状态的服务器 IP 地址。 例如, -target:192.168.1.10
。-pattern:pull
CtsTraffic 工具默认使用推送模式。 这意味着数据从客户端发送到服务器。 在客户端和服务器上使用此开关时,会在客户端上接收数据。 执行推送测试时不要使用此选项。 -connections:<num>
此选项指定 TCP 连接数。 TCP 套接字将从客户端同时创建。 8 通常用作中层网卡上的 RSS 队列为 8。 例如, -connections:8
。-iterations:<num>
此选项指定与 .. 中的 -connections:
连接数相乘数。 例如,-iterations:10
。 通过 10 次迭代,客户端将尝试总共 80 个连接。 如果未指定此选项,客户端将继续尝试 8 个连接,直到 1000 个连接。-statusfilename:<filename.csc>
使用此选项将控制台级别 1 选项刷新到 .txt
与 Microsoft Excel 兼容的文件。-connectionfilename:<filename.csv>
使用此选项可刷新详细详细信息。 例如,套接字级别信息,例如每个套接字传输数据所需的时间。 可以使用此选项检查是否存在任何错误或高级故障排除。 -consoleverbosity:<0|1|2|3>
此选项指定测试运行时监视器上的视图或输出。 例如, -consoleverbosity:1
。在接收端打开资源监视器。 例如,如果使用
-pattern:pull
,请在客户端上打开它,否则在服务器上将其打开。在服务器上启动 ctsTraffic 工具并运行以下命令:
Ctstraffic.exe -listen:* -consoleverbosity:1 <-pattern:pull>
在客户端上启动 ctsTraffic 工具并运行以下命令:
Ctstraffic.exe -target:<serverip> -consoleverbosity:1 <-pattern:pull> -connections:8 -iterations:10
确保接收端的处理器得到均匀使用。 如果不是,请检查 RSS 的问题,找出哪些不按预期工作。
根据客户端上的结果以位/秒为单位计算吞吐量。 请参阅以下屏幕截图中的示例:
在此示例中,吞吐量接近 19 Gb/秒,计算方式如下:
(85,899,349,200 字节/36.678 秒) * 8 = 18,735,885,097.33355 (位/秒)