服务器稳定性及基准测试方法
测试项
CPU基准测试
| 测试项 | 测试工具 | 参考业务场景 | 测试方式 |
|---|---|---|---|
| 双精度浮点运算 float64 | HPL | 该项测试为HPC行业标准,TOP500超级计算机排行榜均采用该方式评估 | 测试3次取均值 |
内存基准测试
| 测试项 | 测试工具 | 选择理由 | 测试方式 |
|---|---|---|---|
| 内存带宽 | STREAM Benchmark | HPC内存带宽的行业标准测试,TOP500超级计算机排行榜均采用该方式评估 | Copy/Scale/Add/Triad测试3次取均值 |
硬盘测试
| 测试项 | 测试工具 | 参考业务场景 | 测试方式 |
|---|---|---|---|
| 4k单队列 | fio bs=4k iodepth=1 | MySQL场景 | 测试3次取均值 |
| 4k 32队列 | fio bs=4k iodepth=32 | MongoDB场景 | 测试3次取均值 |
| 32k 32队列 | fio bs=32k iodepth=32 | 高并发Web服务,Kafka日志刷盘,多线程缓存写入 | 测试3次取均值 |
| 1m 单队列 | fio bs=1m iodepth=1 | 顺序读写,备份、视频流、镜像分发 | 测试3次取均值 |
| 1m 32队列 | fio bs=1m iodepth=32 | 并发大文件读写,大规模备份,分布式存储,对象存储 | 测试3次取均值 |
| 硬盘压测 | fio -numjobs=32 -bs=4k -iodepth=64 -directory | 具体代码见下方及下文中有关于fio参数的解释 |
补充说明:除系统盘不能直接测试裸盘外,其他盘均应使用裸盘测试,如
fio -filename=/dev/sdb和fio -filename=/dev/nvme0n1,直接指向硬盘块设备,而不是分区或路径
1 | fio -name=disk_benchmark -size=5G -runtime=5d -time_base -direct=1 -ioengine=libaio -randrepeat=0 -numjobs=32 -group_reporting -bs=4k -rw=randrw -rwmixwrite=30 -directory=/home/test/ -iodepth=64 |
其中针对业务场景,根据单台服务器部署的业务数量适当设置numjobs以模拟操作系统/应用层并发。
例如单台服务器4个数据库,则fio bs=4k iodepth=32 numjobs=4。
iodepth对应单个线程的队列深度,用于存储设备并发能力测试
numjobs对应多个线程并发,用于测试操作系统/应用层并发能力
综合基准测试
| 测试项 | 测试工具 | 参考业务场景 | 测试方式 |
|---|---|---|---|
| 综合性能指数 | GeekBench | 横向比较整机性能,仅供参考 | 普通测试 |
CentOS 7.9.2009跑不了GeekBench 6
测试过程
AMD 9F14平台测试
安装CentOS 7.9.2009
替换源为清华大学CentOS-Vault源
在清华CentOS-Vault仓库输入小版本,获取命令
例如CentOS 7.9.2009如下
1 | sed -e "s|^mirrorlist=|#mirrorlist=|g" \ |
该命令执行后会将原本的所有源配置文件备份为带.bak后缀名的备份
可以通过下方的命令快速还原
1 | 启用bash扩展通配符 |
yum makecache更新源
yum install vim安装vim编辑器
1 | 更新源 |
准备CPU的Linpack测试
1 | 基础环境 |
HPL.dat的参数及其说明
在线生成HPL.dat文件的网站 HPL.dat
| 参数 | 说明 |
|---|---|
| Nodes | 对应CPU数量 |
| Cores per Node | 每个CPU多少核 |
| Memory per Node(MB) | 每个CPU有多少MB内存 |
| Block Size(NB) | HPL运算的块大小 |
NB 块大小计算方式:
设置适当的块大小,使数据块能够很好的放入CPU的高速缓存(L2/L3 Cache),如果数据块不能放入高速缓存,则不得不从慢得多的主内存RAM中进行读取,从而导致性能瓶颈。
NB最好是PQ的整数倍,以我的AMD 9A14为例,L3为384MB,96核心
HPL将矩阵N分块成NB*NB的小块,然后分布在一个二维进程网格P行Q列上
所以如果任何一方过长,就会造成通信路径变长,从而导致性能开销大
为了使性能达到最优,需要使这个二维网格接近正方形,也就是PQ值相近,且同时P*Q需要等于核心数,以确保每个核心都有数据块在计算
PQ计算公式
使用在线生成则直接跳过此处即可,仅用作学习
1 | 根据内核数量取近似的能开方的整数 |
NB块大小计算公式
1 | 首先查询CPU的L3缓存 |
最终计算出NB为384
注意其中Nodes填的是有多少个CPUCores per Node则是每个CPU有多少物理内核Memory per Node(MB)是每个CPU有多少内存可用,所以内存条也需要均匀安装Block Size(NB)则是填入上方计算的值

在线生成后的HPL.dat如下,HPL只会读取第一列,数字后方的是注释,带#的也是注释
1 | HPLinpack benchmark input file |
根据这份文件,运行命令如下:
1 | mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl |
关于参数的解释在官网有详细说明HPL Tuning
进行内存的基准测试
使用STREAM Benchmark进行测试
1 | 安装编译工具 |
输出结果如下,只需要第30行中Triad的带宽212674.9MB/s和延迟的平均值Avg time
1 | ------------------------------------------------------------- |
只取其中的典型值Triad即可,代表典型科学计算/数值模拟中的内存访问性能
硬盘性能fio测试
使用fio进行硬盘的性能测试,测试结果包含IOPS、带宽、延迟
1 | 安装fio |
综合性能测试
使用CentOS 7.9.2009和GeekBench进行综合性能评估
下载地址 geekbench
1 | 解压下载的压缩包 |
稳定性测试
鉴于HPL测试本身就会使服务器CPU内存满载,所以直接在上文CPU测试的基础上直接变成重复执行即可做到稳定性测试,配合带外观察CPU温度内存等是否故障即可
1 | 循环运行100次 |
使用该脚本运行并将运行结果也进行统计,方便同时观察性能是否有波动
1 | for i in {1..1000}; do |