diff options
Diffstat (limited to 'devtools')
-rwxr-xr-x | devtools/slab_loadgen | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/devtools/slab_loadgen b/devtools/slab_loadgen new file mode 100755 index 0000000..357676f --- /dev/null +++ b/devtools/slab_loadgen @@ -0,0 +1,47 @@ +#!/usr/bin/python3 +# Copyright 2017 Facebook +# Licensed under the same terms as memcached itself. + +import argparse +import socket +import sys +import csv +from time import sleep + +parser = argparse.ArgumentParser(description="daemon for emulating set/get pressure") +parser.add_argument("--host", help="host to connect to", + type=str, default="localhost:11211") +parser.add_argument("-s", "--sleep", help="seconds between rounds", + type=int, default="1") +parser.add_argument("-c", "--config", help="load specification file", + type=str, default="./config") + +args = parser.parse_args() + +# prefix, size, count, do_gets +with open(args.config, newline='') as f: + reader = csv.reader(f) + tests = [row for row in reader] + +host, port = args.host.split(':') + +c = socket.create_connection((host, port), 5) +s = c.makefile(mode="rw", buffering=1) + +global_counter = 0 + +while True: + # LATER: stat argument file + # LATER: reload arg file if necessary + for test in tests: + prefix = test[0] + size = int(test[1]) + count = int(test[2]) + do_gets = int(test[3]) + value = 'x'*size + # issue N 'noreply' sets per specified size + for i in range(count): + s.write('set {}{} 0 0 {} noreply\r\n{}\r\n'.format(prefix,global_counter,size,value)) + global_counter += 1 + # TODO: issue N gets per specified size? + sleep(args.sleep) |