在Azure上选择虚拟机规格时,vCPU数量和内存容量通常是首要指标,但真正决定部分工作负载上限的却是内存带宽。例如数据库的索引扫描、内存缓存系统、科学计算中的大规模数组运算,这些操作在CPU占用率并不高的情况下,依然会因内存通道饱和而出现性能平台。Stream基准测试通过Copy、Scale、Add和Triad四种向量运算测量可持续内存带宽,是业界公认的访存性能测试工具。本文使用Stream 5.10版本,在多个Azure虚拟机系列上完成测试,下面对测试环境、实测数据和选型建议做详细展开。

一、测试方法与环境配置
测试环境统一使用Windows Server 2022 Datacenter系统镜像,虚拟机创建后关闭Windows Defender实时扫描、系统还原和内存压缩功能,避免后台任务干扰带宽测试。Stream可执行文件使用Microsoft C/C++编译器MSVC构建,编译参数为/O2 /openmp,并将数组大小设置为物理内存的4倍以上,确保数据无法驻留在CPU缓存中。测试文件放置在C:\stream\目录下,运行命令为C:\stream\stream.exe,线程数通过环境变量OMP_NUM_THREADS指定。
cd C:\stream set OMP_NUM_THREADS=4 stream.exe
在Azure门户创建虚拟机时,本文选取了三个代表性系列:通用型Dv5、内存优化型Ev5和计算优化型Fv2,每个系列分别测试2核和4核规格,例如Standard_D2s_v5、Standard_D4s_v5、Standard_E2s_v5、Standard_E4s_v5、Standard_F2s_v2和Standard_F4s_v2。为了保证数据稳定,每项测试重复5轮,取平均值,并在测试前执行一次预热运行,排除首次内存分配和页表建立的影响。虚拟机网络和磁盘I/O在测试期间保持空闲,内存带宽测试不受远程存储影响,因此结果具备较好的可重复性。
二、各系列Azure虚拟机实测结果
测试结果表明,内存带宽与虚拟机系列和规格密切相关,四个指标的相对关系基本一致,其中Triad带宽通常最高,Copy次之,Scale和Add略低。以4核规格为例,Standard_E4s_v5的Triad带宽达到约25GB/s,Standard_D4s_v5为22GB/s,Standard_F4s_v2则达到28GB/s。计算优化型Fv2系列在内存带宽上表现突出,这与其采用的物理主机CPU型号和内存通道配置有关。
| 虚拟机规格 | Copy (GB/s) | Scale (GB/s) | Add (GB/s) | Triad (GB/s) |
|---|---|---|---|---|
| Standard_D2s_v5 | 16.8 | 18.2 | 19.1 | 19.5 |
| Standard_D4s_v5 | 20.4 | 21.6 | 21.9 | 22.3 |
| Standard_E2s_v5 | 18.3 | 19.7 | 20.2 | 20.8 |
| Standard_E4s_v5 | 23.1 | 24.2 | 24.8 | 25.3 |
| Standard_F2s_v2 | 19.6 | 21.0 | 21.8 | 22.1 |
| Standard_F4s_v2 | 26.7 | 27.5 | 27.9 | 28.4 |
从数据中可以看出,2核到4核的提升比例并非等比例。Dv5系列从2核升级到4核,Triad带宽提升约14%;Ev5系列提升约21%;Fv2系列提升约28%。这说明vCPU数量增加带来了更多并发访存请求,但实际提升受限于底层物理机的内存控制器数量和NUMA拓扑。如果虚拟机恰好运行在共享内存通道较多的宿主上,带宽提升会更明显。
另一个值得注意的现象是突发型B系列和部分旧型号的带宽波动较大。实测中Standard_B2s的Triad带宽在7GB/s到14GB/s之间抖动,这与其基线性能限制和宿主资源争抢有关。因此,对于需要稳定高带宽的场景,不建议选择突发型实例,而应使用内存优化型或计算优化型系列并固定性能模式。
三、影响内存带宽的关键因素与优化建议
Azure虚拟机的内存带宽并非完全由用户配置决定,底层物理机的内存通道数、NUMA节点布局以及同一宿主上的邻居虚拟机负载都会产生影响。对于较大的实例,例如Standard_E8s_v5或更高规格,操作系统会暴露多个NUMA节点。默认情况下Windows调度器可能将线程分散到不同NUMA节点,导致内存访问跨越节点,增加延迟并降低带宽。可以通过Windows的NUMA拓扑查询来确认当前分配情况。
Get-CimInstance Win32_Processor | Select-Object Name,NumberOfCores,NumberOfLogicalProcessors Get-CimInstance Win32_NumaNode | Select-Object NodeNumber,NumberOfLogicalProcessors
以上命令输出中,存在多个NUMA节点时,建议在运行Stream时通过启动参数或环境变量将线程绑定到单个NUMA节点。Windows Server可以使用启动命令中的affinity掩码,但更简单的方式是使用任务管理器设置进程相关性,或者在代码中调用SetThreadAffinityMask API。对于Linux平台,可以使用numactl工具,但本文以Windows环境为主。
除了NUMA绑定,优化内存带宽还可以从几个方面入手。第一,选择内存通道更多的高规格实例,例如Ev5系列中的E8s_v5以上规格通常拥有更多内存带宽配额。第二,关闭超线程,避免逻辑处理器争抢同一核心的访存带宽。在Windows Server上,可以在BIOS或Azure门户中调整,但Azure虚拟机默认启用超线程,用户可以通过调整线程数只使用物理核数量来规避。第三,使用大页内存能够减少页表遍历开销,对Stream这类数组访问频繁的负载有一定帮助。不过Windows Server默认配置下大页需要额外设置,不建议在生产环境直接开启。
最后需要强调,Stream基准测试提供的可持续带宽与内存峰值带宽不同,更能反映长时间运行下的真实能力。在选型时,不要仅参考厂商宣传的峰值带宽,而应结合自身的并发访问模式,使用同样的测试方法在目标规格上实测。如果预算允许,优先选择内存优化型和计算优化型系列,并根据NUMA拓扑合理分配线程,能够有效提升内存密集型应用的稳定性与吞吐量。
Azure虚拟机Stream内存带宽内存性能评测修改时间:2026-09-25 17:29:47