@ -118,7 +118,8 @@ class KeyGenerator {
}
}
} ;
} ;
static void SetupDB ( benchmark : : State & state , Options & options , DB * * dpptr ,
static void SetupDB ( benchmark : : State & state , Options & options ,
std : : unique_ptr < DB > * db ,
const std : : string & test_name = " " ) {
const std : : string & test_name = " " ) {
options . create_if_missing = true ;
options . create_if_missing = true ;
auto env = Env : : Default ( ) ;
auto env = Env : : Default ( ) ;
@ -132,15 +133,17 @@ static void SetupDB(benchmark::State& state, Options& options, DB** dpptr,
db_path + kFilePathSeparator + test_name + std : : to_string ( getpid ( ) ) ;
db_path + kFilePathSeparator + test_name + std : : to_string ( getpid ( ) ) ;
DestroyDB ( db_name , options ) ;
DestroyDB ( db_name , options ) ;
s = DB : : Open ( options , db_name , dpptr ) ;
DB * db_ptr = nullptr ;
s = DB : : Open ( options , db_name , & db_ptr ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
return ;
return ;
}
}
db - > reset ( db_ptr ) ;
}
}
static void TeardownDB ( benchmark : : State & state , DB * db , const Options & options ,
static void TeardownDB ( benchmark : : State & state , const std : : unique_ptr < DB > & db ,
KeyGenerator & kg ) {
const Options & options , KeyGenerator & kg ) {
char min_buff [ 256 ] , max_buff [ 256 ] ;
char min_buff [ 256 ] , max_buff [ 256 ] ;
const Range r ( kg . MinKey ( min_buff ) , kg . MaxKey ( max_buff ) ) ;
const Range r ( kg . MinKey ( min_buff ) , kg . MaxKey ( max_buff ) ) ;
uint64_t size ;
uint64_t size ;
@ -160,7 +163,7 @@ static void TeardownDB(benchmark::State& state, DB* db, const Options& options,
static void DBOpen ( benchmark : : State & state ) {
static void DBOpen ( benchmark : : State & state ) {
// create DB
// create DB
DB * db = nullptr ;
std : : unique_ptr < DB > db ;
Options options ;
Options options ;
SetupDB ( state , options , & db , " DBOpen " ) ;
SetupDB ( state , options , & db , " DBOpen " ) ;
@ -172,12 +175,17 @@ static void DBOpen(benchmark::State& state) {
auto rnd = Random ( 123 ) ;
auto rnd = Random ( 123 ) ;
for ( auto _ : state ) {
for ( auto _ : state ) {
Status s = DB : : Open ( options , db_name , & db ) ;
{
if ( ! s . ok ( ) ) {
DB * db_ptr = nullptr ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
Status s = DB : : Open ( options , db_name , & db_ptr ) ;
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
db . reset ( db_ptr ) ;
}
}
state . PauseTiming ( ) ;
state . PauseTiming ( ) ;
auto wo = WriteOptions ( ) ;
auto wo = WriteOptions ( ) ;
Status s ;
for ( int i = 0 ; i < 2 ; i + + ) {
for ( int i = 0 ; i < 2 ; i + + ) {
for ( int j = 0 ; j < 100 ; j + + ) {
for ( int j = 0 ; j < 100 ; j + + ) {
s = db - > Put ( wo , rnd . RandomString ( 10 ) , rnd . RandomString ( 100 ) ) ;
s = db - > Put ( wo , rnd . RandomString ( 10 ) , rnd . RandomString ( 100 ) ) ;
@ -204,7 +212,7 @@ BENCHMARK(DBOpen)->Iterations(200); // specify iteration number as the db size
static void DBClose ( benchmark : : State & state ) {
static void DBClose ( benchmark : : State & state ) {
// create DB
// create DB
DB * db ;
std : : unique_ptr < DB > db ;
Options options ;
Options options ;
SetupDB ( state , options , & db , " DBClose " ) ;
SetupDB ( state , options , & db , " DBClose " ) ;
@ -217,11 +225,16 @@ static void DBClose(benchmark::State& state) {
for ( auto _ : state ) {
for ( auto _ : state ) {
state . PauseTiming ( ) ;
state . PauseTiming ( ) ;
Status s = DB : : Open ( options , db_name , & db ) ;
{
if ( ! s . ok ( ) ) {
DB * db_ptr = nullptr ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
Status s = DB : : Open ( options , db_name , & db_ptr ) ;
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
db . reset ( db_ptr ) ;
}
}
auto wo = WriteOptions ( ) ;
auto wo = WriteOptions ( ) ;
Status s ;
for ( int i = 0 ; i < 2 ; i + + ) {
for ( int i = 0 ; i < 2 ; i + + ) {
for ( int j = 0 ; j < 100 ; j + + ) {
for ( int j = 0 ; j < 100 ; j + + ) {
s = db - > Put ( wo , rnd . RandomString ( 10 ) , rnd . RandomString ( 100 ) ) ;
s = db - > Put ( wo , rnd . RandomString ( 10 ) , rnd . RandomString ( 100 ) ) ;
@ -255,7 +268,7 @@ static void DBPut(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db = nullptr ;
static std : : unique_ptr < DB > db = nullptr ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -284,7 +297,7 @@ static void DBPut(benchmark::State& state) {
}
}
if ( state . thread_index ( ) = = 0 ) {
if ( state . thread_index ( ) = = 0 ) {
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
Status s = db_full - > WaitForCompact ( true ) ;
Status s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -332,7 +345,7 @@ static void ManualCompaction(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -391,7 +404,7 @@ static void ManualCompaction(benchmark::State& state) {
}
}
if ( state . thread_index ( ) = = 0 ) {
if ( state . thread_index ( ) = = 0 ) {
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -453,7 +466,7 @@ static void ManualFlush(benchmark::State& state) {
bool enable_statistics = true ;
bool enable_statistics = true ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -489,7 +502,7 @@ static void ManualFlush(benchmark::State& state) {
}
}
if ( state . thread_index ( ) = = 0 ) {
if ( state . thread_index ( ) = = 0 ) {
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
Status s = db_full - > WaitForCompact ( true ) ;
Status s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -529,7 +542,7 @@ static void DBGet(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -573,7 +586,7 @@ static void DBGet(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -648,7 +661,7 @@ BENCHMARK(DBGet)->Threads(8)->Iterations(kDBGetNum / 8)->Apply(DBGetArguments);
static void SimpleGetWithPerfContext ( benchmark : : State & state ) {
static void SimpleGetWithPerfContext ( benchmark : : State & state ) {
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
std : : string db_name ;
std : : string db_name ;
Options options ;
Options options ;
options . create_if_missing = true ;
options . create_if_missing = true ;
@ -668,10 +681,14 @@ static void SimpleGetWithPerfContext(benchmark::State& state) {
db_name = db_path + " /simple_get_ " + std : : to_string ( getpid ( ) ) ;
db_name = db_path + " /simple_get_ " + std : : to_string ( getpid ( ) ) ;
DestroyDB ( db_name , options ) ;
DestroyDB ( db_name , options ) ;
s = DB : : Open ( options , db_name , & db ) ;
{
if ( ! s . ok ( ) ) {
DB * db_ptr = nullptr ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
s = DB : : Open ( options , db_name , & db_ptr ) ;
return ;
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
return ;
}
db . reset ( db_ptr ) ;
}
}
// load db
// load db
auto wo = WriteOptions ( ) ;
auto wo = WriteOptions ( ) ;
@ -682,7 +699,7 @@ static void SimpleGetWithPerfContext(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -858,7 +875,7 @@ static void IteratorSeek(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -894,7 +911,7 @@ static void IteratorSeek(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -961,7 +978,7 @@ static void IteratorNext(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
options . compaction_style = compaction_style ;
options . compaction_style = compaction_style ;
@ -987,7 +1004,7 @@ static void IteratorNext(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -1036,7 +1053,7 @@ BENCHMARK(IteratorNext)
static void IteratorNextWithPerfContext ( benchmark : : State & state ) {
static void IteratorNextWithPerfContext ( benchmark : : State & state ) {
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
auto rnd = Random ( 301 + state . thread_index ( ) ) ;
auto rnd = Random ( 301 + state . thread_index ( ) ) ;
@ -1053,7 +1070,7 @@ static void IteratorNextWithPerfContext(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
Status s = db_full - > WaitForCompact ( true ) ;
Status s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -1128,7 +1145,7 @@ static void IteratorPrev(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
std : : string db_name ;
std : : string db_name ;
Options options ;
Options options ;
options . compaction_style = compaction_style ;
options . compaction_style = compaction_style ;
@ -1155,7 +1172,7 @@ static void IteratorPrev(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
@ -1212,7 +1229,7 @@ static void PrefixSeek(benchmark::State& state) {
uint64_t key_num = max_data / per_key_size ;
uint64_t key_num = max_data / per_key_size ;
// setup DB
// setup DB
static DB * db ;
static std : : unique_ptr < DB > db ;
Options options ;
Options options ;
if ( enable_statistics ) {
if ( enable_statistics ) {
options . statistics = CreateDBStatistics ( ) ;
options . statistics = CreateDBStatistics ( ) ;
@ -1249,7 +1266,7 @@ static void PrefixSeek(benchmark::State& state) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
}
}
auto db_full = static_cast_with_check < DBImpl > ( db ) ;
auto db_full = static_cast_with_check < DBImpl > ( db . get ( ) ) ;
s = db_full - > WaitForCompact ( true ) ;
s = db_full - > WaitForCompact ( true ) ;
if ( ! s . ok ( ) ) {
if ( ! s . ok ( ) ) {
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;
state . SkipWithError ( s . ToString ( ) . c_str ( ) ) ;