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 速度缓慢引起的。 确定 OS 中的哪个组件导致高 DPC 具有挑战性,因为这需要使用 Xperf/Windows Performance Recorder (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 (位/秒)

后续步骤