title: 預(yù)估m(xù)dtest寫入文件數(shù)
前言
大家都知道m(xù)dtest工具一般是用來測試文件系統(tǒng)處理元數(shù)據(jù)性能的锋玲,測試本地文件系統(tǒng)或分布式文件系統(tǒng)都可以。
我們一般在開始測試之前都會設(shè)想測試模型蛤铜,比如:
- 每個文件的大小是多少嫩絮?4K還是512K或者其他?
- 目錄的層次是多少围肥?每個目錄下放多少個文件剿干?
上面這些都可以通過mdtest工具參數(shù)去指定,mdtest提供了下面幾個相關(guān)參數(shù):
- -b: 指定非葉子節(jié)點(diǎn)的分支個數(shù)
- -z: 指定從根到葉子節(jié)點(diǎn)的深度
- -I: 每個節(jié)點(diǎn)下的文件或目錄數(shù)
- -np:并發(fā)的線程數(shù)
但是我們指定完上面的參數(shù)之后穆刻,并不知道這些參數(shù)一共會創(chuàng)建多少個文件置尔、多少個目錄。比如下面的命令:
$ mpirun -host ceph01 --allow-run-as-root -np 8 mdtest -I 5000 -b 3 -z 10 -d /mnt/cephfs -C -F
通常只有執(zhí)行完這條測試命令之后氢伟,我們才能知道它創(chuàng)建了多少文件和多少目錄榜轿。但是我們通常需要預(yù)先知道每條測試命令能創(chuàng)建多少文件和目錄。
腳本
下面的腳本可以根據(jù)mdtest相關(guān)的參數(shù)朵锣,幫我們預(yù)測命令最后可以創(chuàng)建的文件數(shù)和目錄數(shù):
# 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參數(shù)最后創(chuàng)建了3542920000個文件和88574個目錄。