- 文档首页
云服务器
云服务器ECS
最佳实践
性能测试
使用Sysbench测试云服务器性能
使用Sysbench测试云服务器性能
本文介绍如何使用Sysbench测试云服务器的CPU、内存、FileIO负载。
测试环境
- 存储:为了测试到最大的IOPS和带宽,建议实例挂载的云盘容量大于等于1000GiB。
说明
本文给出的测试环境和方法仅供参考,不代表实例的真实最优性能。
安装Sysbench
- 由于测试CPU、内存均为单机操作,只需要在测试机上执行如下命令,使用Linux操作系统软件源快速安装Sysbench即可。
apt update && apt -y install sysbench
- 如需在不同操作系统之间进行比较,为避免不同软件源安装的Sysbench版本存在差异,建议参考下文使用相同版本的软件源码编译方式进行安装。
apt -y install make automake libtool pkg-config libaio-dev
yum -y install make automake libtool pkgconfig libaio-devel
- (可选)如有数据库测试需求,请执行如下命令,安装对应的数据库。
apt -y install libmysqlclient-dev libssl-dev # 安装MySQL数据库
apt -y install libpq-dev # 安装PostgreSQL数据库
yum -y install mariadb-devel openssl-devel # 安装MySQL数据库(在RHEL/CentOS 5系统中替换为mysql-devel)
yum -y install postgresql-devel # 安装PostgreSQL数据库
- 依次执行如下命令,下载源代码。本文以1.0.20版本为例。
wget -c https://codeload.github.com/akopytov/sysbench/zip/refs/tags/1.0.20 -O sysbench-1.0.20.zip
unzip sysbench-1.0.20.zip
./configure # 默认使能MySQL。如果系统中没有mysql库,需改为“./configure --without-mysql”
- Sysbench将安装在“/usr/local/bin/sysbench”目录,您可以执行如下命令检查版本。
-
获取Sysbench帮助
执行如下命令,查看Sysbench的操作方法。
如需了解某项待测试负载的测试参数,请执行sysbench [testname] help命令,例如:
-
-
操作步骤
测试CPU负载
测试Memory负载
测试FileIO负载
测试说明
说明
除本文介绍的方式外,您也可以参考云服务器性能基准测试,使用UnixBench测试CPU单核/多核性能、SuperPI测试计算时长。 Sysbench的CPU测试,主要是通过执行大量的计算任务来评估CPU性能。即指定--cpu-max-prime参数的值,默认为10000,Sysbench将“计算1~该值范围内所有的质数(也叫素数,只能被1和自身整除的数)”为1个event,最终CPU的性能表现为每秒可以计算多少个这样的event。
操作步骤
sysbench cpu --cpu-max-prime=20000 --threads=1 --time=120 run
sysbench cpu --cpu-max-prime=20000 --threads=`nproc` --time=120 run
说明
Sysbench还提供--events参数来指定完成多少次event后停止测试,该参数在不同核数下不太容易指定,更建议使用--time参数。
-
-
- 从上图可以看出,Sysbench的CPU测试指标为events per second,平均每秒完成的event数,该值越大表示CPU计算性能越强。
注意
由于event的设定,不同--cpu-max-prime 参数得到的结果不能相互比较!
测试说明
说明
对于内存性能测试,Sysbench不是第一选择,您可以参考云服务器性能基准测试,使用Stream测试带宽、MLC测试时延。 Sysbench的内存性能测试,主要是针对不同大小的块进行连续读写或者随机读写操作。在内存性能测试中,events指的是读/写一个内存块。
相比较Stream和MLC工具,Sysbench测试内存性能比较复杂,支持较多参数,需要使用正确的参数配置才能得到预期的内存性能结果,测试前您可以查看Sysbench的Memory测试参数,具体请参见获取Sysbench帮助。 操作步骤
sysbench --memory-total-size=40000G --memory-block-size=512MB --memory-scope=global --memory-oper=read memory --threads=`nproc` --time=120 run
sysbench --memory-total-size=40000G --memory-block-size=512MB --memory-scope=local --memory-oper=write memory --threads=`nproc` --time=120 run
-
-
- 从上图可以看出,Sysbench的内存测试指标为MiB/sec,平均每秒测试的内存。也可以根据event的总数和完成时间反推内存读/写带宽,以上图(内存写)为例,一个event为写一个block-size(512MB),120.1638s完成26619个event,即总共写了26619 * 512MB的内存,除以耗时即是内存写带宽:26619 * 512MB / 120.1638s = 113418 MB/s。
测试说明
说明
对于磁盘IO测试,Sysbench不是第一选择,您可以参考测试存储性能,使用FIO测试IO时延、IOPS和存储带宽。 Sysbench的FileIO测试,其原理就是创建文件,并对多文件进行各种不同方式的读写(file-test-mode),如顺序写、顺序读、顺序读写;随机读、随机写、随机读写。测试过程需要三个阶段:准备阶段(prepare)、运行阶段(run)、清理阶段(cleanup)。在准备阶段创建测试所需数据,这些数据将在清理阶段被删除,注意在prepare和cleanup两个命令中的参数要一致。
相比较FIO工具,Sysbench测试需要注意如下几点差异:
- Sysbench必须要挂载磁盘并cd到该目录下测试(即测试文件系统下的文件读写),而FIO更多的是测试裸盘,所以可能存在性能上的差异;
- Sysbench FileIO测试默认通过pwrite/pread,性能较FIO(使用libaio做后端)差,所以测试时需要通过参数来指定使用libaio;
- Sysbench提供的Latency是基于event统计,统计口径可能和FIO不一致;此外测试IO时延通常选择FIO并指定iodepth为1,且FIO可以提供USEC级别的时延数据,这些都是Sysbench无法做到的,所以无法使用Sysbench测试IO时延。
操作步骤
- Sysbench无法直接测试裸盘,如果您需要测试ECS实例挂载的数据盘,请参考以下文档将磁盘挂载到文件系统中。
系统盘不需要分区格式化,创建云服务器时会自带系统盘并且自动分区格式化。
- 执行如下命令,进入测试前准备阶段(prepare)。完成后,测试目录下会多出一个测试文件,如下图所示。
sysbench fileio --file-total-size=20G --file-num=1 prepare
-
sysbench fileio --file-total-size=20G --file-num=1 --file-test-mode=rndwr --file-block-size=4k --max-requests=0 --file-io-mode=async --file-extra-flags=direct --file-rw-ratio=1 --file-fsync-freq=0 --time=300 run
-
sysbench fileio --file-total-size=20G --file-num=1 --file-test-mode=rndrd --file-block-size=4k --max-requests=0 --file-io-mode=async --file-extra-flags=direct --file-rw-ratio=1 --file-fsync-freq=0 --time=300 run
-
sysbench fileio --file-total-size=20G --file-num=1 --file-test-mode=seqwr --file-block-size=1024k --max-requests=0 --file-io-mode=async --file-extra-flags=direct --file-rw-ratio=1 --file-fsync-freq=0 --time=300 run
-
sysbench fileio --file-total-size=20G --file-num=1 --file-test-mode=seqrd --file-block-size=1024k --max-requests=0 --file-io-mode=async --file-extra-flags=direct --file-rw-ratio=1 --file-fsync-freq=0 --time=300 run
-
- 由于fileio 测试中产生了测试文件,所以需要使用cleanup进行清理,需要注意清理的参数需要和prepare一致。
sysbench fileio --file-total-size=100G --file-num=1 cleanup
- 使用Sysbench测试结果输出示例如步骤3所示,我们只需要关注“File operations” (IOPS)和“Throughput”(带宽)部分即可。
最近更新时间:2025.10.09 15:43:41