性能测试方法
更新时间:2024-11-04
本文介绍如何使用Vdbench工具对PFS并行文件存储进行IOPS、吞吐和时延的性能测试。
前提条件
- 您已创建待测试的PFS文件系统,并将PFS文件系统挂载到BCC云服务器上。
- 创建PFS文件系统请见:创建文件系统。
- PFS 极速型L2的挂载方式请见:BCC挂载与卸载(极速型L2)。
- PFS 标准型、增强型和极速型的挂载方式请见:BCC挂载与卸载(标准型、增强型和极速型)。
- PFS所提供的性能规格,除时延参数外,均需要一定规模的并发压测才能达到最大值。建议压测时准备 32C 以上的BCC云服务器作为客户端,可满足大部分场景的压测需求。其他压测需求,可根据实际情况配置对应的BCC云服务器。
- 进行性能压测时,尤其是时延测试,需要保证BCC云服务器(客户端)和 PFS 处于同可用区。跨可用区测试的性能结果会和标准值有较大差异,不具备参考价值,应尽量避免。
背景信息
推荐使用Vdbench工具测试PFS文件系统性能,不同工具测试的PFS性能会有差异,难以反映真实性能。本文示例的性能参数,均为Linux系统下采用Vdbench工具的测试结果,以此作为PFS文件系统产品性能指标参考。本次具体的性能指标说明如下:
- IOPS:每秒读写数据块的数量,单位个/s。建议基于 512MB 的文件,采用并发(多机多线程)的 4K 小 IO 进行 IOPS 的基准测试。
- 吞吐:每秒读写数据量的大小,单位 GiB/s 或 MiB/s。建议基于 512MB 的文件,采用并发(多机多线程)的 1M 大 IO 进行吞吐的基准测试。
- 时延:处理读写请求的耗时,单位 ms。建议基于 512MB 的文件,采用单流(单线程)的 4K 小 IO 进行时延的基准测试。
测试步骤
- 远程登录BCC云服务器(客户端)。
- 安装Vdbench测试工具,关于 Vdbench 软件包的地址,请参见Vdbench Downloads。
Plain Text
1# 使用root用户执行
2unzip vdbench50407.zip -d /root/vdbench ## 请替换成下载的软件包
3
4# 安装jdk
5## centos系统
6yum -y install java-1.8.0-openjdk.x86_64
7
8## ubuntu系统
9apt -y install openjdk-8-jdk
- 性能测试
- vdbench配置
Plain Text
1## /root/vdbench/jobs/512m_rw.job
2
3hd=default,vdbench=/root/vdbench,shell=ssh,user=root
4hd=hd01,system=192.168.1.10x(测试客户端IP信息,自行替换)
5hd=hd02,system=192.168.1.10x(测试客户端IP信息,自行替换)
6hd=hd03,system=192.168.1.10x(测试客户端IP信息,自行替换)
7
8fsd=fsd1_01,anchor=/mnt/pfs/xx(测试文件系统路径,自行替换),depth=1,width=1,files=1024(文件个数,自行替换),size=512m,openflags=o_direct
9fsd=fsd1_02,anchor=/mnt/pfs/xx(测试文件系统路径,自行替换),depth=1,width=1,files=1024(文件个数,自行替换),size=512m,openflags=o_direct
10fsd=fsd1_03,anchor=/mnt/pfs/xx(测试文件系统路径,自行替换),depth=1,width=1,files=1024(文件个数,自行替换),size=512m,openflags=o_direct
11
12fwd=fwd1_01,fsd=fsd1_01,host=hd01,operation=write,fileio=sequential,fileselect=sequential
13fwd=fwd1_02,fsd=fsd1_02,host=hd02,operation=write,fileio=sequential,fileselect=sequential
14fwd=fwd1_03,fsd=fsd1_03,host=hd03,operation=write,fileio=sequential,fileselect=sequential
15
16fwd=fwd2_01,fsd=fsd1_01,host=hd01,operation=read,fileio=sequential,fileselect=sequential
17fwd=fwd2_02,fsd=fsd1_02,host=hd02,operation=read,fileio=sequential,fileselect=sequential
18fwd=fwd2_03,fsd=fsd1_03,host=hd03,operation=read,fileio=sequential,fileselect=sequential
19
20# 顺序写吞吐场景示例
21rd=seqw_512m_4m,fwd=fwd1_*,forxfersize=(4m),threads=128,fwdrate=max,format=restart,elapsed=600,interval=1,pause=1m
22# 顺序写IOPS、延迟场景示例
23rd=seqw_512m_4k,fwd=fwd1_*,forxfersize=(4k),threads=128,fwdrate=max,format=restart,elapsed=600,interval=1,pause=1m
24# 顺序读吞吐场景示例
25rd=seqr_512m_4m,fwd=fwd2_*,forxfersize=(4m),threads=128,fwdrate=max,format=restart,elapsed=600,interval=1,pause=1m
26# 顺序读IOPS、延迟场景示例
27rd=seqr_512m_4k,fwd=fwd2_*,forxfersize=(4k),threads=128,fwdrate=max,format=restart,elapsed=600,interval=1,pause=1m
- vdbench命令
Plain Text
1cd /root/vdbench
2./vdbench -f jobs/512m_rw.job
附录 - Vdbench 参数说明
说明:文件系统参数文件定义顺序为:HD、FSD、FWD、RD。
HD(Host Define)参数
主机定义,在多主机联机测试时需要配置,各参数说明如下
Plain Text
1# 配置案例
2
3hd=default,vdbench=/root/vdbench,shell=ssh,user=root
4hd=hd01,system=node1
5hd=hd02,system=node2
6hd=hd03,system=node3
| 参数 | 说明 |
|---|---|
| hd | 主机定义的名称,多主机运行时,可以使用 hd01、hd02 等名称进行区分。 |
| system | 主机 IP 地址或主机名称。 |
| vdbench | Vdbench 执行文件存放路径,当多主机存放路径不同时,可在 hd 定义时单独指定该路径。 |
| user | slave 和 master 之间通信使用的用户。 |
| shell | 多主机联机测试时,mater 和 slave 主机间通信方式。取值说明如下:rsh:使用 rsh 互信,由于 rsh 使用明文传输,安全级别不够,不建议使用该种通信方式。ssh:使用 ssh 互信,通常 Linux 主机联机时使用此通信方式。vdbench:需要在所有 slave 主机运行vdbench rsh命令启用 Vdbench 本身的rsh守护进程,通常 Window 主机联机时使用此通信方式。 |
FSD(File System Define)参数
Plain Text
1## 配置案例
2
3fsd=default,openflags=directio,depth=2,width=3,files=2,size=128k
4fsd=fsd1,anchor=/mnt/client1
5fsd=fsd2,anchor=/mnt/client2
6fsd=fsd3,anchor=/mnt/client3
| 参数 | 说明 |
|---|---|
| fsd | 文件系统定义的名称,多文件系统时(fsd1、fsd2、fsd3…),可以指定default,将相同的参数作为所有 fsd 的默认值。 |
| openflags | 通过设置为o_direct或directio,以无缓冲缓存的方式进行读写操作。 |
| anchor | 文件写入目录。 |
| depth | 创建目录层级数,即目录深度。 |
| width | 每层文件夹的子文件夹数。 |
| files | 测试文件个数。 说明:Vdbench 测试过程中会生成多层级目录结构,实际只有最后一层目录会生成测试文件。 |
| size | 每个测试文件大小。 |
| shared | 用于设置客户端是否共享目录结构,取值如下: yes:不同的slave 可以平分一个目录下所有的文件来进行访问,相当于每个 slave 有各自等分的访问区域。当多主机联机测试时,写入的根目录anchor为同一个路径时,需要指定参数值为yes。no:不同的 slave 可以独占一个目录下所有的文件来进行访问。 |
说明
depth、width、files之间的计算公式如下:
- 最后一层生成文件夹个数=
width^depth- 测试文件个数=
width^depth×files其中,^ 表示次方。例如width为 3,depth为 2,则最后一层生成文件夹个数为 3 的 2 次方。
FWD(FileSystem Workload Defile)参数
Plain Text
1fwd=default,operation=read,xfersize=4k,fileio=sequential,fileselect=random,threads=2
2fwd=fwd1,fsd=fsd1,host=hd1
3fwd=fwd2,fsd=fsd2,host=hd2
4fwd=fwd3,fsd=fsd3,host=hd3
| 参数 | 说明 |
|---|---|
| fwd | 文件系统工作负载定义的名称,多文件系统工作负载定义时,可以使用 fwd1、fwd2、fwd3 进行区分。 |
| fsd | 工作负载使用文件存储定义的名称。 |
| host | 工作负载使用的主机。 |
| operation | 文件操作方式,可选值为read或write。 |
| rdpct | 可选取值为0-100,读操作占比百分比,一般混合读写时需要指定该参数。可选值为0~100,当值为 60 时,则混合读写比为 6:4。 |
| fileio | 文件 I/O 执行的方式,可选值为random或sequential。 |
| fileselect | 选择文件或目录的方式,可选值为random或sequential。 |
| xfersizes | 数据传输(读取和写入操作)处理的数据大小,即单次 IO 大小。 |
| threads | 工作负载的并发线程数量。 |
注意:默认情况下,预填数据工作负载定义为
threads=8,xfersize=128k,即预填数据使用 8 线程,IO 大小为 128K,如需更改默认预填数据工作负载定义,则需要增加参数指定线程数和 IO 大小(fwd=format,threads=nn,xfersize=nn)。
RD(Run Define)参数
Plain Text
1# 配置案例
2
3rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapsed=604800,interval=10
| 参数 | 说明 |
|---|---|
| rd | 文件系统运行定义的名称。 |
| fwd | 文件系统工作负载定义的名称。 |
| fwdrate | 每秒执行的文件系统操作数量。设置为max,表示不做任何限制,按照最大强度自适应。 |
| format | 预处理目录和文件结构的方式,取值说明如下:预处理目录和文件结构的方式,取值说明如下:no:不执行 format 预处理操作,如测试目录不存在文件时,Vdbench 会由于无可用文件读写而异常退出。yes:删除测试目录已有文件结构,并且重新创建新的文件结构。restart:只创建未生成的目录或文件,并且增大未达到实际大小的文件。 |
| elapsed | 测试运行持续时间,单位为秒,默认值为30。 |
| interval | 结果输出打印时间间隔,单位为秒。 |
