优化 EC2 Windows 实例上的网络性能 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

优化 EC2 Windows 实例上的网络性能

要在具有增强联网的 Windows 实例上实现最高网络性能,您可能需要修改默认操作系统配置。我们建议对于需要高网络性能的应用程序进行以下配置更改。官方 Windows AMI 上已经配置了其他优化(例如打开校验和卸载和启用 RSS)。

注意

大多数使用情况下应禁用 TCP Chimney 分载,自 Windows Server 2016 开始已弃用该功能。

除了这些操作系统优化之外,您还应考虑网络流量的最大传输单位 (MTU),并根据您的工作负载和网络架构相应调整。有关更多信息,请参阅EC2 实例的网络最大传输单位 (MTU)

Amazon 定期测量在集群置放群组中启动的实例之间的平均往返延迟,在 99.9% 的情况下该值为 50us,尾延迟为 200us。如果您的应用程序需要稳定的低延迟,建议在基于 Nitro 系统的固定性能实例上,使用最新版本的 ENA 驱动程序。

配置接收端缩放 CPU 关联

使用接收端缩放 (RSS) 在多个处理器之间分布网络流量 CPU 负载。默认情况下,Amazon 官方 Windows AMI 配置为启用 RSS。ENA 弹性网络接口最多提供 8 个 RSS 队列。通过为 RSS 队列以及其他系统进程定义 CPU 关联,可以在多核系统上分布 CPU 负载,允许处理更多的网络流量。如果实例类型上的 vCPU 超过 16 个,建议使用 Set-NetAdapterRSS PowerShell cmdlt,因为这会手动从所有弹性网络接口的 RSS 配置中排除启动处理器(启用超线程时为逻辑处理器 0 和 1),以防与各种系统组件争用。

Windows 具有超线程感知功能,可确保单个网络接口卡(NIC)的 RSS 队列始终位于不同的物理内核上。因此,除非禁用超线程,否则为了完全防止与其他 NIC 的争用,请将每个 NIC 的 RSS 配置分布在 16 个逻辑处理器的范围内。Set-NetAdapterRss cmdlet 允许您通过定义 BaseProcessorGroup、BaseProcessorNumber、MaxProcessingGroup、MaxProcessorNumber 和 NumaNode(可选)的值来定义有效逻辑处理器的各 NIC 范围。如果没有足够的物理内核来完全消除 NIC 间的争用,则尽量缩小重叠范围或减少弹性网络接口范围内的逻辑处理器数量,具体取决于接口的预期工作负载(换句话说,低容量管理网络接口可能不需要分配尽可能多的 RSS 队列)。此外,如前所述,各种组件必须在 CPU 0 上运行,因此我们建议在有足够的 vCPU 时将其从所有 RSS 配置中排除。

例如,当具有 72 个 vCPU 的实例上有 3 个弹性网络接口,其中 2 个 NUMA 节点启用了超线程时,以下命令会在两个 CPU 之间分布网络负载而不会重叠,并完全阻止内核 0 的使用。

Set-NetAdapterRss -Name NIC1 -BaseProcessorGroup 0 -BaseProcessorNumber 2 -MaxProcessorNumber 16 Set-NetAdapterRss -Name NIC2 -BaseProcessorGroup 1 -BaseProcessorNumber 0 -MaxProcessorNumber 14 Set-NetAdapterRss -Name NIC3 -BaseProcessorGroup 1 -BaseProcessorNumber 16 -MaxProcessorNumber 30

请注意,这些设置对每个网络适配器都是持久的。如果将实例调整为具有不同数量的 vCPU 的实例,则应重新评估启用的每个弹性网络接口的 RSS 配置。Set-NetAdapterRss cmdlet 的完整 Microsoft 文档可在以下位置找到:https://docs.microsoft.com/en-us/powershell/module/netadapter/set-netadapterrss

SQL 工作负载特别注意事项:建议检查输入/输出线程关联设置以及弹性网络接口 RSS 配置,以便最大限度地减少相同 CPU 的输入/输出和网络争用。请参阅关联掩码服务器配置选项