准备工作

  • 明确测试项目和指标
    本例:
    CPU:每秒运算数
    内存:内存带宽、内存延迟
    存储:IOPS、带宽、时延
    网络:上传、下载带宽
  • 对比基准测试数据以对结果进行评估
    数据来源可以为云商提供的产品介绍或者其他的测评报告,测试时维持配置一致即可。
    本测试机型为8核心32GB机器,对比以下基准数据

开始测试

  • CPU
    1、测试工具sysbench
# threads与cpu核心数量一致,避免上下文切换,建议测试3次,取平均结果
	rpm -ql sysbench || yum -y install sysbench
	sysbench cpu --cpu-max-prime=20000 --threads=8 --time=50 run
	sysbench cpu --cpu-max-prime=20000 --threads=8 --time=50 run
	sysbench cpu --cpu-max-prime=20000 --threads=8 --time=50 run

2、关键结果

云服务器 硬件 云服务器硬件时间_sed

3、基准数据对比评价:略

  • 内存带宽:
    1、测试工具stream
# stream需要手动编译后执行,编译的参数会影响到测试结果
rpm -ql gcc || yum -y install gcc
[ -e stream.c ] || wget http://www.cs.virginia.edu/stream/FTP/Code/stream.c 
gcc  -march=native -O3 -mcmodel=medium -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIMES=30 -DOFFSET=4096 stream.c -o stream.o 
./stream.o

2、关键结果

云服务器 硬件 云服务器硬件时间_测试工具_02

3、基准数据对比评价:略

4、额外说明:stream.c的编译参数对于测试结果有较大影响,其中参数的作用可以参见这篇文章

  • 内存延迟
    1、测试工具Intel MLC
[ -e mlc_v3.9.tgz ] || wget https://software.intel.com/content/dam/develop/external/us/en/protected/mlc_v3.9.tgz
[ -d Linux ] || tar xzf mlc_v3.9.tgz
num=$(cat /proc/sys/vm/nr_hugepages 2> /dev/null)   
echo 4000 > /proc/sys/vm/nr_hugepages
cd Linux && ./mlc --latency_matrix
echo $num > /proc/sys/vm/nr_hugepages

2、关键结果

云服务器 硬件 云服务器硬件时间_云服务器 硬件_03

3、基准数据对比评价:略

  • 存储
    1、测试工具fio
#将命令中的target替换成目标磁盘(块设备而非分区),此此操作会破坏磁盘数据,如果不像破坏磁盘数据,请将测试目标替换为磁盘挂载的目录中的一个文件

#随机读IOPS
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randread -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-iops --size=1G -filename=${target} --runtime=30s   

#随机写IOPS
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randwrite -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-iops --size=10G -filename=${target} --runtime=30s
 
#随机读时延
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randread -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-lat --size=10G  --runtime=30s  -filename=${target}
 
 
#随机写时延
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randwrite -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-lat --size=10G --runtime=30s -filename=${target}
 
#随机读带宽
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=read -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-read-throughput --size=10G --runtime=30s -filename=${target}
 
#随机写带宽
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=write -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-write-throughput --size=10G --runtime=30s -filename=${target}

2、关键结果

云服务器 硬件 云服务器硬件时间_云服务器 硬件_04

3、基准数据对比评价:略

4、额外说明:不能进使用一条命令的结果来获取各个指标项目的值,因为参数的不同会导致结果的不同而影响到获取到的指标的值,使用具体的命令获取具体项目的值已得到更真实的结果

  • 网络测试
    1、测试工具speedtest
rpm -ql speedtest || (yum install wget && wget https://bintray.com/ookla/rhel/rpm -O bintray-ookla-rhel.repo && mv bintray-ookla-rhel.repo /etc/yum.repos.d/ && yum -y install speedtest)
speedtest

2、关键结果:见终端输出

3、基准数据对比评价:略

4、额外说明:speedtest仅测试最近的一个测速点,如果想更换测速点,使用speedtest -L 列出测速点,使用speedtest -s <上一条命令获取的测速节点的编号>测试指定测速点

整理为测试脚本以复用

脚本链接