武汉-带鱼

  • 主页
  • 所有文章
关于我

武汉-带鱼

  • 主页
  • 所有文章

预估mdtest写入文件数

2021-02-24

前言

大家都知道mdtest工具一般是用来测试文件系统处理元数据性能的,测试本地文件系统或分布式文件系统都可以。

我们一般在开始测试之前都会设想测试模型,比如:

  1. 每个文件的大小是多少?4K还是512K或者其他?
  2. 目录的层次是多少?每个目录下放多少个文件?

上面这些都可以通过mdtest工具参数去指定,mdtest提供了下面几个相关参数:

  • -b: 指定非叶子节点的分支个数
  • -z: 指定从根到叶子节点的深度
  • -I: 每个节点下的文件或目录数
  • -np:并发的线程数

但是我们指定完上面的参数之后,并不知道这些参数一共会创建多少个文件、多少个目录。比如下面的命令:

$ mpirun -host ceph01 --allow-run-as-root -np 8 mdtest -I 5000  -b 3 -z 10 -d /mnt/cephfs -C -F

通常只有执行完这条测试命令之后,我们才能知道它创建了多少文件和多少目录。但是我们通常需要预先知道每条测试命令能创建多少文件和目录。

脚本

下面的脚本可以根据mdtest相关的参数,帮我们预测命令最后可以创建的文件数和目录数:

# coding: utf-8
import sys
import argparse

__author__ = 'ypdai'    

parser = argparse.ArgumentParser()
parser.add_argument("-b", required=True, type=int, dest="branch", default=1,
                    help="branching factor of hierarchical directory structure")
parser.add_argument("-z", required=True, type=int, dest="zone", default=1,
                    help="depth of hierarchical directory structure")
parser.add_argument("-I", required=True, type=int, dest="item", default=10, help="number of items per tree node")
parser.add_argument("--np", required=True, type=int, dest="number", default=1, help=u"number of concurrent threads")

args = parser.parse_args()

n = 0
m = 1


def calc(branch, zone):
    global n, m
    if zone <= 0:
        return
    n = n + branch ** m
    m += 1
    return calc(branch, zone - 1)


calc(args.branch, args.zone)

ds = n + 2
fs = (ds - 1) * args.item

fs = fs * args.number if args.number >= 1 else fs

print("dirs: %s" % ds)
print("files: %s" % fs)

使用示例

就拿我们上给的mdtest命令做测试:

$ python .\caclmdtest.py -b 3 -z 10 -I 5000 --np 8
dirs: 88574
files: 3542920000

这样就可以知道,这组mdtest参数最后创建了3542920000个文件和88574个目录。

赏

谢谢你请我吃糖果

微信

扫一扫,分享到微信

微信分享二维码
MQTT使用
keepalived配置RGW高可用
© 2021 武汉-带鱼
Hexo Theme Yilia by Litten
  • 关于我
每天一点点。

QQ:1041315735
Email:1041315735@qq.com