From 97aa401e2fad6457b5ec8bb24d364d4a09bff80c Mon Sep 17 00:00:00 2001 From: Mark Callaghan Date: Tue, 3 Dec 2013 12:32:07 -0800 Subject: [PATCH] Add compression options to db_bench Summary: This adds 2 options for compression to db_bench: * universal_compression_size_percent * compression_level - to set zlib compression level It also logs compression_size_percent at startup in LOG Task ID: # Blame Rev: Test Plan: make check, run db_bench Revert Plan: Database Impact: Memcache Impact: Other Notes: EImportant: - begin *PUBLIC* platform impact section - Bugzilla: # - end platform impact - Reviewers: dhruba CC: leveldb Differential Revision: https://reviews.facebook.net/D14439 --- db/db_bench.cc | 26 ++++++++++++++++++++++++++ util/options.cc | 3 +++ 2 files changed, 29 insertions(+) diff --git a/db/db_bench.cc b/db/db_bench.cc index d7c0223e48..33c1ecfe12 100644 --- a/db/db_bench.cc +++ b/db/db_bench.cc @@ -190,6 +190,10 @@ DEFINE_int32(universal_max_merge_width, 0, "The max number of files to compact" DEFINE_int32(universal_max_size_amplification_percent, 0, "The max size amplification for universal style compaction"); +DEFINE_int32(universal_compression_size_percent, -1, + "The percentage of the database to compress for universal " + "compaction. -1 means compress everything."); + DEFINE_int64(cache_size, -1, "Number of bytes to use as a cache of uncompressed" "data. Negative means use default settings."); @@ -324,6 +328,23 @@ DEFINE_string(compression_type, "snappy", static enum rocksdb::CompressionType FLAGS_compression_type_e = rocksdb::kSnappyCompression; +DEFINE_int32(compression_level, -1, + "Compression level. For zlib this should be -1 for the " + "default level, or between 0 and 9."); + +static bool ValidateCompressionLevel(const char* flagname, int32_t value) { + if (value < -1 || value > 9) { + fprintf(stderr, "Invalid value for --%s: %d, must be between -1 and 9\n", + flagname, value); + return false; + } + return true; +} + +static const bool FLAGS_compression_level_dummy = + google::RegisterFlagValidator(&FLAGS_compression_level, + &ValidateCompressionLevel); + DEFINE_int32(min_level_to_compress, -1, "If non-negative, compression starts" " from this level. Levels with number < min_level_to_compress are" " not compressed. Otherwise, apply compression_type to " @@ -1350,6 +1371,7 @@ class Benchmark { options.level0_slowdown_writes_trigger = FLAGS_level0_slowdown_writes_trigger; options.compression = FLAGS_compression_type_e; + options.compression_opts.level = FLAGS_compression_level; options.WAL_ttl_seconds = FLAGS_wal_ttl_seconds; options.WAL_size_limit_MB = FLAGS_wal_size_limit_MB; if (FLAGS_min_level_to_compress >= 0) { @@ -1411,6 +1433,10 @@ class Benchmark { options.compaction_options_universal.max_size_amplification_percent = FLAGS_universal_max_size_amplification_percent; } + if (FLAGS_universal_compression_size_percent != -1) { + options.compaction_options_universal.compression_size_percent = + FLAGS_universal_compression_size_percent; + } Status s; if(FLAGS_readonly) { diff --git a/util/options.cc b/util/options.cc index fffcce0a13..198d55384c 100644 --- a/util/options.cc +++ b/util/options.cc @@ -278,6 +278,9 @@ Options::Dump(Logger* log) const Log(log,"Options.compaction_options_universal." "max_size_amplification_percent: %u", compaction_options_universal.max_size_amplification_percent); + Log(log, + "Options.compaction_options_universal.compression_size_percent: %u", + compaction_options_universal.compression_size_percent); std::string collector_names; for (auto collector : table_properties_collectors) { collector_names.append(collector->Name());