如何在同一 VPC 中的 Amazon EC2 Linux 实例之间进行网络吞吐量基准测试?
我想测量位于同一 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例之间的网络带宽。
解决方法
定义用于测试网络吞吐量的实例类型、大小和配置
当实例位于同一 VPC 中时,多种因素可能会导致不同云环境之间的网络性能存在显著差异。最佳做法是定期评估环境的网络性能并制定基准,以提高应用程序的性能。网络性能测试可以提供宝贵的见解,从而确定最适合您需求的 EC2 实例类型、大小和配置。
修改实例以提高网络性能
缩短实例距离
确保您的实例距离很近。实例物理距离较近可提供更好的性能。实例彼此距离较远可能会导致网络延迟。同一可用区或 AWS 区域中的实例的网络吞吐量要高于不同可用区或区域中的 EC2 实例的吞吐量。在以下场景中,实例彼此之间的距离会逐渐变远:
- 同一区域中同一可用区中的实例
- 同一区域中不同可用区中的实例
- 同一大洲不同区域中的实例
- 不同大洲不同区域中的实例
增加实例的 MTU
增加最大传输单位 (MTU)。所有 EC2 实例类型均支持 1500 MTU。所有当前一代实例和上一代 C3、G2、I2、M3 和 R3 实例均支持巨型帧。巨型帧允许超过 1500 的 MTU。但是,在某些情况下,支持巨型帧的实例也可能限制为 1500 MTU。
增加实例的大小
增加您的实例大小。实例大小较大的实例类型提供的网络性能通常优于实例大小较小的同类型实例。
使用适用于 Linux 的增强联网支持
使用增强联网。增强联网可提供更高的性能并持续降低实例间延迟。默认情况下,所有当前一代实例均使用弹性网络适配器 (ENA) 或 ENA Express 驱动程序来激活增强联网。
支持增强联网的前几代实例类型可能需要额外的配置才能使用增强联网。
有关详细信息,请参阅如何在 EC2 实例上启用和配置增强联网?
将实例放入置放群组
将相互依赖的实例启动到一个置放群组中,以满足工作负载的需求。高性能计算 (HPC) 提供全二分带宽和低延迟,并支持高达 100 GB 的网络速度,具体取决于实例类型。
使用网络 I/O 积分机制来分配网络带宽
要检查您的实例类型是否可以使用 I/O 网络积分来突增超过基准带宽,请参阅网络规范。
设置您的测试实例
完成以下步骤:
- 启动两个 Linux 测试实例。
- 确认这两个实例支持适用于 Linux 的增强联网,且位于同一 VPC 中。
- (可选)如果您在不支持巨型帧的实例之间执行网络测试,请在您的实例上设置网络 MTU。
- 使用 SSH 连接到实例,以验证是否可以访问这些实例。
在两个实例上安装 iperf3 网络基准测试工具
在某些发行版中,例如 Amazon Linux,iperf3 是 Extra Packages for Enterprise Linux (EPEL) 存储库的一部分。要启用 EPEL 存储库,请参阅如何为运行 CentOS、RHEL 或 Amazon Linux 的 Amazon EC2 实例启用 EPEL 存储库?
有关 iperf3 工具的详细信息,请参阅 ESnet 网站上的 iperf2/iperf3。
使用 SSH 连接到 Linux 实例。然后,根据您的操作系统 (OS) 运行以下命令之一来安装 iperf3。
Red Hat Enterprise Linux (RHEL) 9:
$ sudo dnf -y install iperf3
Debian 或 Ubuntu:
$ sudo apt-get install -y iperf3
CentOS 6/7:
$ sudo yum -y install epel-release && yum -y install iperf3
Amazon Linux 2023:
$ sudo yum -y install iperf3
测试实例之间的 TCP 网络性能
默认情况下,iperf3 在测试 TCP 性能时通过端口 5001 进行通信。但是,您可以使用 -p 开关来更改端口。请务必将您的安全组配置为允许通过 iperf3 使用的端口进行通信。
要将第一个实例配置为服务器以在特定 TCP 端口上侦听,请运行以下命令:
$ sudo iperf3 -s -p 5001
**注意:**如果您选择更改端口,请将 5001 替换为您的端口号。
将第二个实例配置为客户端,然后使用相关参数对服务器运行测试。例如,以下命令对具有 40 个并行连接的服务器实例启动 TCP 测试:
$ sudo iperf3 -c 172.31.30.41 --parallel 40 -i 1 -t 2
输出显示每个客户端流的时间间隔和每个客户端流传输的数据,以及每个客户端流使用的带宽。以下 iperf3 输出显示了在集群置放群组中启动的两个 c5n.18xlarge EC2 Linux 实例的测试结果。所有连接的总传输带宽为 97.6 Gb/s。
输出示例:
------------------------------------------------------------------------------------Client connecting to 172.31.30.41, TCP port 5001 TCP window size: 975 KByte (default) ------------------------------------------------------------------------------------ [ 8] local 172.31.20.27 port 49498 connected with 172.31.30.41 port 5001 [ 38] local 172.31.20.27 port 49560 connected with 172.31.30.41 port 5001 [ 33] local 172.31.20.27 port 49548 connected with 172.31.30.41 port 5001 [ 40] local 172.31.20.27 port 49558 connected with 172.31.30.41 port 5001 [ 36] local 172.31.20.27 port 49554 connected with 172.31.30.41 port 5001 [ 39] local 172.31.20.27 port 49562 connected with 172.31.30.41 port 5001 ... [SUM] 0.0- 2.0 sec 22.8 GBytes 97.6 Gbits/sec
测试实例之间的 UDP 网络性能
默认情况下,iperf3 在测试 UDP 性能时通过端口 5001 进行通信。但是,您可以使用 -p 开关来更改端口。请务必将您的安全组配置为允许通过 iperf3 使用的端口进行通信。
**注意:**除非指定不同的带宽,否则 UDP 的默认值为 1 Mb/s。
要将第一个实例配置为服务器以在特定 UDP 端口上侦听,请运行以下命令:
$ sudo iperf3 -s -u -p 5001
**注意:**如果您选择更改端口,请将 5001 替换为您的端口号。
将第二个实例配置为客户端,然后使用所需参数对服务器运行测试。以下示例针对 -b 参数设置为 5g 的服务器实例运行 UDP 测试。-b 参数将带宽从 UDP 的默认值 1 Mb/s 更改为 5 Gb/s。5 Gb/s 是 c5n.18xlarge 实例可以为 VPC 内的单个流量提供的最大网络性能:
$ sudo iperf3 -c 172.31.1.152 -u -b 5g
**注意:**UDP 是无连接的,没有 TCP 所拥有的拥塞控制算法。当使用 iperf3 进行测试时,从 UDP 获得的带宽可能低于从 TCP 获得的带宽。
输出示例:
$ sudo iperf3 -c 172.31.30.41 -u -b 5g ------------------------------------------------------------------------------------ Client connecting to 172.31.30.41, UDP port 5001 Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust) UDP buffer size: 208 KByte (default) ------------------------------------------------------------------------------------ [ 3] local 172.31.20.27 port 39022 connected with 172.31.30.41 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 5.82 GBytes 5.00 Gbits/sec [ 3] Sent 4251700 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 5.82 GBytes 5.00 Gbits/sec 0.003 ms 1911/4251700 (0.045%) [ 3] 0.00-10.00 sec 1 datagrams received out-of-order
前面的示例输出显示以下值:
- 间隔(时间)
- 传输的数据量
- 实现的带宽
- 抖动(数据图定期到达的时间偏差)
- UDP 数据报的丢失和总数
相关信息
ESnet 网站上的 Disk Testing using iperf3
ESnet 网站上的 Network tuning
ESnet 网站上的 Throughput tool comparison
SourceForge 网站上的 iperf2
ESNet 网站上的 iperf3 FAQ
相关内容
- AWS 官方已更新 7 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前