Driver and config for basho_bench testing.
This commit is contained in:
parent
54c5158490
commit
4076a1923c
2 changed files with 188 additions and 0 deletions
91
tools/basho_bench_driver_wterl.erl
Normal file
91
tools/basho_bench_driver_wterl.erl
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
-module(basho_bench_driver_wterl).
|
||||||
|
|
||||||
|
-record(state, { connection, uri }).
|
||||||
|
|
||||||
|
-export([new/1,
|
||||||
|
run/4]).
|
||||||
|
|
||||||
|
-include_lib("basho_bench/include/basho_bench.hrl").
|
||||||
|
|
||||||
|
|
||||||
|
%% ====================================================================
|
||||||
|
%% API
|
||||||
|
%% ====================================================================
|
||||||
|
|
||||||
|
new(1) ->
|
||||||
|
%% Make sure wterl is available
|
||||||
|
case code:which(wterl) of
|
||||||
|
non_existing ->
|
||||||
|
?FAIL_MSG("~s requires wterl to be available on code path.\n",
|
||||||
|
[?MODULE]);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
{ok, _} = wterl_sup:start_link(),
|
||||||
|
setup(1);
|
||||||
|
new(Id) ->
|
||||||
|
setup(Id).
|
||||||
|
|
||||||
|
setup(_Id) ->
|
||||||
|
%% Get the target directory
|
||||||
|
Dir = basho_bench_config:get(wterl_dir, "/tmp"),
|
||||||
|
Config = basho_bench_config:get(wterl, []),
|
||||||
|
Uri = config_value(table_uri, Config, "lsm:test"),
|
||||||
|
ConnectionOpts = config_value(connection, Config, [{create, true}]),
|
||||||
|
SessionOpts = config_value(session, Config, []),
|
||||||
|
TableOpts = config_value(table, Config, []),
|
||||||
|
|
||||||
|
%% Start WiredTiger
|
||||||
|
Connection =
|
||||||
|
case wterl_conn:is_open() of
|
||||||
|
false ->
|
||||||
|
case wterl_conn:open(Dir, ConnectionOpts, SessionOpts) of
|
||||||
|
{ok, Conn} ->
|
||||||
|
Conn;
|
||||||
|
{error, Reason0} ->
|
||||||
|
?FAIL_MSG("Failed to establish a WiredTiger connection, wterl backend unable to start: ~p\n", [Reason0])
|
||||||
|
end;
|
||||||
|
true ->
|
||||||
|
{ok, Conn} = wterl_conn:get(),
|
||||||
|
Conn
|
||||||
|
end,
|
||||||
|
case wterl:create(Connection, Uri, TableOpts) of
|
||||||
|
ok ->
|
||||||
|
{ok, #state{connection=Connection, uri=Uri}};
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
|
run(get, KeyGen, _ValueGen, #state{connection=Connection, uri=Uri}=State) ->
|
||||||
|
case wterl:get(Connection, Uri, KeyGen()) of
|
||||||
|
{ok, _Value} ->
|
||||||
|
{ok, State};
|
||||||
|
not_found ->
|
||||||
|
{ok, State};
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end;
|
||||||
|
run(put, KeyGen, ValueGen, #state{connection=Connection, uri=Uri}=State) ->
|
||||||
|
case wterl:put(Connection, Uri, KeyGen(), ValueGen()) of
|
||||||
|
ok ->
|
||||||
|
{ok, State};
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end;
|
||||||
|
run(delete, KeyGen, _ValueGen, #state{connection=Connection, uri=Uri}=State) ->
|
||||||
|
case wterl:delete(Connection, Uri, KeyGen()) of
|
||||||
|
ok ->
|
||||||
|
{ok, State};
|
||||||
|
not_found ->
|
||||||
|
{ok, State};
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
|
config_value(Key, Config, Default) ->
|
||||||
|
case proplists:get_value(Key, Config) of
|
||||||
|
undefined ->
|
||||||
|
Default;
|
||||||
|
Value ->
|
||||||
|
Value
|
||||||
|
end.
|
97
tools/wterl-b_b.config
Normal file
97
tools/wterl-b_b.config
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
%%-*- mode: erlang -*-
|
||||||
|
%% ex: ft=erlang ts=4 sw=4 et
|
||||||
|
|
||||||
|
%% How to:
|
||||||
|
%% * put the wterl-b_b.config file into basho_bench/examples
|
||||||
|
%% * put the basho_bench_driver_wterl.erl into basho_bench/src
|
||||||
|
%% * make clean in basho_bench, then make
|
||||||
|
%% * edit examples/wterl-b_b.config
|
||||||
|
%% - change {code_paths, ["../wterl"]}. to be a relative path to your
|
||||||
|
%% wterl directory
|
||||||
|
%% - change {wterl_dir, "/home/gburd/ws/basho_bench/data"}. to a fully
|
||||||
|
%% qualified location for your test data files (mkdir that directory
|
||||||
|
%% yourself, if it doesn't exist the test will fail 'enoent')
|
||||||
|
%% * to run, replace this path with the proper path on your system:
|
||||||
|
%% LD_LIBRARY_PATH=/home/you/wterl/priv ./basho_bench examples/wterl-b_b.config
|
||||||
|
%% * the test should run for 10 minutes (as it is configured right now)
|
||||||
|
%% with 4 concurrent workers accessing the same table
|
||||||
|
%%
|
||||||
|
%% Note:
|
||||||
|
%% There are two config sections in wt.config {wterl, [ ... ]}. and
|
||||||
|
%% {wterl_, [ ... ]}. The one being used is named "wterl" the other
|
||||||
|
%% config is ignored. I setup an LSM and BTREE config and to choose
|
||||||
|
%% which is run you just rename those two sections (turn one off by
|
||||||
|
%% adding a "_" to the name and take the "_" out of the other's name).
|
||||||
|
|
||||||
|
{mode, max}.
|
||||||
|
{duration, 10}.
|
||||||
|
{concurrent, 4}.
|
||||||
|
{driver, basho_bench_driver_wterl}.
|
||||||
|
{key_generator, {int_to_bin_littleendian,{uniform_int, 5000000}}}.
|
||||||
|
{value_generator, {fixed_bin, 10000}}.
|
||||||
|
{operations, [{get, 4}, {put, 4}, {delete, 2}]}.
|
||||||
|
{code_paths, ["../wterl"]}.
|
||||||
|
{wterl_dir, "/home/gburd/ws/basho_bench/data"}.
|
||||||
|
|
||||||
|
%% lsm
|
||||||
|
{wterl, [
|
||||||
|
{connection, [
|
||||||
|
{create, true},
|
||||||
|
{sync, false},
|
||||||
|
{logging, true},
|
||||||
|
{transactional, true},
|
||||||
|
{session_max, 1024},
|
||||||
|
{cache_size, 4294967296},
|
||||||
|
{verbose, []},
|
||||||
|
% "salvage", "verify" are okay, however...
|
||||||
|
% for some unknown reason, if you add these additional
|
||||||
|
% verbose flags Erlang SEGV's "size_object: bad tag for 0x80"
|
||||||
|
% no idea why... yet... you've been warned.
|
||||||
|
%"block", "shared_cache", "reconcile", "evict", "lsm",
|
||||||
|
%"fileops", "read", "write", "readserver", "evictserver",
|
||||||
|
%"hazard", "mutex", "ckpt"
|
||||||
|
{statistics_log, [{wait, 30}]}
|
||||||
|
]},
|
||||||
|
{session, [ {isolation, "snapshot"} ]},
|
||||||
|
{table_uri, "lsm:test"},
|
||||||
|
{table, [
|
||||||
|
{internal_page_max, "128K"},
|
||||||
|
{leaf_page_max, "128K"},
|
||||||
|
{lsm_chunk_size, "25MB"},
|
||||||
|
{prefix_compression, false},
|
||||||
|
{lsm_bloom_newest, true},
|
||||||
|
{lsm_bloom_oldest, true} ,
|
||||||
|
{lsm_bloom_bit_count, 128},
|
||||||
|
{lsm_bloom_hash_count, 64},
|
||||||
|
{lsm_bloom_config, [{leaf_page_max, "8MB"}]},
|
||||||
|
{block_compressor, "snappy"} % bzip2
|
||||||
|
]}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
%% btree
|
||||||
|
{wterl_, [
|
||||||
|
{connection, [
|
||||||
|
{create, true},
|
||||||
|
{sync, false},
|
||||||
|
{logging, true},
|
||||||
|
{transactional, true},
|
||||||
|
{session_max, 1024},
|
||||||
|
{cache_size, 4294967296},
|
||||||
|
{verbose, []},
|
||||||
|
% "salvage", "verify" are okay, however...
|
||||||
|
% for some unknown reason, if you add these additional
|
||||||
|
% verbose flags Erlang SEGV's "size_object: bad tag for 0x80"
|
||||||
|
% no idea why... yet... you've been warned.
|
||||||
|
%"block", "shared_cache", "reconcile", "evict", "lsm",
|
||||||
|
%"fileops", "read", "write", "readserver", "evictserver",
|
||||||
|
%"hazard", "mutex", "ckpt"
|
||||||
|
{statistics_log, [{wait, 30}]},
|
||||||
|
{checkpoint, [{await, 10}]}
|
||||||
|
]},
|
||||||
|
{session, [ {isolation, "snapshot"} ]},
|
||||||
|
{table_uri, "table:test"},
|
||||||
|
{table, [
|
||||||
|
{prefix_compression, false},
|
||||||
|
{block_compressor, "snappy"} % bzip2
|
||||||
|
]}
|
||||||
|
]}.
|
Loading…
Reference in a new issue