{ "info": { "author": "SwiftStack, Inc.", "author_email": "darrell@swiftstack.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Testing :: Traffic Generation", "Topic :: System :: Benchmark", "Topic :: Utilities" ], "description": ".. contents:: :depth: 1\n\nWhat Is This?\n=============\n\n`SwiftStack`_ Benchmark Suite (``ssbench``) is a flexible and scalable\nbenchmarking tool for the `OpenStack Swift`_ object storage system.\n\nThe ``ssbench-master run-scenario`` command will run benchmark \"scenarios\"\nagainst an\nOpenStack Swift cluster, utilizing one or more distributed ``ssbench-worker``\nprocesses, saving statistics about the run to a file. The ``ssbench-master\nreport-scenario`` command can then generate a\nreport from the saved statistics. By default, ``ssbench-master run-scenario``\nwill generate a report to STDOUT immediately following a benchmark run in\naddition to saving the raw results to a file.\n\nCoordination between the ``ssbench-master`` and one or more ``ssbench-worker``\nprocesses is managed through a pair of `PyZMQ`_ sockets. This\nallows ``ssbench-master`` to distribute the benchmark run across many, many\nclient servers while still coordinating the entire run (each worker can be\ngiven a job referencing an object created by a different worker).\n\n.. _`PyZMQ`: http://zeromq.github.com/pyzmq/\n.. _`OpenStack Swift`: http://docs.openstack.org/developer/swift/\n.. _`SwiftStack`: http://swiftstack.com/\n\n\nProject Status\n==============\n\nContinuous Integration: |travisci|\n\nCode Quality: |landscape|\n\n.. |travisci| image:: https://travis-ci.org/swiftstack/ssbench.png?branch=master\n :target: https://travis-ci.org/swiftstack/ssbench\n\n.. |landscape| image:: https://landscape.io/github/swiftstack/ssbench/master/landscape.png\n :target: https://landscape.io/github/swiftstack/ssbench/master\n\n\nInstallation\n============\n\nThese instructions setup a _virtualenv_ environment for `ssbench`. This avoids\nconflicts between ssbench and other libraries that may installed systemwide\n(such as libzmq). It is strongly advised to avoid installing `ssbench`\nsystemwide to avoid such conflicts.\n\nIf a system install of `libzmq` is present, to ensure that `ssbench` will work\ncorrectly, the `pyzmq` package must be installed with its bundled version of\n`libzmq`. The below steps demonstrate how to accomplish that on various\ndistributions.\n\nUbuntu (Precise & Trusty tested)\n--------------------------------\n\nInstallation on Ubuntu Precise or Trusty::\n\n $ sudo apt-get update\n $ sudo apt-get install -y gcc g++ python-dev python-virtualenv\n $ virtualenv ./ssbench-env\n $ ./ssbench-env/bin/pip install pyzmq==14.0.1 --install-option=\"--zmq=bundled\"\n $ ./ssbench-env/bin/pip install ssbench\n\nFedora 18\n---------\n\nInstallation on Fedora 18 using its stock Python 2.7 (NOT ACTUALLY TESTED YET)::\n\n $ sudo yum install -y gcc gcc-c++ python-devel python-virtualenv\n $ virtualenv ./ssbench-env\n $ ./ssbench-env/bin/pip install pyzmq==14.0.1 --install-option=\"--zmq=bundled\"\n $ ./ssbench-env/bin/pip install ssbench\n\nRHEL 6.6\n--------\n\nInstallation on RHEL 6.6 using its stock Python 2.6::\n\n $ sudo rpm -Uvh http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm\n $ sudo yum makecache\n $ sudo yum install -y gcc gcc-c++ python-devel python-virtualenv\n $ virtualenv ./ssbench-env\n $ ./ssbench-env/bin/pip install pyzmq==14.0.1 --install-option=\"--zmq=bundled\"\n $ ./ssbench-env/bin/pip install ssbench\n\nCentOS 6.6\n----------\n\nInstallation on CentOS 6.6 using its stock Python 2.6::\n\n $ sudo rpm -Uvh http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm\n $ sudo yum makecache\n $ sudo yum install -y gcc gcc-c++ python-devel python-virtualenv\n $ virtualenv ./ssbench-env\n $ ./ssbench-env/bin/pip install pyzmq==14.0.1 --install-option=\"--zmq=bundled\"\n $ ./ssbench-env/bin/pip install ssbench\n\nOS X\n----\n\nOn the Mac, I recommend installing `Homebrew`_ and using that to install Python\n2.7 and zeromq. I haven't tested a fresh install in a while, but I had far\nless problems with Cython and gevent-zeromq on OS X, probably because the\n`Homebrew`_ Python was newer than Ubuntu 12.04's?\n\n.. _`Homebrew`: http://mxcl.github.com/homebrew/\n\nThen you should be able to just ``pip install ssbench``.\n\n\nHow Does It Work?\n=================\n\nScenarios\n---------\n\nA \"scenario\" (sometimes called a \"CRUD scenario\") is a utf8-encoded JSON file\ndefining a benchmark run. Specifically, it defines:\n\n- A ``name`` for the scenario (an arbitrary string)\n- A ``sizes`` list of \"object size\" classes. Each object size class has a\n ``name``, a ``size_min`` minimum object size, a ``size_max`` maximum object\n size (in bytes), and an\n optional ``crud_profile`` for just this size. If ``crud_profile`` is not\n given for a size, the top-level ``crud_profile`` will be used. The\n ``crud_profile`` here is just like the top-level one, an array of 4 numbers\n whose relative sizes determine the percent chance of a Create, Read, Update,\n or Delete operation. Objects created or updated within an object size\n class will have a size (in bytes) chosen at random uniformly between the\n minimum and maximum sizes.\n- An ``initial_files`` dictionary of initial file-counts per size class. Each\n size class can have zero or\n more objects uploaded *prior* to the benchmark run itself. The proportion of\n initial files also defines the probability distribution of object sizes\n during the benchmark run itself. So if a particular object size class is not\n included in ``initial_files`` or has a value of 0 in ``initial_files``, then\n no objects in that size class will be used during the benchmark run. Each\n initial object's name and container is deterministic and, as an optimization,\n if an object of the right name is in the right container, it will not be\n uploaded again; note that initial objects are not deleted after each\n benchmark run, so this can speed up subsequent runs quite a bit.\n- An ``operation_count`` of operations to perform during the benchmark run.\n An operation is\n either a CREATE, READ, UPDATE, or DELETE of an object. This value may be\n overridden for any given run with the ``-o COUNT`` flag to ``ssbench-master\n run-scenario``.\n- A ``run_seconds`` number of seconds the benchmark scenario should run. This\n is mutually exclusive with ``operation_count``, so only one of those two\n should be specified. Both values may be overridden with command-line\n arguments to ``ssbench-master``.\n- A ``crud_profile`` which determines the distribution of each kind of operation.\n For instance, ``[3, 4, 2, 2]`` would mean 27% CREATE, 36% READ, 18% UPDATE,\n and 18% DELETE.\n- A ``user_count`` which determines the maximum client concurrency during the\n benchmark run. The user is responsible for ensuring there are enough workers\n running to support the scenario's defined ``user_count``. (Each\n ``ssbench-worker`` process uses `gevent`_ to achieve very efficient\n concurrency for the benchmark client requests.) This value may be overridden\n for any given run with the ``-u COUNT`` flag to ``ssbench-master\n run-scenario``.\n- A ``container_base`` which is a string used to construct the names of\n containers used by ssbench. It defaults to ``ssbench``, resulting in\n container names like ``ssbench_000061``.\n- A ``container_count`` which determines how many Swift containers are used for\n the benchmark run. This key is optional in the scenario file and defaults to\n 100. This value may be overridden for any given run with the ``-c\n COUNT`` flag to ``ssbench-master run-scenario``.\n- A ``container_concurrency`` value which determines the level of client\n concurrency used by ``ssbench-master`` to create the benchmark containers.\n This value is optional and defaults to 10.\n- A ``delete_after`` value appends expiring time(in seconds) to all objects.\n It emulates continuous loads of PUT operation (CREATE and UPDATE) with\n X-Delete-After header. If setting 0 (or None by default), this feature is\n disable and all objects will not be expired. This value may be overridden\n for any given run with the ``--delete-after DELETE_AFTER`` flag to\n ``ssbench-master run-scenario``.\n- A ``policy`` which is the name of a Storage Policy. This storage policy\n should already exist in your Swift cluster. All containers created for the\n run will be created with this Storage Policy.\n This can be overridden for any given run with the ``--policy storage-policy``\n flag to ``ssbench-master run-scenario``.\n\nFor each operation of the benchmark run, a size category is first chosen based\non the relative counts for each size category in the ``initial_files``\ndictionary. This probability for each size category appears under the \"% Ops\"\ncolumn in the report. Then an operation type is chosen based on that size\ncategory's CRUD profile (which can be individually specified or may be\ninherited from the \"top level\" CRUD profile).\n\nIf each size category has its own CRUD profile, then the overall CRUD profile\nof the benchmark run will be a weighted average between the values in the \"%\nOps\" column and the CRUD profile of each size category. This weighted average\nCRUD profile is included in the report on the \"CRUD weighted average\" line.\n\n.. _`gevent`: http://www.gevent.org/\n\n``ssbench`` comes with a few canned scenarios, but users are encouraged to\nexperiment and define their own.\n\nHere is an example JSON scenario file::\n\n {\n \"name\": \"Small test scenario\",\n \"sizes\": [{\n \"name\": \"tiny\",\n \"size_min\": 4096,\n \"size_max\": 65536\n }, {\n \"name\": \"small\",\n \"size_min\": 100000,\n \"size_max\": 200000\n }],\n \"initial_files\": {\n \"tiny\": 100,\n \"small\": 10\n },\n \"operation_count\": 500,\n \"crud_profile\": [3, 4, 2, 2],\n \"user_count\": 7\n }\n\n**Beware:** hand-editing JSON is error-prone. Watch out for trailing\ncommas, in particular.\n\nUsage\n-----\n\nThe ``ssbench-worker`` script's usage message may be generated with::\n\n $ ssbench-worker -h\n usage: ssbench-worker [-h] [--zmq-host ZMQ_HOST]\n [--zmq-work-port ZMQ_WORK_PORT]\n [--zmq-results-port ZMQ_RESULTS_PORT] [-c CONCURRENCY]\n [--retries RETRIES] [--batch-size COUNT] [-p COUNT] [-v]\n worker_id\n\n ...\n\nThe ``ssbench-master`` command requires one sub-command, which is currently\neither ``run-scenario`` to actually run a benchmark scenario,\n``report-scenario`` to report on an existing scenario result data file, or\n``kill-workers`` to tell connected ``ssbench-worker`` processes not started\nwith ``--workers`` to kill themselves::\n\n usage: ssbench-master [-h] [-v] [-q]\n\n {report-scenario,kill-workers,run-scenario,cleanup-containers}\n ...\n\n SwiftStack Benchmark (ssbench) version 0.2.20\n\n positional arguments:\n {report-scenario,kill-workers,run-scenario,cleanup-containers}\n kill-workers Tell all workers to exit.\n run-scenario Run CRUD scenario, saving statistics. You must supply\n a valid set of v1.0 or v2.0 auth credentials. See\n usage message for run-scenario for more details.\n report-scenario Generate a report from saved scenario statistics.\n Various types of reports may be generated, with the\n default being a \"textual summary\".\n cleanup-containers Recursively delete all ssbench containers and their\n objects.\n\n optional arguments:\n -h, --help show this help message and exit\n -v, --verbose Enable more verbose output. (default: False)\n -q, --quiet Suppress most output (including progress characters\n during run). (default: False)\n\nThe ``run-scenario`` sub-command of ``ssbench-master`` actually\nruns a benchmark scenario::\n\n $ ssbench-master run-scenario -h\n usage: ssbench-master run-scenario [-h] -f SCENARIO_FILE\n [--zmq-bind-ip BIND_IP]\n [--zmq-work-port PORT]\n [--zmq-results_port PORT] [-V AUTH_VERSION]\n [-A AUTH_URL] [-U USER] [-K KEY]\n [--os-username ]\n [--os-password ]\n [--os-tenant-id ]\n [--os-tenant-name ]\n [--os-auth-url ]\n [--os-auth-token ]\n [--os-storage-url ]\n [--os-region-name ]\n [--os-service-type ]\n [--os-endpoint-type ]\n [--os-cacert ] [--insecure]\n [-S STORAGE_URL] [-T TOKEN] [-c COUNT]\n [-u COUNT] [-o COUNT] [-r SECONDS]\n [-b BYTES] [--workers COUNT]\n [--batch-size COUNT] [--profile] [--noop]\n [-k] [--connect-timeout CONNECT_TIMEOUT]\n [--network-timeout NETWORK_TIMEOUT]\n [-s STATS_FILE] [-R] [--csv]\n [--pctile PERCENTILE]\n [--delete-after DELETE_AFTER]\n ...\n\n\nThe ``report-scenario`` sub-command of ``ssbench-master`` reports on a\npreviously-run benchmark scenario::\n\n $ ssbench-master report-scenario -h\n usage: ssbench-master report-scenario [-h] -s STATS_FILE [-f REPORT_FILE]\n [--pctile PERCENTILE] [--csv]\n [-r RPS_HISTOGRAM] [--profile]\n ...\n\nThe ``kill-workers`` sub-command of ``ssbench-master`` kills all\n``ssbench-worker`` processes which are pointed at the ``ssbench-master``\nZMQ sockets (this is useful for multi-server benchmark runs where the workers\nwere not started with ``ssbench-master``'s ``--workers`` option)::\n\n $ ssbench-master kill-workers -h\n usage: ssbench-master kill-workers [-h] [--zmq-bind-ip BIND_IP]\n [--zmq-work-port PORT]\n [--zmq-results_port PORT]\n ...\n\nThe ``cleanup-containers`` sub-command of ``ssbench-master`` recursively\ndeletes all ssbench-created containers and objects. It takes all the same\nauthorization-related options as ``run-scenario``::\n\n $ ssbench-master cleanup-containers -h\n usage: ssbench-master cleanup-containers [-h] [-b CONTAINER_BASE]\n [-c CONCURRENCY] [-V AUTH_VERSION]\n [-A AUTH_URL] [-U USER] [-K KEY]\n [--os-username ]\n [--os-password ]\n [--os-tenant-id ]\n [--os-tenant-name ]\n [--os-auth-url ]\n [--os-auth-token ]\n [--os-storage-url ]\n [--os-region-name ]\n [--os-service-type ]\n [--os-endpoint-type ]\n [--os-cacert ]\n [--insecure] [-S STORAGE_URL]\n [-T TOKEN]\n ...\n\n\nAuthentication\n--------------\n\n``ssbench-master`` supports all the same authentication arguments, with similar\nsemantics, as `python-swiftclient`_'s command-line tool, ``swift``.\n\nFor v1.0 authentication, you just need ``ST_AUTH``, ``ST_USER``, and ``ST_KEY``\ndefined in the environment or overridden/set on the command-line with ``-A``,\n``-U``, and ``-K``, respectively.\n\nFor v2.0 authentication (Keystone), it's more complicated and you should refer\nto Keystone and/or `python-swiftclient`_ documentation for more help.\n\nRegardless of which version of authentication is used, you may specify ``-S\n`` on the command-line to override the Storage URL returned from\nthe authentication system.\n\n.. _`python-swiftclient`: https://github.com/openstack/python-swiftclient\n\n\nLoad Balancing\n--------------\n\nYou can bypass your normal load-balancing scheme by telling ``ssbench-master``\nto distribute load across a specified set of Storage URLs. This is done by\nspecifying one or more ``-S STORAGE_URL`` options to ``ssbench-master``. Any\nstorage URL returned from the auth server will be ignored and a randomly chosen\ncommand-line-specified storage URL will be used instead.\n\nNote that each ``ssbench-worker`` process will create a fully-populated\nconnection pool for each unique ``-S`` argument specified. Each connection\npool will contain a number of sockets equal to the ``-c`` option (which defaults\nto 64). So a large number of unique ``-S`` arguments for ``ssbench-worker``\nand a large ``-c`` value for ``ssbench-worker`` processes will not mix well.\n\n\nExample Multi-Server Run\n------------------------\n\nStart one or more ``ssbench-worker`` processes on each server (each\n``ssbench-worker`` process defaults to a maximum `gevent`_-based concurrency\nof 64, but the ``-c`` option can override that default). Use the\n``--zmq-host`` command-line parameter to specify the host on which you will run\n``ssbench-master``.::\n\n bench-host-01$ ssbench-worker -c 1000 --zmq-host bench-host-01 1 &\n bench-host-01$ ssbench-worker -c 1000 --zmq-host bench-host-01 2 &\n\n bench-host-02$ ssbench-worker -c 1000 --zmq-host bench-host-01 3 &\n bench-host-02$ ssbench-worker -c 1000 --zmq-host bench-host-01 4 &\n\nFinally, run one ``ssbench-master`` process which will manage and coordinate\nthe multi-server benchmark run::\n\n bench-host-01$ ssbench-master run-scenario -f scenarios/very_small.scenario -u 2000 -o 40000\n\nThe above example would involve a total client concurrency of 2000, spread\nevenly among the four workers on two hosts (``bench-host-01`` and\n``bench-host-02``). The four workers, as started in the above example,\ncould support a maximum total client concurrency (``-u`` option to\n``ssbench-master``) up to 4000.\n\n\nExample Simple Single-Server Run\n--------------------------------\n\nIf you only need workers running on the local host, you can do so with a single\ncommand. Simply use the ``--workers COUNT`` option to ``ssbench-master``::\n\n $ ssbench-master run-scenario -f scenarios/very_small.scenario -u 4 -c 80 -o 613 --pctile 50 --workers 2\n INFO:SwiftStack Benchmark (ssbench version 0.2.14)\n INFO:Spawning local ssbench-worker (logging to /tmp/ssbench-worker-local-0.log) with ssbench-worker ... --concurrency 2 --batch-size 1 0\n INFO:Spawning local ssbench-worker (logging to /tmp/ssbench-worker-local-1.log) with ssbench-worker ... --concurrency 2 --batch-size 1 1\n INFO:Starting scenario run for \"Small test scenario\"\n INFO:Ensuring 80 containers (ssbench_*) exist; concurrency=10...\n INFO:Initializing cluster with stock data (up to 4 concurrent workers)\n INFO:Starting benchmark run (up to 4 concurrent workers)\n Benchmark Run:\n X work job raised an exception\n . < 1s first-byte-latency\n o < 3s first-byte-latency\n O < 10s first-byte-latency\n * >= 10s first-byte-latency\n _ < 1s last-byte-latency (CREATE or UPDATE)\n | < 3s last-byte-latency (CREATE or UPDATE)\n ^ < 10s last-byte-latency (CREATE or UPDATE)\n @ >= 10s last-byte-latency (CREATE or UPDATE)\n ....._........_.._......_.._..__.._.._..._...__...__._..._._..................\n ....._.._....__........._.._._......__.._.._._......._..__.._....._..._...__._\n ...._......_....____....__._.........._...._...._......._....__._.._._..__._..\n ....__.._..._._._....._......_...._...__...._...___.........._.._._..___..._._\n ....._._....__.............._.__..._...._...._...._._.._....___........_.__.._\n _..__._.__.._.................__......._......._...._.____...._.._....._...._.\n ..._.............__.._..._.._.._._._._...._.._.._....__._._........_......_.__\n .........._._...._.._.........._........_._.._....._......._....._.\n INFO:Deleting population objects from cluster\n INFO:Calculating statistics...\n\n Small test scenario (generated with ssbench version 0.2.14)\n Worker count: 2 Concurrency: 4 Ran 2013-06-07 17:23:16 UTC to 2013-06-07 17:23:22 UTC (5s)\n Object expiration (X-Delete-After): None (sec)\n\n % Ops C R U D Size Range Size Name\n 91% % 10 75 15 0 4 kB - 8 kB tiny\n 9% % 10 75 15 0 20 kB - 40 kB small\n ---------------------------------------------------------------------\n 10 75 15 0 CRUD weighted average\n\n TOTAL\n Count: 613 ( 0 error; 0 retries: 0.00%) Average requests per second: 118.7\n min max avg std_dev 50%-ile Worst latency TX ID\n First-byte latency: 0.004 - 0.044 0.017 ( 0.008) 0.016 (all obj sizes) txe026893bbf09486c83fcdb629f6f25a3\n Last-byte latency: 0.004 - 0.157 0.029 ( 0.024) 0.019 (all obj sizes) tx6f988120ec5044329f817-0051b21708\n First-byte latency: 0.004 - 0.044 0.016 ( 0.007) 0.016 ( tiny objs) tx1d35c8e273bf4bbeb6298-0051b21705\n Last-byte latency: 0.004 - 0.157 0.028 ( 0.024) 0.019 ( tiny objs) tx6f988120ec5044329f817-0051b21708\n First-byte latency: 0.005 - 0.044 0.018 ( 0.008) 0.016 ( small objs) txe026893bbf09486c83fcdb629f6f25a3\n Last-byte latency: 0.005 - 0.120 0.031 ( 0.026) 0.021 ( small objs) tx87bf30db5a70412b97a5c71ae60036c1\n\n CREATE\n Count: 64 ( 0 error; 0 retries: 0.00%) Average requests per second: 12.5\n min max avg std_dev 50%-ile Worst latency TX ID\n First-byte latency: N/A - N/A N/A ( N/A ) N/A (all obj sizes)\n Last-byte latency: 0.024 - 0.157 0.067 ( 0.023) 0.060 (all obj sizes) tx6f988120ec5044329f817-0051b21708\n First-byte latency: N/A - N/A N/A ( N/A ) N/A ( tiny objs)\n Last-byte latency: 0.024 - 0.157 0.064 ( 0.022) 0.059 ( tiny objs) tx6f988120ec5044329f817-0051b21708\n First-byte latency: N/A - N/A N/A ( N/A ) N/A ( small objs)\n Last-byte latency: 0.061 - 0.120 0.087 ( 0.020) 0.089 ( small objs) tx87bf30db5a70412b97a5c71ae60036c1\n\n READ\n Count: 459 ( 0 error; 0 retries: 0.00%) Average requests per second: 88.9\n min max avg std_dev 50%-ile Worst latency TX ID\n First-byte latency: 0.004 - 0.044 0.017 ( 0.008) 0.016 (all obj sizes) txe026893bbf09486c83fcdb629f6f25a3\n Last-byte latency: 0.004 - 0.044 0.017 ( 0.008) 0.016 (all obj sizes) txe026893bbf09486c83fcdb629f6f25a3\n First-byte latency: 0.004 - 0.044 0.016 ( 0.007) 0.016 ( tiny objs) tx1d35c8e273bf4bbeb6298-0051b21705\n Last-byte latency: 0.004 - 0.044 0.017 ( 0.007) 0.016 ( tiny objs) tx1d35c8e273bf4bbeb6298-0051b21705\n First-byte latency: 0.005 - 0.044 0.018 ( 0.008) 0.016 ( small objs) txe026893bbf09486c83fcdb629f6f25a3\n Last-byte latency: 0.005 - 0.044 0.019 ( 0.008) 0.017 ( small objs) txe026893bbf09486c83fcdb629f6f25a3\n\n UPDATE\n Count: 90 ( 0 error; 0 retries: 0.00%) Average requests per second: 18.1\n min max avg std_dev 50%-ile Worst latency TX ID\n First-byte latency: N/A - N/A N/A ( N/A ) N/A (all obj sizes)\n Last-byte latency: 0.021 - 0.143 0.062 ( 0.021) 0.061 (all obj sizes) tx9a502107a0c246e69a987d120a2b9919\n First-byte latency: N/A - N/A N/A ( N/A ) N/A ( tiny objs)\n Last-byte latency: 0.021 - 0.143 0.062 ( 0.022) 0.061 ( tiny objs) tx9a502107a0c246e69a987d120a2b9919\n First-byte latency: N/A - N/A N/A ( N/A ) N/A ( small objs)\n Last-byte latency: 0.036 - 0.085 0.065 ( 0.015) 0.065 ( small objs) tx732aae54c9484689b8fea-0051b21709\n\n INFO:Scenario run results saved to /tmp/ssbench-results/Small_test_scenario.u4.o613.r-.2013-06-07.102314.stat.gz\n INFO:You may generate a report with:\n .../ssbench-master report-scenario -s /tmp/ssbench-results/Small_test_scenario.u4.o613.r-.2013-06-07.102314.stat.gz\n\n\nBenchmark Reports\n-----------------\n\nThe default, textual table report may be seen in the above example output. You\ncan also specify ``--csv`` when running a scenario or generating a report later\nto generate a CSV report instead. This feature is still pretty new so expect\nthe CSV report output to change over time.\n\nRight now, the default report's CSV version is two lines: a line of column\nheader names and one line of actual data. Both lines are *very* long and the\nset of columns present in any given CSV report will depend on the scenario\nwhich was run. Some column names have the ``--pctile`` value in them and many\ncolumns have the object sizes in them, which are defined in the scenario file.\nYou can think of the two CVS lines as a linear denormalization of the contents\nof the two-dimensional table output.\n\nIPv6 support\n------------\n`ssbench` supports IPv6 for both the Swift communication, as well as between the\nmaster and the workers. When using a hostname, `ssbench` will attempt to\nguess whether to use IPv6 or not. If the host resolves to both IPv4 and IPv6,\n`ssbench` picks IPv4. If this is not the desired behavior, please specify the IP\naddress explicitly. To bind to all interfaces, use the `::` address for IPv6;\nfor localhost, use `::1`.\n\n\nHow Does It Scale?\n==================\n\nScalability and Throughput\n--------------------------\n\nAssuming the Swift cluster being benchmarked is not the bottleneck, the\nscalability of ssbench may be increased by\n\n- Running up to one ``ssbench-worker`` process per CPU core on any number of\n benchmarking servers.\n- Increasing the default ``--batch-size`` parameter (defaults to 1) on both the\n ``ssbench-master`` and ``ssbench-worker`` command-lines. Note that if you\n are running everything on one server and using the ``--workers`` argument to\n ``ssbench-master``, the ``--batch-size`` parameter passed to\n ``ssbench-master`` will be passed on to the automatically-started\n ``ssbench-worker`` processes.\n- For optimal scalability, the user-count (concurrency) should be greater than\n and also an even multiple of both the batch-size and number of\n ``ssbench-worker`` processes.\n\nAs a simple example, on my quad-core MacBook Pro, I get around **9,800** requests\nper second with ``--noop`` (see below) with this command-line (a\n``--batch-size`` of 1)::\n\n $ ssbench-master run-scenario ... -u 24 -o 30000 --workers 3 --noop\n\nBut with a ``--batch-size`` of 8, I can get around **19,500** requests per second::\n\n $ ssbench-master run-scenario ... -u 24 -o 30000 --workers 3 --noop --batch-size 8\n\nHTTPS on OS X\n-------------\n\nWhen running ``ssbench-worker`` on a Mac, using HTTPS, I got a significant\nspeed-up when setting ``OPENSSL_X509_TEA_DISABLE=1`` in the environment of my\n``ssbench-worker`` processes. I found this tip via a `curl blog post`_ after\nnoticing a process named ``trustevaluationagent`` chewing up a lot of CPU\nduring a benchmark run against a cluster using HTTPS.\n\n.. _`curl blog post`: http://daniel.haxx.se/blog/2011/11/05/apples-modified-ca-cert-handling-and-curl/\n\nThe No-op Mode\n--------------\n\nTo test the maximum throughput of the ``ssbench-master`` <==>\n``ssbench-worker`` infrastructure, you can add ``--noop`` to a\n``ssbench-master run-scenario`` command and the scenario will be \"run\" but\nthe ``ssbench-worker`` processes will not actually talk to the Swift cluster.\n\nIn this manner, you may determine your maximum requests per second if talking\nto the Swift cluster were free.\n\nThe reported \"Average requests per second:\" value in the \"TOTAL\" section of\nthe report should be higher than you expect to get out of the Swift cluster\nitself.\n\nWith an older version of ``ssbench`` which used a beanstalkd server to manage\nmaster/worker communication, my 2012 15\" Retina Macbook Pro could get **~2,700\nrequests per second** with ``--noop`` using a local beanstalkd, one\n``ssbench-worker``, and a user count (concurrency) of 4.\n\nWith ZeroMQ sockets (no beanstalkd involved), the same laptop can get between\n**7,000 and 8,000 requests per second** with ``--noop``.\n\n\nContributing To ssbench\n=======================\n\nFirst, please use the Github Issues for the project when submitting bug reports\nor feature requests.\n\nCode submissions should be submitted as pull requests and all code should be\nPEP8 (v. 1.4.2) compliant. Current unit test line coverage is not 100%, but\ncode contributions should not *lower* the code coverage (so please include\nnew tests or update existing ones as part of your change). Running tests will\nprobably require Python 2.7 and a few additional modules like ``flexmock`` and\n``nose``.\n\nRegarding test tools, I started out using ``flexmock``, but plan to mostly add\nnew tests using the ``mock`` library since that's been included in the stdlib\nand the Python community seems to be converging on it. So please use ``mock``\ninstead of ``flexmock`` for new tests.\n\nIf contributing code which implements a feature or fixes\na bug, please ensure a Github Issue exists prior to submitting the pull request\nand reference the Issue number in your commit message.\n\nWhen submitting your first pull request, please also update AUTHORS to include\nyourself, maintaining alphabetical ordering by last name.\n\nIf any of the file(s) you change do not yet have a copyright line with your\nname, please add one at the bottom of the others, above the license text (but\nnever remove any existing copyright lines). Your copyright line should look\nsomething like::\n\n # Copyright (c) 2013 FirstName LastName", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/SwiftStack/ssbench", "keywords": "openstack swift object storage benchmark", "license": "Apache License (2.0)", "maintainer": null, "maintainer_email": null, "name": "ssbench", "package_url": "https://pypi.org/project/ssbench/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ssbench/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/SwiftStack/ssbench" }, "release_url": "https://pypi.org/project/ssbench/0.3.9/", "requires_dist": null, "requires_python": null, "summary": "SwiftStack Swift Benchmarking Suite", "version": "0.3.9" }, "last_serial": 2023761, "releases": { "0.0.11": [ { "comment_text": "", "digests": { "md5": "f87c18309b73f235b41d8e3036992f37", "sha256": "5e1e9c87ae37bf0dcb150aa4524d2b124cef267350077414bc4abcbe23485514" }, "downloads": -1, "filename": "ssbench-0.0.11.tar.gz", "has_sig": false, "md5_digest": "f87c18309b73f235b41d8e3036992f37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42219, "upload_time": "2013-02-04T00:27:49", "url": "https://files.pythonhosted.org/packages/51/a3/2b2a83e7ce1667c818e4931b6cb184c43b2c59ac842d0ea1807479bb0bcf/ssbench-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "19844cb123d5033abf30274ba7fc1ae6", "sha256": "6107a1b8c1880583510977b66ca2d4efd3df475ab00763b9b843c346a3722a35" }, "downloads": -1, "filename": "ssbench-0.0.12.tar.gz", "has_sig": false, "md5_digest": "19844cb123d5033abf30274ba7fc1ae6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43215, "upload_time": "2013-02-12T17:26:22", "url": "https://files.pythonhosted.org/packages/f6/f6/78f84d75a48acce47fd8ea80594d98f19b4f7fe93a51ae2c36092a892ba0/ssbench-0.0.12.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "9877080be855c281f396be7ba8adf241", "sha256": "ed8f13c37828b26e109fde27a836b675993520aec9c0a9b739f46049f6b872dd" }, "downloads": -1, "filename": "ssbench-0.0.3.tar.gz", "has_sig": false, "md5_digest": "9877080be855c281f396be7ba8adf241", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33997, "upload_time": "2013-01-22T07:03:33", "url": "https://files.pythonhosted.org/packages/2d/7a/93f93e6052db7ef30e304f24bc2fd11be03ff0b76e61e5938baf935f79ee/ssbench-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "d3c58a563f771c45413edf6a072f82df", "sha256": "101485df62dd6d8b32f5e6e82478901c608b2c043f77b267e453d0a987cb97b0" }, "downloads": -1, "filename": "ssbench-0.0.4.tar.gz", "has_sig": false, "md5_digest": "d3c58a563f771c45413edf6a072f82df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34009, "upload_time": "2013-01-22T07:19:35", "url": "https://files.pythonhosted.org/packages/85/ca/10b4034d52661a8bba50b2da66cf01004fcdf13c6eec97bedc45d828bc64/ssbench-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "206f3450601b9dad5cb3813fddd712a3", "sha256": "acfe5fe3c144b5beeb200625d62975c535926b5a49ae1f53a42c8dec6513c4c1" }, "downloads": -1, "filename": "ssbench-0.0.5.tar.gz", "has_sig": false, "md5_digest": "206f3450601b9dad5cb3813fddd712a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34091, "upload_time": "2013-01-23T15:44:19", "url": "https://files.pythonhosted.org/packages/c0/32/c1d9b1493844cc736ae8fdceb3e0a3ca0554d3ca070d0db37fed88f53067/ssbench-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6bb9116b97d00d264b23228ecd531fe2", "sha256": "c50ccad1fe30ff3ebccf650406994226b1a2c2acc9207d613cb9b3ffc0d975fa" }, "downloads": -1, "filename": "ssbench-0.0.6.tar.gz", "has_sig": false, "md5_digest": "6bb9116b97d00d264b23228ecd531fe2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35311, "upload_time": "2013-01-27T07:52:53", "url": "https://files.pythonhosted.org/packages/67/ce/72223e93cb0371ad9d07fead92361151540c700e7d2f4545286bf6acb5d3/ssbench-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "5a2e364fdecbf2e4749b992fe24a8605", "sha256": "a52f04c6098fe6b249f461464fa4b1d241db168ded483e165e391cef582400a9" }, "downloads": -1, "filename": "ssbench-0.0.7.tar.gz", "has_sig": false, "md5_digest": "5a2e364fdecbf2e4749b992fe24a8605", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36610, "upload_time": "2013-01-27T08:16:10", "url": "https://files.pythonhosted.org/packages/9b/27/5d882e4dfe8099a90004e017f3c6f96fb21181e1f313ed3e56f1c2d48512/ssbench-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "8cbffad09f8f6a1446f6f97ff2211b2c", "sha256": "219b28f0b421f9f2f9bff6fe048e8a5dfb459dd1b47536c9ed7308a50362928d" }, "downloads": -1, "filename": "ssbench-0.0.8.tar.gz", "has_sig": false, "md5_digest": "8cbffad09f8f6a1446f6f97ff2211b2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37815, "upload_time": "2013-01-28T04:39:48", "url": "https://files.pythonhosted.org/packages/f0/68/df174f734a63382a40576d927651db8664b13e50cfcfb1566d3404049434/ssbench-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "33bcebf8aabc33b0c42284dd567e2b43", "sha256": "ef2d31d67cae8ae551e7cdc80b9680893337d78bd51a137b3627beb847134f08" }, "downloads": -1, "filename": "ssbench-0.0.9.tar.gz", "has_sig": false, "md5_digest": "33bcebf8aabc33b0c42284dd567e2b43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38187, "upload_time": "2013-02-02T19:57:15", "url": "https://files.pythonhosted.org/packages/fa/d3/1e986e07a093c0eb9f9d18f96f617127732c06dca17f1ec1349e22126d49/ssbench-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "3e79baf7b614cf5e8d71b55452e25ed4", "sha256": "77f89123be6c4aee00d118358adf583654204e5a95623f34a19a49aaf04655c5" }, "downloads": -1, "filename": "ssbench-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3e79baf7b614cf5e8d71b55452e25ed4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47526, "upload_time": "2013-02-18T19:02:14", "url": "https://files.pythonhosted.org/packages/83/e8/aa71633ce9dc140da2bb417f2a3fbb950d76af92e95b43a71ee4cebba93e/ssbench-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0620d6acd1d796631f07e66825bfcf2e", "sha256": "42e04cd6060acd3ade023cd8a2da7911e5d0b8833b1c5ec5f81569718f09b60a" }, "downloads": -1, "filename": "ssbench-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0620d6acd1d796631f07e66825bfcf2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48279, "upload_time": "2013-02-18T19:40:41", "url": "https://files.pythonhosted.org/packages/8a/81/0696db86184cbd4c99b0ff5fbaaa114541e10583875321bed572fb572e08/ssbench-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f875c844e4d93c30a6d8f7a8e389932b", "sha256": "78917e4bea6c8989332b45a28c7943bc896115ef7e54f397ad56ebcf1bf5dd42" }, "downloads": -1, "filename": "ssbench-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f875c844e4d93c30a6d8f7a8e389932b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51363, "upload_time": "2013-02-20T18:21:01", "url": "https://files.pythonhosted.org/packages/8b/a2/5318d4201aa3d7b11ba93fd77095d5e581b8ce97b0c1fe70a78151ff13ec/ssbench-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f3ae19370077a46927363b06e50ec4ce", "sha256": "03658c67d4e5a181b7bddad4220bab2837ea94ccf6477a73e9254708cb05e06f" }, "downloads": -1, "filename": "ssbench-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f3ae19370077a46927363b06e50ec4ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51362, "upload_time": "2013-02-21T05:52:42", "url": "https://files.pythonhosted.org/packages/4e/ea/c838dea1984d2d1da36166dc4abf9eee131e09293aba4a44b7f83de0bde6/ssbench-0.2.1.tar.gz" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "ffbdd3381ada833b1dd0c57acb44ba3a", "sha256": "5a321e4fff2b3296311d69df3fb00256b7933d506216c241aa16c8456ed6ea6f" }, "downloads": -1, "filename": "ssbench-0.2.10.tar.gz", "has_sig": false, "md5_digest": "ffbdd3381ada833b1dd0c57acb44ba3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 65252, "upload_time": "2013-03-19T15:15:32", "url": "https://files.pythonhosted.org/packages/51/1a/58490fe25f2545335125318c2eb617850128a5e76f804d24e0e5dcd2c71a/ssbench-0.2.10.tar.gz" } ], "0.2.11": [ { "comment_text": "", "digests": { "md5": "6d19b3644deb72eeef5c6f3432f71ba8", "sha256": "cb4df0f224df239ab8a868b4419ca9390f5e9919e42856e54eec7b4369777fd8" }, "downloads": -1, "filename": "ssbench-0.2.11.tar.gz", "has_sig": false, "md5_digest": "6d19b3644deb72eeef5c6f3432f71ba8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 65648, "upload_time": "2013-03-21T18:04:12", "url": "https://files.pythonhosted.org/packages/ed/fe/30befa872cca90db5e810d1b04e2d4291f6c2ac6a881f7e8bf87bd31aaaf/ssbench-0.2.11.tar.gz" } ], "0.2.12": [ { "comment_text": "", "digests": { "md5": "65d4dd713f7b34d7448607371784e4f3", "sha256": "87d072030098ce6ce6c468fd55756d16464682a499cffa8a298ee55d23642d61" }, "downloads": -1, "filename": "ssbench-0.2.12.tar.gz", "has_sig": false, "md5_digest": "65d4dd713f7b34d7448607371784e4f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67431, "upload_time": "2013-04-19T22:00:02", "url": "https://files.pythonhosted.org/packages/af/12/22b965151f1c0180eb9a697131f4fba325b41cd186bfe8728e1dc980bc7d/ssbench-0.2.12.tar.gz" } ], "0.2.13": [ { "comment_text": "", "digests": { "md5": "d9f04ab9d156bef9cd816e902e227128", "sha256": "87351289ac13213e19d27a319c5aedab46db255b6b2e13d716e7d008517286ae" }, "downloads": -1, "filename": "ssbench-0.2.13.tar.gz", "has_sig": false, "md5_digest": "d9f04ab9d156bef9cd816e902e227128", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67432, "upload_time": "2013-04-30T23:49:08", "url": "https://files.pythonhosted.org/packages/f5/54/fc1f5b6c7be9950ea2e5efe961d02eae5532dfef08382cd094c9ed4dcd72/ssbench-0.2.13.tar.gz" } ], "0.2.14": [ { "comment_text": "", "digests": { "md5": "0af553b82287c9b39baffc1daadc7e8e", "sha256": "92217e2ea648b29a9f98846de0ffda7f5b0ad5feabc6aee8e4e4c49c8d38e373" }, "downloads": -1, "filename": "ssbench-0.2.14.tar.gz", "has_sig": false, "md5_digest": "0af553b82287c9b39baffc1daadc7e8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75184, "upload_time": "2013-06-07T18:19:34", "url": "https://files.pythonhosted.org/packages/ed/fa/0265234884d9a3745b2d2d17e59a2f3e1c399e53d50239531266e9a7b90c/ssbench-0.2.14.tar.gz" } ], "0.2.15": [ { "comment_text": "", "digests": { "md5": "f3a5bf86133afda211184ccc7150eb90", "sha256": "cc5065a176684100f42d5a94dc504ed450e11885a80994e828b6a9ce60a48449" }, "downloads": -1, "filename": "ssbench-0.2.15.tar.gz", "has_sig": false, "md5_digest": "f3a5bf86133afda211184ccc7150eb90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75198, "upload_time": "2013-06-07T20:36:33", "url": "https://files.pythonhosted.org/packages/2d/6c/82150c5d44289557518211b1c30801ef22ce6df3b501e25aca1e782a4de4/ssbench-0.2.15.tar.gz" } ], "0.2.16": [ { "comment_text": "", "digests": { "md5": "f953ce5efbd8a0724a22fa24b141181f", "sha256": "e1cf7bb40a56a43afd38b24e5794b81b3608f96b4301c38d8940022fe55f19d4" }, "downloads": -1, "filename": "ssbench-0.2.16.tar.gz", "has_sig": false, "md5_digest": "f953ce5efbd8a0724a22fa24b141181f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75190, "upload_time": "2013-06-07T20:41:50", "url": "https://files.pythonhosted.org/packages/95/50/ae1afb53553b257dbf7a0728f2b7893aa94e40f4b19ed2d066fb230bc49e/ssbench-0.2.16.tar.gz" } ], "0.2.17": [ { "comment_text": "", "digests": { "md5": "5b14c71da2ab003f53b79f90a10a8b36", "sha256": "ec6004853df53245bf300aa41721c985d3cc067263c5e570bb8b58dd75bd0955" }, "downloads": -1, "filename": "ssbench-0.2.17.tar.gz", "has_sig": false, "md5_digest": "5b14c71da2ab003f53b79f90a10a8b36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76475, "upload_time": "2013-07-12T02:34:48", "url": "https://files.pythonhosted.org/packages/15/89/d8464dbea9bdc049430ce9f3bfc4af4fb9ba30c2aa7ba79e90dca5e62d73/ssbench-0.2.17.tar.gz" } ], "0.2.18": [ { "comment_text": "", "digests": { "md5": "0237ccb83ca1593c21cc5ce5707e7769", "sha256": "78ec75cec1115d664af6511c60a0dc19330b11dbebf4a49d37e93dfcd053372e" }, "downloads": -1, "filename": "ssbench-0.2.18.tar.gz", "has_sig": false, "md5_digest": "0237ccb83ca1593c21cc5ce5707e7769", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76519, "upload_time": "2013-07-12T14:40:55", "url": "https://files.pythonhosted.org/packages/76/5f/e379ea43858a44a187d7fddc69e1c901f8eeba6704fa60433788d86b962c/ssbench-0.2.18.tar.gz" } ], "0.2.19": [ { "comment_text": "", "digests": { "md5": "0ad1d6ddd340884347d28d423df2c732", "sha256": "2fcf4d1bf41fa0e1985049c6f9182ba6126d8d4f4d910a3530778f0997da1f09" }, "downloads": -1, "filename": "ssbench-0.2.19.tar.gz", "has_sig": false, "md5_digest": "0ad1d6ddd340884347d28d423df2c732", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77214, "upload_time": "2013-07-12T16:08:14", "url": "https://files.pythonhosted.org/packages/cc/73/6603b01f5eb3e87051142371363381604fd2564aec3910c4afe4191b4fdd/ssbench-0.2.19.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "44926e76c552a6cad039151d22899f91", "sha256": "49f909b9246c35a041288fb83007a3fc8b96913bd0f35e9cfb7b5b0281935fce" }, "downloads": -1, "filename": "ssbench-0.2.2.tar.gz", "has_sig": false, "md5_digest": "44926e76c552a6cad039151d22899f91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51378, "upload_time": "2013-02-21T07:54:31", "url": "https://files.pythonhosted.org/packages/ea/9f/45dab45cc51232dcbbf20485cd393bd01f5af6da703bbe42ee6f047b97c3/ssbench-0.2.2.tar.gz" } ], "0.2.20": [ { "comment_text": "", "digests": { "md5": "ea2b37eee3f57948f2b792a48dcc896b", "sha256": "f50321dcf3e55fbf509f4af426ee2ced05365cb07d1a9b5cc73b721eac6af625" }, "downloads": -1, "filename": "ssbench-0.2.20.tar.gz", "has_sig": false, "md5_digest": "ea2b37eee3f57948f2b792a48dcc896b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77636, "upload_time": "2013-07-12T18:09:16", "url": "https://files.pythonhosted.org/packages/9b/54/40532f5e6f072015d89141cf56796e63e3ebf7a7ed14cca6ca4295d32ad4/ssbench-0.2.20.tar.gz" } ], "0.2.21": [ { "comment_text": "", "digests": { "md5": "09e2e0d4b3e3ea0a15fb5791b0b5ca7a", "sha256": "e67a6ecb10cd95a66718b2a0b342d3be0c1995d722d103131b7b26b193abcf42" }, "downloads": -1, "filename": "ssbench-0.2.21.tar.gz", "has_sig": false, "md5_digest": "09e2e0d4b3e3ea0a15fb5791b0b5ca7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82445, "upload_time": "2013-07-13T06:56:44", "url": "https://files.pythonhosted.org/packages/0b/02/80229cf0aa5625ac02bded659b5fe7a322a0978ca8ac89c17c098766de9d/ssbench-0.2.21.tar.gz" } ], "0.2.22": [ { "comment_text": "", "digests": { "md5": "437f810e4fdde2392da6f69d831dac0b", "sha256": "484ba4eccc495159c81fbaae91f417e9a35c80c7fea09aea885bd194b1b99841" }, "downloads": -1, "filename": "ssbench-0.2.22.tar.gz", "has_sig": false, "md5_digest": "437f810e4fdde2392da6f69d831dac0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83191, "upload_time": "2013-07-13T18:49:59", "url": "https://files.pythonhosted.org/packages/bd/8b/7b330ed9234172e9fec9ee88090f7efa920d0b269e23e384d8af960b06ab/ssbench-0.2.22.tar.gz" } ], "0.2.23": [ { "comment_text": "", "digests": { "md5": "bd82fb23b10492eaf100b184d7da47a8", "sha256": "eadfce63a4a77981f6ef6e0b58d4d93c99edc62f1cac648945c6d319f8c2792f" }, "downloads": -1, "filename": "ssbench-0.2.23.tar.gz", "has_sig": false, "md5_digest": "bd82fb23b10492eaf100b184d7da47a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87401, "upload_time": "2013-11-05T22:05:10", "url": "https://files.pythonhosted.org/packages/ff/ad/3ff4a825bc250c0d9bba068fa5b024ec566338a51c73674d83678c65bcc0/ssbench-0.2.23.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "73bda52299c8d36929791a16c77a1dbb", "sha256": "83fbcb9765bb96310bf01367e8d8f70d95a8176b9c06446d8b5f1ebea9fe70e6" }, "downloads": -1, "filename": "ssbench-0.2.3.tar.gz", "has_sig": false, "md5_digest": "73bda52299c8d36929791a16c77a1dbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52014, "upload_time": "2013-02-21T16:55:42", "url": "https://files.pythonhosted.org/packages/10/0f/40f599eac67a73b753253bda6602e651f352f3ad4710e42fbdb2a2805828/ssbench-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "609b9c904160e89013a001d184126ea1", "sha256": "dbe05568cba1427e5451c64eb30bb88faa2862246bf6ea3fbbc9010a94a3f4ab" }, "downloads": -1, "filename": "ssbench-0.2.4.tar.gz", "has_sig": false, "md5_digest": "609b9c904160e89013a001d184126ea1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54815, "upload_time": "2013-02-24T04:29:14", "url": "https://files.pythonhosted.org/packages/ca/93/2c45822620d2d6011af752efa3dddbaee9f6c4a78e4df1b6788a188735db/ssbench-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "565748c3c307feb3f13610c550b98ae7", "sha256": "a8cb15297276aeae415f0c16652322fb8609dbfeba73b7a39cb2713f77612f65" }, "downloads": -1, "filename": "ssbench-0.2.5.tar.gz", "has_sig": false, "md5_digest": "565748c3c307feb3f13610c550b98ae7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60491, "upload_time": "2013-02-24T04:53:21", "url": "https://files.pythonhosted.org/packages/69/bb/b3cbec25d2d80c3c029566decba39813d105fe57926ba83444aa60303db1/ssbench-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "1179fbe7f85701c90ed1f6158988cb51", "sha256": "88dab34fabd8fd4f7893dd6e23dd4441701321328c5176e38f12200f72059af3" }, "downloads": -1, "filename": "ssbench-0.2.6.tar.gz", "has_sig": false, "md5_digest": "1179fbe7f85701c90ed1f6158988cb51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60524, "upload_time": "2013-02-24T05:22:46", "url": "https://files.pythonhosted.org/packages/62/d5/9437e69b997b710f91548a02cd94a64acb2f24e03c832fb5d77d849fde60/ssbench-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "5340ace4708a46348abf80fb6ca5e27a", "sha256": "47296141fab42716ae48053042b08f3aaf48bdc51fa6e79e380ea050cbf8170f" }, "downloads": -1, "filename": "ssbench-0.2.7.tar.gz", "has_sig": false, "md5_digest": "5340ace4708a46348abf80fb6ca5e27a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60498, "upload_time": "2013-02-24T05:57:28", "url": "https://files.pythonhosted.org/packages/77/cd/79b18edc07bea61c673bedb5efc763768c9b1153316e4c5745af72a33a54/ssbench-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "a8bf566c42068edac01f057184f6076c", "sha256": "0c0bd9e2dc6dd91d89d76669b7f16cb891a9ce5edd9bab6942bb48aa17e71bee" }, "downloads": -1, "filename": "ssbench-0.2.8.tar.gz", "has_sig": false, "md5_digest": "a8bf566c42068edac01f057184f6076c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60523, "upload_time": "2013-02-24T06:02:57", "url": "https://files.pythonhosted.org/packages/96/49/98024994cf0620e49cd98efce437cc7853533eb8254f4290e7a1b3ef6bab/ssbench-0.2.8.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "4ad18231ec68dc82d01754f2cdb59f10", "sha256": "34a9ad43d76cd50ff66d80d4d8208852d9b87c2d670167fe92c7c3593466b810" }, "downloads": -1, "filename": "ssbench-0.2.9.tar.gz", "has_sig": false, "md5_digest": "4ad18231ec68dc82d01754f2cdb59f10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63623, "upload_time": "2013-02-25T05:41:27", "url": "https://files.pythonhosted.org/packages/11/06/2711ae29a2083b42676c830cb97d09d6d0fed3e9999cb46a147d9f20de5d/ssbench-0.2.9.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "0aacea43acb1b7634f432f40508afe73", "sha256": "ae2279b846bff5735946442f8e4a0c8ca85aa92d281b0227621cdc5aae42d582" }, "downloads": -1, "filename": "ssbench-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0aacea43acb1b7634f432f40508afe73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88384, "upload_time": "2015-05-28T15:34:07", "url": "https://files.pythonhosted.org/packages/78/85/33d0a649c306fd9b0215738bec619968685989f95d140e91288a4d6e6c39/ssbench-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "0e4ec2c55e0b95c548d1f7d943ec9eeb", "sha256": "ce122a57fb2658630241abaeec70e173817accb5c52e13b988de41d43d8062ad" }, "downloads": -1, "filename": "ssbench-0.3.2.tar.gz", "has_sig": false, "md5_digest": "0e4ec2c55e0b95c548d1f7d943ec9eeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88364, "upload_time": "2015-05-28T15:49:46", "url": "https://files.pythonhosted.org/packages/f4/ad/0069b2f59c41ec1dd8803e1c4128e788d94923b596f3a3f72403bda8e72d/ssbench-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "0a1580a5826336dc15fe57255508ac7a", "sha256": "7d8f37239bc84c02c17de221e3b2165d83983aeaa892105081716dda98fa52d1" }, "downloads": -1, "filename": "ssbench-0.3.3.tar.gz", "has_sig": false, "md5_digest": "0a1580a5826336dc15fe57255508ac7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88541, "upload_time": "2015-05-28T16:16:22", "url": "https://files.pythonhosted.org/packages/d3/5c/e919c7e4b3c5bbf39824f194f969da8f6820db05100677a1a968c3804289/ssbench-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "6003bf76216a1e92a19995fa61736b48", "sha256": "f691afcf43d0bc29407cbb4687bfa059bd491def290edc2751420941b26da309" }, "downloads": -1, "filename": "ssbench-0.3.4.tar.gz", "has_sig": false, "md5_digest": "6003bf76216a1e92a19995fa61736b48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88547, "upload_time": "2015-05-29T15:01:17", "url": "https://files.pythonhosted.org/packages/b3/a9/5178fc69f41f983c6a1ff85426a28f6961af35befbc22681b0541ec9043f/ssbench-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "6d4d8955d032fe6f04ec4f89af2cafa0", "sha256": "a77fb6703a5581a373e9564cdb7223c8f921f3f96bebd30a3f63dd0a87c2a5e2" }, "downloads": -1, "filename": "ssbench-0.3.5.tar.gz", "has_sig": false, "md5_digest": "6d4d8955d032fe6f04ec4f89af2cafa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88681, "upload_time": "2015-05-29T15:07:32", "url": "https://files.pythonhosted.org/packages/ef/62/091cde7362dcd1aca7ca6e80852d6ebd2d3ed2597b5f9202706e0cf4e823/ssbench-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "12c078829edde461c713863798a8e62e", "sha256": "6ff98dd2d98c290d7b95170414fbc1c9a08ad450ad483e5249a19ead5a54eba4" }, "downloads": -1, "filename": "ssbench-0.3.6.tar.gz", "has_sig": false, "md5_digest": "12c078829edde461c713863798a8e62e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90912, "upload_time": "2015-08-18T22:54:58", "url": "https://files.pythonhosted.org/packages/fd/d3/7df6f7f43049bdef5dce9d1ffd85d227e7b3d265ae971995fc07c33c1231/ssbench-0.3.6.tar.gz" } ], "0.3.7.2": [], "0.3.8": [ { "comment_text": "", "digests": { "md5": "400d2b0f8f40811c90d5f3c6a5bb2adc", "sha256": "de96e4ae00649d68e13d8c6cd5f18345039293106fa2bbbdf156e930f4232b7e" }, "downloads": -1, "filename": "ssbench-0.3.8.tar.gz", "has_sig": false, "md5_digest": "400d2b0f8f40811c90d5f3c6a5bb2adc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72873, "upload_time": "2016-03-08T20:29:49", "url": "https://files.pythonhosted.org/packages/97/32/3eddcc9b7ad620738585cdb2f5292059458cad4f766cb9612e106729f1ee/ssbench-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "6d3dc78268816017352b021c25aa2d42", "sha256": "b458bb2e34daee7164da56477a424ab70b0f31e3c05ae7bfda9d8601d890fb77" }, "downloads": -1, "filename": "ssbench-0.3.9.tar.gz", "has_sig": false, "md5_digest": "6d3dc78268816017352b021c25aa2d42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73795, "upload_time": "2016-03-23T22:30:05", "url": "https://files.pythonhosted.org/packages/a3/34/2d259436833ee43cf42bbb3cc6c853e847604dd21d744d80ba05fbce761e/ssbench-0.3.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6d3dc78268816017352b021c25aa2d42", "sha256": "b458bb2e34daee7164da56477a424ab70b0f31e3c05ae7bfda9d8601d890fb77" }, "downloads": -1, "filename": "ssbench-0.3.9.tar.gz", "has_sig": false, "md5_digest": "6d3dc78268816017352b021c25aa2d42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73795, "upload_time": "2016-03-23T22:30:05", "url": "https://files.pythonhosted.org/packages/a3/34/2d259436833ee43cf42bbb3cc6c853e847604dd21d744d80ba05fbce761e/ssbench-0.3.9.tar.gz" } ] }