anchor.diff:  #!/usr/bin/env escript
  -%% -*- erlang -*-
  -%%! +K true +A 128 +P 60000 -smp enable -sname benchmark -pa ./ebin -pa ./deps/thrift/ebin
  +%%! +K true +A 128 +P 60000 -smp enable -sname benchmark -pa ./ebin -pa ./deps/thrift/ebin -setcookie e841d215484685567858aaec4d25af2f
   -mode(compile).
   
   -record(config, {hosts=[],concurrency=20,ratio=0.5,logdir="bench_log",size=100,keyspace=100000,method=thrift}).
   
   main(Options) ->
  +  net_kernel:start([benchmark, shortnames]),
  +  erlang:set_cookie(node(), e841d215484685567858aaec4d25af2f),
     code:add_pathsa(["./ebin", "./deps/thrift/ebin"]),
     process_flag(trap_exit, true),
     case parse_options(Options) of
  
positive.code: new_bytes(Size) ->
    << << N:8 >> || N <- lists:map(fun(_) -> random:uniform(256) end, lists:seq(1,Size)) >>.
    
  worker_loop(Method, Client, File, Data, Ratio, Host) ->
    {Key,Value} = array:get(random:uniform(array:size(Data))-1, Data),
    Start = lib_misc:now_float(),
    Result = (catch call_server(Method, random:uniform(), Ratio, Client, Key, Value)),
    End = lib_misc:now_float(),
  
negative.code: generate_test_data(0, _, _, A) -> A;
    
  generate_test_data(N, Key, Size, A) ->
    ets:insert(A, {N, Key, new_bytes(Size)}),
    generate_test_data(N-1, lib_misc:succ(Key), Size, A).
    
  duplicate(N, E) ->
    duplicate(N, E, []).
  