TCP/IP 性能概述

注意

本文包含在一个包含 3 个部分的系列中。 可以查看 第 2 部分:TCP/IP 性能基础网络问题 和第 3 部分:TCP/IP 性能已知问题

传输控制协议/Internet 协议 (TCP/IP) 性能是比较的。 在硬件、网络路径和操作系统 (操作系统) 方面,应使用相同的终结点进行比较。 现实生活中的性能不同,因为涉及多个因素,并可能导致瓶颈。 这些因素通常是基础网络、TCP 设计和存储 IO 的实际传输速率。

详细了解 如何优化性能 ,为终结点设置性能最佳的配置。

TCP 接收窗口自动调整 是应用程序定义的功能,用于纵向扩展连接以利用高延迟网络中的带宽。 例如,如果 TCP 配置为将自动调整级别配置为正常,并且应用程序为 TCP 窗口定义了足够的缓冲区,则 OS 会快速将 TCP 缩放到最大值。 但是,此功能专为更高的延迟网络而设计。 对于低延迟网络,没有这样的要求,例如,在网络) 上,在飞行 (不会有很多段。

对于 TCP 窗口未一次性缩放为最大延迟的高延迟网络,可以使用 CUBICNewReno复合 TCP 等算法来确定带宽延迟产品 (BDP) 并相应地缩放窗口。 Windows OS 为创建的每个套接字分配拥塞算法。

TCP 设置在Windows 10中预定义。 使用 Get-NetTCPSettings cmdlet 获取 TCP 设置,并使用 Get-NetTCPConnection cmdlet 查看 TCP 连接属性,例如本地或远程 IP 地址、本地或远程端口以及连接状态。

下面是提高吞吐量的提示:

  • 请确保 (数据包丢失) 不存在基础网络问题。
  • 为性能功能 ((例如 Jumbo 帧、RSS/VMQ、卸载功能和 RSC) )启用 NIC 的高级属性,除非存在基础网络兼容性问题或故障排除目的。
  • 确保 TCP 配置为将自动调整级别配置为正常。
  • 使用性能监视器分析确保没有 CPU 或存储瓶颈。
  • 根据实际组织的要求选择安全功能。
  • 创建基线。

TCP 吞吐量测试工具

若要达到特定硬件的最高吞吐量,必须调整性能因素。 请确保数据包丢失) (不存在基础网络问题。 使用 NTttcp.exectsTraffic.exe 工具测试吞吐量。 请参阅 网络工作负载的性能工具

TCP 吞吐量的瓶颈

在 TCP 吞吐量测试期间,请勿使用网络监视器或获取网络数据包级别日志。 网络驱动程序接口规范 (NDIS) 监视筛选器会在每次记录数据包时为发件人和接收方添加延迟。 此操作需要 CPU 资源并生成许多存储 IO。 使用数据包级别日志时,性能会降低,因为 TCP 正在尝试 从数据包丢失中恢复

添加安全性有其自身的成本和性能问题。 Internet 协议安全 (IPsec) 等安全协议具有开销和额外的处理要求。 将数据保护与数据完整性进行比较时,应优先使用 IPsec 的完整性模式来降低处理成本。 安全软件在数据包处理方面也具有巨大的成本,这将导致输出速度变慢。

如果测试的性能没有达到预期,请按 网络相关性能计数器中的定义获取日志。

检查 TCP 性能问题后,请检查上层关联的协议,例如文件系统协议 (服务器消息块 (SMB) 或网络文件系统 (NFS) ) 。 这些协议需要处理器资源和磁盘 IO。 慢速是由驱动程序或硬件故障、高延迟过程调用 (DPC) 队列或/和慢速磁盘 IO 引起的。 找出操作系统中导致高 DPC 的组件是具有挑战性的,因为这需要使用 Xperf/Windows 性能记录器 (WPR) (CPU) 日志记录进行分析。 查找与磁盘相关的慢速问题相对容易。 有关详细信息,请参阅 检查和优化磁盘性能

在测试期间,可以调整 (客户端和服务器应用程序) 测试应用程序,以使用缓冲区值足够高的多个线程,以达到最大吞吐量。 但是,这可能无法反映实际情况,因为每个 API 调用可以使用的线程数和缓冲区数因编程而有限。 此外,应用程序层协议 (SMB 或通用 Internet 文件系统 (CIFS) ) 具有自己的缓冲区和优化 (文件服务器 或 SMB 的性能优化 :故障排除指南) 。 如果应用程序无法按预期运行基线,请与应用程序专家合作查找瓶颈。

如何创建基线

必须创建性能基线来比较当前吞吐量。 若要更好地了解网络,请在部署开始时创建基线。

基线由以下要点构成:

  • 源和目标网络
  • 这些网络之间的延迟和跃点计数
  • 处理器/接口功能和配置
  • 测试的时间范围 (工作时间/非工作时间/高峰时段)
  • OS 版本
  • 吞吐量拉取和吞吐量推送

注意

创建具有相同服务器模型的基线 (相同数量的 NIC 卡和处理器容量) ,以使处理能力几乎相等。

监视缓冲区,并跟踪测试工具创建的传输会话数。 在启用 RSS 的情况下,四个同时进行的 TCP 传输会话可以均匀地评估 CPU 的利用率。

下面是度量吞吐量和创建基线的步骤:

  1. 下载 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
  2. 在接收端打开资源监视器。 例如,如果使用 -pattern:pull,请在客户端上打开它,否则在服务器上打开它。

  3. 在服务器上启动 ctsTraffic 工具并运行以下命令:

    Ctstraffic.exe -listen:* -consoleverbosity:1 <-pattern:pull>
    

    在服务器端运行 ctsTraffic 命令。

  4. 在客户端上启动 ctsTraffic 工具并运行以下命令:

    Ctstraffic.exe -target:<serverip> -consoleverbosity:1 <-pattern:pull> -connections:8 -iterations:10
    

    在客户端运行 ctsTraffic 命令。

  5. 确保均匀使用接收方的处理器。 如果没有,请检查 RSS 的问题,找出哪个问题不能按预期工作。

    接收端上的 cpu 使用情况的详细信息。

  6. 根据客户端上的结果计算吞吐量(以位/秒为单位)。 请参阅以下屏幕截图中的示例:

    客户端上的 ctsTraffic 命令结果。

    在此示例中,吞吐量接近 19 Gb/秒,计算结果如下:

    (85,899,349,200 字节/36.678 秒) * 8 = 18,735,885,097.33355 (位/秒)

后续步骤