内容简介:SwiftStack Benchmark Suite(ssbench)是一个灵活且可扩展的 OpenStack Swift 对象存储系统的基准测试工具。github 上提供了在不同系统上详细的安装方法:Traceback (most recent call last):
SwiftStack Benchmark Suite(ssbench)是一个灵活且可扩展的 OpenStack Swift 对象存储系统的基准测试工具。
2.ssbench 安装
github 上提供了在不同系统上详细的安装方法: https://github.com/swiftstack/ssbench
3.debug
3.1 运行时报错没有相应的文件
Info:
Traceback (most recent call last):
args.func(args)
File “./ssbench-master”, line 217, in run_scenario
close_fds=True))
File “/usr/lib/python2.7/subprocess.py”, line 710, in init
errread, errwrite)
File “/usr/lib/python2.7/subprocess.py”, line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Solution:
ssbench-worker 命令没有添加到环境变量,不能直接输入 ssbench-worker 运行,需要以 ./ssbench-worker 的方式运行
在 ssbench-master 的 213 行行后面添加一行代码
cmd_i[0] = './ssbench-worker'
3.2 测试读取性能时出错
如果测试 swift 的 1MB 的读性能,测试的 container 为 demo_container,且 demo_container中包含 object,那么ssbench 会直接从中读取 object 进行测试,而不管而不管这些 object 的大小。如果 demo_container 中没有object,则会先写入 1MB 的object 再进行测试。只有保证测试的 container 中无 object ,才能保证测试的读性能准确。 所以,建议在测试读性能之前,确保系统中不存在任何数据。
4. 生成 scenario 文件的脚本
import argparse import sys import re def get_size(size_str): pat = ('(\d+)B\n','(\d+)KB\n','(\d+)MB\n','(\d+)GB\n') base = 1; for p in pat: size = re.findall(p,size_str) if len(size) != 0: #print(size[0]) return int(size[0])*base base = base * 1024; print('invalid object size') sys.exit(0) def output(args): size = get_size(args.size+'\n') if(args.type not in ['C','R','U','D']): print('invalid operation size') sys.exit(0) f = open(args.output,'w'); f.write('{\n') f.write(' "name": "Demo scenario",\n') f.write(' "sizes": [{\n') f.write(' "name": "test",\n') f.write(' "size_min":' + str(size) + ',\n') f.write(' "size_max":' + str(size) + '\n') f.write(' }],\n') f.write(' "initial_files": {\n') f.write(' "test": 10000\n') f.write(' },\n') f.write(' "policy": "' + args.policy +'",\n') f.write(' "operation_count": ' + str(args.count) + ',\n') if(args.type == 'C'): f.write(' "crud_profile": [100, 0, 0, 0],\n') elif(args.type == 'R'): f.write(' "crud_profile": [0, 100, 0, 0],\n') elif(args.type == 'U'): f.write(' "crud_profile": [0, 0, 100, 0],\n') elif(args.type == 'D'): f.write(' "crud_profile": [0, 0, 0, 100],\n') else: assert(0) f.write(' "user_count": 10,\n') f.write(' "container_base": "ssbench",\n') f.write(' "container_count": 100,\n') f.write(' "container_concurrency": 10\n') f.write('}\n') f.close() if __name__ == "__main__": arg_parser = argparse.ArgumentParser() arg_parser.add_argument('-c', '--count', type=int, required=True, help='Operation count') arg_parser.add_argument('-t', '--type', type=str, required=True, help='Operation type: C,R,D,U') arg_parser.add_argument('-o', '--output', type=str, required=True, help='Output file name') arg_parser.add_argument('-s', '--size', type=str, required=True, help='Object size') arg_parser.add_argument('-p', '--policy', type=str, required=True, help='Storage policy') args = arg_parser.parse_args(sys.argv[1:]) output(args)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。