最近做了juicefs和tikv的相关测试,也学习了下一些测试工具的使用;
一些新的产品的测试主要依赖 官方提供的benchmark、常用测试工具、根据测试场景定制脚本 这些测试方法;
文件系统、数据库相关的常用测试工具主要有:FIO、mdtest、go-ycsb
这里介绍下 mdtest 和 go-ycsb;
mdtest
mdtest 是一个简单的 I/O 基准测试工具,现在是IOR 工具套件的一部分,用于向存储系统发出高度并发的元数据操作流。它旨在展示文件系统能够为包括 mkdir、stat、rmdir、creat、open、close 和 unlink 在内的操作提供服务的峰值速率。
https://github.com/hpc/iorhttps://github.com/hpc/ior
旧的mdtest git地址:
https://github.com/LLNL/mdtest
下载&准备:
下载链接:
0.下载
1.创建一个目录,解压:tar -xvf ior-3.3.0.tar.gz
2.安装 https://github.com/hpc/ior 操作
3.会发现执行 ./configure 时候会缺少包,mpich... (这是该工具配合mpi使用时需要的包,mdtest也可以单独使用,为了完整性,建议装好mpi)
4.centOS7 安装mpi
查看系统版本:
lsb_release -a
yum install mpich-3.2-devel -y
export PATH=/usr/lib64/mpich-3.2/bin:$PATH
./configure
如果:(make命令报错,/bin/sh: mpicc: command not found)
export PATH=/usr/lib64/mpich-3.2/bin:$PATH
5.如果依然提示缺少mpi或者gcc,再通过yum安装一下openmpi、gcc(yum install gcc)即可
参数简介:
ior/mdtest.c at main · hpc/ior · GitHub
或者通过 mdtest -help 命令查看参数
主要的几个参数:
-F | 只创建文件 |
---|---|
-L | 只在目录树的子目录层创建文件/目录 |
-z | 目录树深度 |
-b | 目录树的分支数 |
-I | 每个树节点包含的项目数 |
-u | 为每个工作任务指定工作目录 |
-d | 指出测试运行的目录 |
使用:
// -b 每个节点3个分支, -z 表示目录深度为2, -I 表示每个节点100个文档(和空文件夹),-d 表示执行目录
// 注意:执行目录需要有多层,实测情况:/testtikv 异常,/testtikv/mdtest(多一层)正常运行
mdtest -b 3 -z 2 -I 100 -u -d /testtikv/mdtest
// 后台运行
mdtest -b 3 -z 2 -I 100 -u -d /testtikv/mdtest 2>&1 > output.log &
补充:使用mpi实现多线程操作
## 使用128线程写,单文件1m,10个文件
/usr/lib64/mpich-3.2/bin/mpirun -np 128 --hostfile myhost --map-by slot mdtest -F -w 1048576 -I 10 -z 0 -u -d /testtikv/mdtest
返回结果大致如下:
-- started at 12/08/2021 11:41:18 --
mdtest-3.3.0 was launched with 1 total task(s) on 1 node(s)
Command line used: mdtest '-z' '1' '-b' '3' '-I' '1000' '-u' '-d' '/testtikv/mdtest'
Path: /testtikv
FS: 1024.0 TiB Used FS: 0.0% Inodes: 10.0 Mi Used Inodes: 0.0%
Nodemap: 1
1 tasks, 4000 files/directories
SUMMARY rate: (of 1 iterations)
Operation Max Min Mean Std Dev
--------- --- --- ---- -------
Directory creation : 279.322 279.322 279.322 0.000
Directory stat : 1465.559 1465.559 1465.559 0.000
Directory removal : 238.779 238.779 238.779 0.000
File creation : 282.639 282.639 282.639 0.000
File stat : 1526.124 1526.124 1526.124 0.000
File read : 911.837 911.837 911.837 0.000
File removal : 218.904 218.904 218.904 0.000
Tree creation : 254.833 254.833 254.833 0.000
Tree removal : 162.581 162.581 162.581 0.000
-- finished at 12/08/2021 11:42:32 --
单位为:IOPS
Directory creation 目录的创建
Directory stat 目录创建统计
Directory removal 目录的删除
File creation 文件的创建
File stat 文件的统计
File read 文件的读取
File removal 文件的删除
Tree creation 目录树的创建
Tree removal 目录树的删除
注:Max(最大)Min(最小)Mean(平均),其中Std Dev表示标准差,时间单位是IOPS。
参考:mdtest使用_changgongsheyue的博客-CSDN博客_mdtest
go-ycsb
使用:
参考 探究Go-YCSB做数据库基准测试 - luozhiyun`s Blog
注:
本地(MAC)编译指定运行环境(linux)
或者 直接到 Linux上装 go 环境,编译go-ycsb
demo:
// 往tikv中 insert 数据;recordcount=10000000表示要插入的数据量(很慢),operationcount=30000000 表示指定基数,没有发现有什么特别的作用,可能会用于接口查询数据范围限定
// tikv.type="txn" 表示使用事务接口
./go-ycsb load tikv -P /root/go-ycsb/go-ycsb/workloads/workloada -p tikv.pd="xx.xx.xx.xx:2379,xx.xx.xx.xx:2379,xx.xx.xx.xx:2379" -p tikv.type="txn" -p recordcount=10000000 -p operationcount=30000000
返回结果如下:
Run finished, takes 22m46.614929047s
READ - Takes(s): 1366.6, Count: 150059, OPS: 109.8, Avg(us): 2096, Min(us): 1511, Max(us): 22907, 99th(us): 4000, 99.9th(us): 4000, 99.99th(us): 6000
UPDATE - Takes(s): 1366.6, Count: 149941, OPS: 109.7, Avg(us): 7002, Min(us): 4356, Max(us): 41229, 99th(us): 11000, 99.9th(us): 12000, 99.99th(us): 20000
[2021/12/14 16:38:27.395 +08:00] [INFO] [client.go:510] ["[pd] exit tso dispatcher"] [dc-location=global]
takes:耗时
Count:操作次数
READ:操作类型为 read
OPS:每秒操作数量,这里等同与QPS