Openstack Swift学习(七):ssbench 使用

栏目: 编程工具 · 发布时间: 6年前

内容简介: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):

File “./ssbench-master”, line 620, in

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP经典实例

PHP经典实例

(美)斯克拉、(美)切贝特伯格 / 李松峰、秦绪文、李丽 / 中国电力出版社 / 2009-10 / 98.00元

PHP经典实例(第2版)能够为您节省宝贵的Web开发时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。《PHP经典实例(第2版)》将PHP的特性与经典实例丛书的独特形式组合到一起,足以帮您成功地构建跨浏览器的Web应用程序。在这个修订版中,您可以更加方便地找到各种编程问题的解决方案,《PHP经典实例(第2版)》中内容涵盖了:表单处理;Session管理;数据库交互;使用We......一起来看看 《PHP经典实例》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具