mod_benchmark_storage/mod_benchmark_storage.lua
changeset 1773 f2705465cab4
child 2198 136497948bf0
equal deleted inserted replaced
1772:163967467308 1773:f2705465cab4
       
     1 -- mod_benchmark_storage
       
     2 -- Copyright (C) 2015 Kim Alvefur
       
     3 --
       
     4 -- Prime numbers are pretty cool
       
     5 
       
     6 local gettime = require"socket".gettime;
       
     7 
       
     8 local sm = require"core.storagemanager";
       
     9 local um = require"core.usermanager";
       
    10 local mm = require"core.modulemanager";
       
    11 
       
    12 local test_data, test_users;
       
    13 
       
    14 function module.command(arg)
       
    15 	local test_driver = arg[1];
       
    16 	if not test_driver then
       
    17 		return print("Usage: prosodyctl mod_"..module.name.." <storage driver>");
       
    18 	end
       
    19 
       
    20 	sm.initialize_host("localhost");
       
    21 	um.initialize_host("localhost");
       
    22 
       
    23 	local start_time = gettime();
       
    24 	local storage = assert(sm.load_driver("localhost", test_driver));
       
    25 	storage = assert(storage:open("benchmark"));
       
    26 	-- for i = 1, 23 do
       
    27 		-- storage:set(test_users[i], test_data);
       
    28 	-- end
       
    29 	local floor, sin, random, pi = math.floor, math.sin, math.random, math.pi;
       
    30 	for i = 1, 10079 do
       
    31 		if i % 11 == 1 then
       
    32 			storage:set(test_users[i%23+1], test_data[3-floor(sin(random()*pi)*3)]);
       
    33 		else
       
    34 			storage:get(test_users[i%23+1]);
       
    35 		end
       
    36 		if i % 151 == 0 then
       
    37 			-- Give indication of progress
       
    38 			io.write("*");
       
    39 			io.flush();
       
    40 		end
       
    41 	end
       
    42 	-- Cleanup
       
    43 	for i = 1, 23 do
       
    44 		storage:set(test_users[i], nil);
       
    45 	end
       
    46 	mm.unload("localhost", "storage_"..test_driver);
       
    47 	local time_taken = gettime() - start_time;
       
    48 	io.write("\27[0G\27[K"); -- Clear current line
       
    49 	io.flush();
       
    50 	print(("Took %fs with mod_storage_%s"):format(time_taken, test_driver));
       
    51 end
       
    52 
       
    53 -- 23 usernames
       
    54 test_users = {
       
    55 	"tritonymph"; "ankylotomy"; "tron"; "barbaric"; "twiddler"; 
       
    56 	"spiritful"; "unmollifiably"; "suggestion"; "presubsistence"; 
       
    57 	"unneeded"; "taxemic"; "teloteropathic"; "nonbending"; "mev"; 
       
    58 	"septifragally"; "clame"; "obsolescent"; "unconceivable"; 
       
    59 	"foolishly"; "conjunctur"; "precirculation"; "bethump"; "vermivorous";
       
    60 };
       
    61 
       
    62 test_data = {
       
    63 	{ some_data = "tiny data" };
       
    64 	--
       
    65 	{ [false] = { version = 1; pending = {}; }; -- Medium data
       
    66 		["user@example.com"] = { subscription = "both"; groups = {};
       
    67 			name = "My Best Friend"; }; };
       
    68 	--
       
    69 	{ attr = { xmlns = "vcard-temp"; }; name = "vCard"; -- The largest data
       
    70 	{ attr = { xmlns = "vcard-temp"; }; name = "NICKNAME"; "Buster"; };
       
    71 	{ attr = { xmlns = "vcard-temp"; }; name = "PHOTO";
       
    72 	{ attr = { xmlns = "vcard-temp"; }; name = "TYPE"; "image/jpeg"; };
       
    73 	{ attr = { xmlns = "vcard-temp"; }; name = "BINVAL"; [[
       
    74 	/9j/4AAQSkZJRgABAgAAZABkAAD/2wBDAAgFBQUGBQgGBggLBwYHCw0JCAgJDQ8MDA0MDA8RDAwM
       
    75 	DAwMEQ4RERIREQ4XFxgYFxcgICAgICQkJCQkJCQkJCT/2wBDAQgICA8ODxwTExwfGRQZHyQkJCQk
       
    76 	JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCT/wAARCAA8ADwDAREA
       
    77 	AhEBAxEB/8QAGwAAAgMBAQEAAAAAAAAAAAAABgcDBAUCCAH/xAA9EAACAQIEAgcECAMJAAAAAAAB
       
    78 	AgMEEQAFEhMGIQcUFSIxQWEWQlFSIyQyM2JxgZElcqEXJjSCksHR8PH/xAAbAQACAwEBAQAAAAAA
       
    79 	AAAAAAAEBQECAwYAB//EADcRAAEDAwIDBAcGBwAAAAAAAAEAAgMEESESMQUTQSJRYYEUIzJCcaGx
       
    80 	BhUWkdHhQ1JyguLw8f/aAAwDAQACEQMRAD8ASI+7+N8WVuiNuiPgaHinPXkr115TloWWpjvbedj9
       
    81 	FCT8psS3py88I+N8SNPHZvtu28PFFU0Oo36L0dDTxQxrHGqpEgCoigBVUCwVQPADHz3ckndMLr7M
       
    82 	jFOSsR5BL3v5eF8edfyUtOVVENZJGdcDR8ySTc8v1APP8sYPjwStg9oO4Q/xTw9Q5vl0tFXw7tPI
       
    83 	De47ynyeNvJlPhgrhde6CQOBROlkjdLsrzdnuUVGS5rUZdMdbQN3HHLWh7ySf5hj6pTzCWMOHVc3
       
    84 	U05ikLCtn2Io/Z/tb2goetbe92bt1O9f5NW3bV6/Z9cNfQJe76IH0lurT1Q2SAAPMW/fABRCe3Qx
       
    85 	VZTkHR1NnOZTLBHU1U88jEd5khAiXSPMDSccPx1jp6oMbkiw/PKa0rDowF1WdN1bXTCDhnLN0yoX
       
    86 	p5ahlJYKdLu8at9GB64Y0/2TcGa538pned/7R1+irzoydLQZHnoNvNRTZX0wZs9LHX522XmoLt9T
       
    87 	coAttY1CFUChF5ePPDWGHhkJNo3yfGwVHU8zhu1nzWPmfB3FsGtn4nlnZH0d+pqFu37thjFW8L2d
       
    88 	TWHkVmeHVNrtkCxIuMOKOF8x6pm01RW09jqp3nOvTf7cU3zC3g3LFa/g/DauAupWiOUdLdPgoiqq
       
    89 	mnktN2gUW5VT8L9IeTisraI9YS8bM9hUR3J0MtRGAWB9bj0xw9VUT8PkDWnsnPh44KdiOOoZqIsV
       
    90 	H7B/xzsrqw7F7H6v2htpu9Y3b7mrw3f08MdP+MYvRuZ/GvbR0+P9KTfc/rbe7/N1S94A4Upc4qJc
       
    91 	wzQfwjLyokiuVM8zi6QBhzC6RqcjnbkPHE8TrHQtsz23fLx/RTQUnNdn2QmHxBmdJSw9dEKTjJaM
       
    92 	V9PlunRTjVMtHTRugt3AXJCjCOkhc+9zhxsT73endTM2Fmlu9v2WnwzlVJQrvbcSq4NTU7UQTvzW
       
    93 	dFVie5Gt7KnwwyqaySZ3bJdpwL9yygp2xts0Wvv8UV5jmQy+lgaaHflq20qVIVIkK+99oryGLOYA
       
    94 	FlHcu+CG6+uylsygo2BV6lC1OyhQZGI0hQ7EBrfDA7Wbohzu9LvjzKnjqDVTqeqzsqxsCCUdVb7X
       
    95 	vDVYXwbTPLSC3BQk7bjOy2OhbOqOKnqcvkUpNNMDAefejIY6fTSfP1wg+0tM95D77Bb0J7Fk1ttd
       
    96 	Gry8NXnji7m9kTqzZJ/oyhgm4fenYrv0dXJJIoN+7KiaHP8Aotj6FxcHnA9C36IbhQAYR1uiLP8A
       
    97 	Kes09VVkkQHL5oKgAXcbbrVQuL8vvIrH88C0lSGENPU4+OyIqog4X7ltUCRPC7ogfbQM8Xk1vPu+
       
    98 	PLwwYQQVAVyWET00FNX6o1XvtMshu4t9jkb4uXEhZWAKAeO4+J1qsqroI1jyennLUYbuyGfUBNqa
       
    99 	2pbe76LgiHSGm9wSsJy4vxYhUukfMkMSQ1ZEk4QmBxbS5va/L4c+eLU7SThRUOACFcizJsvzGmrI
       
   100 	320hdST4DTf/AIxaqh1tLd16B+mxKOv7Wq7tbrOz/dnb2tuw39Wr/Ffv7vy+uFv4Vj9Hvq9be/8A
       
   101 	j+XXvWP3l6/bsXt+6EujGvShzmvrqmfaoaeglecM+hJJSQlLGxseZlbl+uH89G2dug+XgUJBVGN5
       
   102 	cPNM3hXijhXO/qy1iR1UwKSUVQQshZu6Ql+7IOdhpxxXFeH1ULhZhIHvNz/xOo66OQYPkVUycV2X
       
   103 	b2W1p2amgdo5ApIYpq0o128mW2HQkbI0OHX5KGHFlvFlo6VElmeZRJs07HuoEc8t1m8VXnfzONGG
       
   104 	4K84ZCq8SxVJlaQSUppRCqQrI5GmUkWEZJa48efni7g3os2uN8pa9IUqyUdEyrZigEiGxMTrzZBb
       
   105 	/pwVSElxCHqh2boUjnhnpmgiRmmCXkcgWVQRaw/Owwy5QAuN0tM5dvsp+v0/Z+ru7ttvZ1jXq1ad
       
   106 	O14288a2wsrqLPKCfKn7NDnZ1a3Ye/KnK7eig90Y20aQFlqvcKjHLIJNcTFZVIkjYeKuDcMPUHFg
       
   107 	dwFByE/qrN8v4ioEz+gbXVMIap0FwplmiiWupVY/JIobl4N+eAK2mBjvbI/3zR1FOQ8C+DhQHiPI
       
   108 	aQOssgklj70lMQ17Hlq0WZmJIwh0OOU7Lhm6EuOeIcizuJJjRyRadRWfQ0NlB069txpbkLchywXC
       
   109 	Xg4shJtJGboPXMUrqzQokmpaaJ2LSNbmsZRZG8Od8MaKHt3KAqpbtsLrKy/UpdlJ740HSbGwZSPH
       
   110 	8QGGDWAtv3lBA2KKOq5R7H9V00/a3aHZe7Ybu1q67v6v5vor/LimnOi3vfJX1Y1eF1qcTcMVWdTu
       
   111 	Mqp5KqS4cGEalWS3NWfkouPXGr5GgZKzDCThQ5J0KcYVFZEayNKLLzpMs+oO4QgkiKLlqceHPlgR
       
   112 	9cGG7QSUTHSFxuSAEzJOG5svyJMiyWjqI48vjaahqHkR92WRvpon1FbO9tXwGFj5ZnG56ppHHC0W
       
   113 	wh7hzgfj6nk6zWwxrK8gLJJUoymJjeUMoDd/4G/jiksOqw2XoZw0G+Vu1XAtZNUsyU1DHSSRhZIp
       
   114 	JJJZNY99e6EA/DjI0thg5WjasXyMIO4n6MeJp2bs9KRouYKrJtWJFvAp/vguik5TruyhascwdnGU
       
   115 	LwcB8Y5ejCoyiWUchqj0TAWcNrXaZz5fDDZtVGWAXF/1S407wdlW9m8+7T6x1Gv1bm7t9Xkte9/l
       
   116 	+OCdcHN16wsOXLy9NvBOCo9tesL2L1Ps+30PVvufDuatvnb+mF8mr3UXHy/e+eyYUduqQ733mga/
       
   117 	5rDVb9cCZstha+FC+1c2v62xGFJXA2vO/pbFQpXMmzbz8fPwxBspCoVWzq5f0xkVqFnyaNR29Wr8
       
   118 	FsQtGrr65p97R/X/ANxCn6r/2Q==]]; }; }; };
       
   119 };