mdtest/go-ycsb测试工具使用

最近做了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/iormdtest/go-ycsb测试工具使用https://github.com/hpc/ior

旧的mdtest git地址:

https://github.com/LLNL/mdtest

下载&准备:

下载链接:

Releases · hpc/ior · GitHub

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)即可

可参考,在centos7上安装MPICH - 简书

参数简介

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 &

mdtest/go-ycsb测试工具使用

补充:使用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

上一篇:使用webpack打包typescript、init、-y、package.json


下一篇:typeScript:认识typeScript及作用