正文
Stream的简单学习
前言
https://github.com/jeffhammond/STREAM
unzip STREAM-master.zip
cd /STREAM-master/
make
就可以编译完成
含义
STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。
随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,
如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,
若干处理核心就会处于等待数据的闲置状态,
而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。
STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试。
STREAM支持Copy 、Scale 、 Add、 Triad四种操作,下面分别介绍四种操作的含义:
1. Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
2. Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
3. Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。
4. Triad的中文含义是将三个组合起来
测试说明
编译处理
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=102400000 -DNTIMES=10 stream.c -o stream
注意需要说明一下
-O3 是最高优化级别。
-fopenmp 打开多线程,默认是CPU进程棵树个进行测试。
-DNTIMES 是测试次数
-DSTREAM_ARRAY_SIZE 是数据大小, 一般越大了测出来的带宽值越高, 但是太高了无法编译通过。
numa节点验证
CPU的内存宽带于延时于numa节点是比较关联的。
此时可以使用taskset的方式进行测试与验证。
自己进行了下简单验证(没有看源码的情况)
最大的编译参数为:
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=133000000 -DNTIMES=10 stream.c -o stream07
可以利用stream07 进行带宽和延迟的确认
比如我有一个四路18核心,超线程一共144核心的机器。
lscpu的信息为:
Model name: Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz
NUMA node0 CPU(s): 0-17,72-89
NUMA node1 CPU(s): 18-35,90-107
NUMA node2 CPU(s): 36-53,108-125
NUMA node3 CPU(s): 54-71,126-143
所以可以基于此进行一下内存带宽测试
taskset -c 0-17 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 80698.3 0.038024 0.026370 0.050407
Scale: 71702.7 0.045104 0.029678 0.063957
Add: 82799.7 0.049889 0.038551 0.061930
Triad: 79870.1 0.050717 0.039965 0.061486
taskset -c 0-17,72-89 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 80909.8 0.041473 0.026301 0.050996
Scale: 66545.5 0.044492 0.031978 0.054915
Add: 74106.9 0.057651 0.043073 0.080074
Triad: 74125.3 0.052560 0.043062 0.067384
taskset -c 8-25 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 77104.0 0.032293 0.027599 0.041383
Scale: 73651.1 0.039079 0.028893 0.044384
Add: 94898.7 0.044708 0.033636 0.051819
Triad: 74424.5 0.051721 0.042889 0.053071
云海物理机和虚拟机的情况
8核心虚拟机:
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 55348.7 0.039446 0.038447 0.040298
Scale: 51103.5 0.042791 0.041641 0.044352
Add: 56728.5 0.058115 0.056268 0.061302
Triad: 55520.8 0.058673 0.057492 0.062518
仅使用物理机器上面8个核心的服务器的情况
Function Best Rate MB/s Avg time Min time Max time
Copy: 48413.5 0.091299 0.044153 0.244530
Scale: 41152.8 0.078635 0.051943 0.114169
Add: 37340.2 0.122306 0.085870 0.175331
Triad: 47968.4 0.119108 0.066844 0.235003
发现云海OS的宿主机可能内核较早性能不是特别好。不建议用虚拟机作为生产
Model name: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
NUMA node0 CPU(s): 0-11,24-35
NUMA node1 CPU(s): 12-23,36-47
机器信息为:
Linux node-653-137 3.10.0-957.1.1.el7.x86_64 #1 SMP Wed Jul 28 14:46:37 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux
看看国产化设备的数据-飞腾
飞腾S2500
NUMA 节点0 CPU: 0-7
NUMA 节点1 CPU: 8-15
NUMA 节点2 CPU: 16-23
NUMA 节点3 CPU: 24-31
NUMA 节点4 CPU: 32-39
NUMA 节点5 CPU: 40-47
NUMA 节点6 CPU: 48-55
NUMA 节点7 CPU: 56-63
NUMA 节点8 CPU: 64-71
NUMA 节点9 CPU: 72-79
NUMA 节点10 CPU: 80-87
NUMA 节点11 CPU: 88-95
NUMA 节点12 CPU: 96-103
NUMA 节点13 CPU: 104-111
NUMA 节点14 CPU: 112-119
NUMA 节点15 CPU: 120-127
测试情况:
taskset -c 0-7 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 3758.6 0.567231 0.566170 0.569430
Scale: 3845.8 0.553693 0.553331 0.554323
Add: 3765.9 0.850122 0.847612 0.853893
Triad: 3725.3 0.858621 0.856852 0.861436
taskset -c 0-15 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 5259.5 0.407384 0.404602 0.410021
Scale: 5268.6 0.417937 0.403900 0.423356
Add: 5797.0 0.565010 0.550634 0.577339
Triad: 5650.2 0.576209 0.564937 0.586471
全核心的带宽为:
Function Best Rate MB/s Avg time Min time Max time
Copy: 49553.0 0.078493 0.042944 0.110835
Scale: 52869.5 0.072087 0.040250 0.102296
Add: 49359.7 0.107320 0.064668 0.147577
Triad: 49677.1 0.104581 0.064255 0.147939
说明:
飞腾128核心的内存带看不如Intel 6150
速度也比较差一些。 访存性能差距较大。
国产设备内存性能-海光
NUMA 节点0 CPU: 0-7,64-71
NUMA 节点1 CPU: 8-15,72-79
NUMA 节点2 CPU: 16-23,80-87
NUMA 节点3 CPU: 24-31,88-95
NUMA 节点4 CPU: 32-39,96-103
NUMA 节点5 CPU: 40-47,104-111
NUMA 节点6 CPU: 48-55,112-119
NUMA 节点7 CPU: 56-63,120-127
taskset -c 0-7 ./stream07
Function Best Rate MB/s Avg time Min time Max time
Copy: 31427.2 0.067976 0.067712 0.069821
Scale: 20904.3 0.102741 0.101797 0.109792
Add: 23203.4 0.139136 0.137566 0.144384
Triad: 23167.7 0.138510 0.137778 0.142723
全核心性能为:
Function Best Rate MB/s Avg time Min time Max time
Copy: 113820.7 0.022691 0.018696 0.045123
Scale: 101512.4 0.022498 0.020963 0.023655
Add: 101659.3 0.033122 0.031399 0.033853
Triad: 105336.1 0.031282 0.030303 0.033287
海光机器的性能还是非常可观的。
AMD9T34 虚拟机
16核心的虚拟机,内存带宽56GB左右。 不管是1-8核心还是全部核心结果比较相近。
Function Best Rate MB/s Avg time Min time Max time
Copy: 56055.8 0.038005 0.037962 0.038032
Scale: 52517.3 0.040593 0.040520 0.040656
Add: 52852.9 0.060418 0.060394 0.060440
Triad: 52811.0 0.060483 0.060442 0.060538
倚天710 虚拟机
8核心的倚天虚拟机 内存带宽爆表 基本上是最高的档次,时间基本上也是最低的。
Function Best Rate MB/s Avg time Min time Max time
Copy: 98614.3 0.022174 0.021579 0.026098
Scale: 99152.2 0.022183 0.021462 0.026906
Add: 98223.9 0.033475 0.032497 0.040199
Triad: 98640.1 0.033317 0.032360 0.039705