summaryrefslogtreecommitdiff
path: root/bin/swift-bench
diff options
context:
space:
mode:
authorChuck Thier <cthier@gmail.com>2010-09-27 23:10:09 +0000
committerChuck Thier <cthier@gmail.com>2010-09-27 23:10:09 +0000
commit88aa7907f5194cf78fcb383af56aff66f35378e6 (patch)
treeee68c9b77f6faaf5cc0c4ac249d746916f2d7f3a /bin/swift-bench
parent03bbb7e04d66dde18701ee5b8be0a47e0eddd8d8 (diff)
downloadswift-bench-88aa7907f5194cf78fcb383af56aff66f35378e6.tar.gz
Initial checkin of benchmark code
Diffstat (limited to 'bin/swift-bench')
-rwxr-xr-xbin/swift-bench104
1 files changed, 104 insertions, 0 deletions
diff --git a/bin/swift-bench b/bin/swift-bench
new file mode 100755
index 0000000..10df6a7
--- /dev/null
+++ b/bin/swift-bench
@@ -0,0 +1,104 @@
+#!/usr/bin/python
+
+import logging
+import os
+import sys
+import signal
+import uuid
+from optparse import OptionParser
+
+from swift.common.bench import BenchController
+from swift.common.utils import readconf, NamedLogger
+
+# The defaults should be sufficient to run the slapper on a SAIO
+CONF_DEFAULTS = {
+ 'auth': 'http://saio:11000/v1.0',
+ 'user': 'test:tester',
+ 'key': 'testing',
+ 'object_sources': '',
+ 'put_concurrency': '10',
+ 'get_concurrency': '10',
+ 'del_concurrency': '10',
+ 'concurrency': '',
+ 'object_size': '1',
+ 'num_objects': '1000',
+ 'num_gets': '10000',
+ 'delete': 'yes',
+ 'container_name': uuid.uuid4().hex,
+ 'use_proxy': 'yes',
+ 'url': '',
+ 'devices': 'sdb',
+ 'logging_level': 'INFO',
+ 'timeout': '10',
+ }
+
+if __name__ == '__main__':
+ usage = "usage: %prog [OPTIONS] [CONF_FILE]"
+ usage += """\n\nConf file (with defaults):
+
+ [bench]
+ auth = http://saio:11000/v1.0
+ user = test:tester
+ key = testing
+ concurrency = 10
+ object_size = 1
+ num_objects = 1000
+ num_gets = 10000
+ delete = yes
+ """
+ parser = OptionParser(usage=usage)
+ parser.add_option('-A', '--auth', dest='auth',
+ help='URL for obtaining an auth token')
+ parser.add_option('-U', '--user', dest='user',
+ help='User name for obtaining an auth token')
+ parser.add_option('-K', '--key', dest='key',
+ help='Key for obtaining an auth token')
+ parser.add_option('-u', '--url', dest='url',
+ help='Storage URL')
+ parser.add_option('-c', '--concurrency', dest='concurrency',
+ help='Number of concurrent connections to use')
+ parser.add_option('-s', '--object-size', dest='object_size',
+ help='Size of objects to PUT (in bytes)')
+ parser.add_option('-n', '--num-objects', dest='num_objects',
+ help='Number of objects to PUT')
+ parser.add_option('-g', '--num-gets', dest='num_gets',
+ help='Number of GET operations to perform')
+ parser.add_option('-x', '--no-delete', dest='delete', action='store_false',
+ help='If set, will not delete the objects created')
+
+ _, args = parser.parse_args()
+ if args:
+ conf = args[0]
+ if not os.path.exists(conf):
+ sys.exit("No such conf file: %s" % conf)
+ conf = readconf(conf, 'bench', log_name='swift-bench',
+ defaults=CONF_DEFAULTS)
+ else:
+ conf = CONF_DEFAULTS
+ parser.set_defaults(**conf)
+ options, _ = parser.parse_args()
+ if options.concurrency is not '':
+ options.put_concurrency = options.concurrency
+ options.get_concurrency = options.concurrency
+ options.del_concurrency = options.concurrency
+
+ def sigterm(signum, frame):
+ sys.exit('Termination signal received.')
+ signal.signal(signal.SIGTERM, sigterm)
+
+ logger = logging.getLogger()
+ logger.setLevel({
+ 'debug': logging.DEBUG,
+ 'info': logging.INFO,
+ 'warning': logging.WARNING,
+ 'error': logging.ERROR,
+ 'critical': logging.CRITICAL}.get(
+ options.logging_level, logging.INFO))
+ loghandler = logging.StreamHandler()
+ logformat = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
+ loghandler.setFormatter(logformat)
+ logger.addHandler(loghandler)
+ logger = NamedLogger(logger, 'swift-bench')
+
+ controller = BenchController(logger, options)
+ controller.run()