跳转至

CPU性能测试

服务器配置对比

服务器 PowerEdge R7415 PowerEdge R730
CPU AMD EPYC 7281 16-Core Processor Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz * 2
内存 16G DDR4 2666 MHz * 8 16G DDR4 2400 MHz * 8
RAID-type H730P/2G H730P/2G
硬盘 600G SAS 12.0Gb/s * 2 800G SSD 6.0Gb/s * 8

AMD EPYC 7281 CPU基本参数

CPU 核心数量 16
线程数量 32
L3缓存 32MB
主频 2.1GHz
动态加速频率 2.7GHz
热设计功耗(TDP) 155/170W

本次主要是对比两台服务器的CPU性能,一个是AMD 单颗 16核 32线程、 一个是intel 两颗 共16核32线程

Bash
root@pts/0 # cat /etc/redhat-release 
CentOS release 6.9 (Final)

sysbench工具

sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况

它主要包括以下几种方式的测试:

Bash
1
2
3
4
5
6
cpu性能
磁盘io性能
调度程序性能
内存分配及传输速度
POSIX线程性能
数据库性能(OLTP基准测试)

目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。对CPU的测试,主要是进行素数的加法运行

二进制安装

Bash
root@pts/0 # yum -y install sysbench 

下面针对不同CPU进行单独测试,测试命令如下:

Bash
sysbench cpu --cpu-max-prime=50000 --threads=32 --time=300 run

参数介绍

Bash
1
2
3
--cpu-max-prime: 素数生成数量的上限
如果设置为3,则表示2、3、5(要计算1-5共5次);如果设置为10,则表示2、3、5、7、11、13、17、19、23、29(要计算1-29共29次)
- 默认值为10000
Bash
1
2
3
--threads: 线程数,CPU是32线程的,所以这里测试为32
如果设置为1,则sysbench仅启动1个线程进行素数的计算;如果设置为2,则sysbench会启动2个线程,同时分别进行素数的计算
- 默认值为1,即单线程
Bash
1
2
3
4
5
--time: 运行时长,单位秒,这里测试300秒
如果设置为5,则sysbench会在5秒内循环往复进行素数计算,从输出结果可以看到在5秒内完成了几次;
比如配合--cpu-max-prime=3,则表示第一轮算得3个素数, 如果时间还有剩就再进行一轮素数计算,直到时间耗尽。
- 默认值为10
相同时间,比较的是谁完成的event多
Bash
1
2
3
4
--events: event上限次数
每完成一轮就叫一个event,设置为100,则表示当完成100次event后,即使时间还有剩,也停止运行
- 默认值为0,则表示不限event次数
相同event次数,比较的是谁用时更少

测试结果对比

1.AMD的结果

Bash
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 32
Initializing random number generator from current time


Prime numbers limit: 50000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:  2338.40

General statistics:
    total time:                          300.0112s
    total number of events:              701549

Latency (ms):
         min:                                    7.01
         avg:                                   13.68
         max:                                   56.78
         95th percentile:                       13.70
         sum:                              9599587.24

Threads fairness:
    events (avg/stddev):           21923.4062/35.32
    execution time (avg/stddev):   299.9871/0.01

2.Intel的结果

Bash
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 32
Initializing random number generator from current time


Prime numbers limit: 50000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:  1963.80

General statistics:
    total time:                          300.0156s
    total number of events:              589176

Latency (ms):
         min:                                    9.98
         avg:                                   16.29
         max:                                  134.85
         95th percentile:                       16.12
         sum:                              9599304.04

Threads fairness:
    events (avg/stddev):           18411.7500/1125.14
    execution time (avg/stddev):   299.9783/0.02

结果值对比

重要参数 参数含义 AMD 7281 intel E5-2620
CPU speed:
events per second 所有线程平均每秒完成event的个数 2338.40 1963.80
General statistics:
total time 总共消耗的时间 300.0112s 300.0156s
total number of events 所有线程完成的event个数 701549 589176
Latency (ms):
min 完成1次event的最少耗时 7.01 9.98
avg 所有event的平均耗时 13.68 16.29
max 完成1次event的最多耗时 56.78 134.85
95th percentile 95%次event完成的时间 13.70 16.12
sum 所有线程的时间综合 9599587.24 9599304.04
Threads fairness:
events (avg/stddev) 平均每个线程完成envet的次数,后一个值是标准差 21923.4062/35.32 18411.7500/1125.14
execution time (avg/stddev) 平均每个线程平均耗时,后一个值是标准差 299.9871/0.01 299.9783/0.02

stddev(标准差): 在相同时间内,多个线程分别完成的素数计算次数是否稳定,如果数值越低,则表示多个线程的结果越接近(即越稳定)。该参数对于单线程无意义

总结

如果多台服务器进行CPU性能对比,当线程和素数个数一定时:相同时间,比较event;相同event,比较时间;时间和event都相同,比较stddev(标准差)