Various in-memory storage systems exist today that offer similar functionality but with different features (some more performant, others more reliable). Each of the systems usually has its own APIs, making the benchmark results of them often incomparable. The goal of imembench is to extract and create a common wrapper of the interfaces exposed by these systems, and then drive these systems with almost-the-same workloads by exercising this common interface.
Implementation-wise, we need to use a common language that can talk to these systems in the form of either the source language or bindings.
after clone the main repository, run git submodule update --init --recursive
to
pull the git submodules for building.
Build dependencies:
cd bindings/ramcloud/c++ && make
bindings/ramcloud/c++/obj
, rename the obj
directory to obj.master
cd bindings/redis/c++/hiredis && make
cd bindings/tachyon/c++ && make
Build imembench:
cd loadgenerator && make
First, source env.sh
Then, copy the samplebench.ini
(in loadgenerator
directory) to imembench.ini
and
modify the configurations accordingly.
Usage: ./imembench [OPTIONS] [tachyon|ramcloud|redis|all]
OPTION
-l, --list list available benchmarks and supported targets
-c, --config_file configuration file (default imembench.ini) for the benchmark
-w, --workload_file workload trace file to use instead of the default benchmark
-b, --benchmark comma-separated list of benchmarks to run on the target systems
-t, --target comma-separated list of target system to evaluate
EXAMPLE
./imembench -c imembench.ini redis # care, run all benchmarks, very slow
./imembench -c imembench.ini --benchmark uniformRandomRW redis
./imembench -c imembench.ini --workload_file trace.ycsb --benchmark ycsbReplay --target redis,ramcloud
Supported targets:
Supported benchmarks:
RAMCloud:
createTable(name)
dropTable(name)
getTableId(name)
read(tableId, key, keyLength, value, rejectRules, ...)
write(tableId, key, keyLength, buf, length, ...)
increment(tableId, key, keyLength, incrementValue, ...)
remove(tableId, key, keyLength, ...)
Tachyon (http://tachyon-project.org/api/java/index.html):
int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
void seek(long pos)
skip(long n)
write(byte[] b)
write(byte[] b, int off, int len)
write(int b)
flush()
mkdir(TachyonURI path)
rename(TachyonURI srcPath, TachyonURI dstPath)
Redis:
RAMCloud:
Tachyon:
Redis: