Commit 1742f182 authored by Huachao Huang's avatar Huachao Huang Committed by zhangjinpeng1987

Add `read_amp_bytes_per_bit` option (#136)

parent f3deb11b
...@@ -1563,6 +1563,11 @@ void crocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache( ...@@ -1563,6 +1563,11 @@ void crocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache(
options->rep.pin_l0_filter_and_index_blocks_in_cache = v; options->rep.pin_l0_filter_and_index_blocks_in_cache = v;
} }
void crocksdb_block_based_options_set_read_amp_bytes_per_bit(
crocksdb_block_based_table_options_t* options, int v) {
options->rep.read_amp_bytes_per_bit = v;
}
void crocksdb_options_set_block_based_table_factory( void crocksdb_options_set_block_based_table_factory(
crocksdb_options_t *opt, crocksdb_options_t *opt,
crocksdb_block_based_table_options_t* table_options) { crocksdb_block_based_table_options_t* table_options) {
......
...@@ -594,6 +594,9 @@ crocksdb_block_based_options_set_cache_index_and_filter_blocks( ...@@ -594,6 +594,9 @@ crocksdb_block_based_options_set_cache_index_and_filter_blocks(
extern C_ROCKSDB_LIBRARY_API void extern C_ROCKSDB_LIBRARY_API void
crocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache( crocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache(
crocksdb_block_based_table_options_t*, unsigned char); crocksdb_block_based_table_options_t*, unsigned char);
extern C_ROCKSDB_LIBRARY_API void
crocksdb_block_based_options_set_read_amp_bytes_per_bit(
crocksdb_block_based_table_options_t*, int);
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_block_based_table_factory( extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_block_based_table_factory(
crocksdb_options_t* opt, crocksdb_block_based_table_options_t* table_options); crocksdb_options_t* opt, crocksdb_block_based_table_options_t* table_options);
......
...@@ -138,8 +138,8 @@ pub enum CompactionPriority { ...@@ -138,8 +138,8 @@ pub enum CompactionPriority {
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
#[repr(C)] #[repr(C)]
pub enum DBStatisticsTickerType { pub enum DBStatisticsTickerType {
BlockCacheMiss = 0, // total block cache miss BlockCacheMiss = 0, // total block cache miss
BlockCacheHit = 1, // total block cache hit BlockCacheHit = 1, // total block cache hit
BlockCacheAdd = 2, BlockCacheAdd = 2,
BlockCacheAddFailures = 3, BlockCacheAddFailures = 3,
BlockCacheIndexMiss = 4, // times cache miss when accessing index block from block cache BlockCacheIndexMiss = 4, // times cache miss when accessing index block from block cache
...@@ -156,9 +156,9 @@ pub enum DBStatisticsTickerType { ...@@ -156,9 +156,9 @@ pub enum DBStatisticsTickerType {
BlockCacheDataHit = 15, // times cache hit when accessing data block from block cache BlockCacheDataHit = 15, // times cache hit when accessing data block from block cache
BlockCacheDataAdd = 16, BlockCacheDataAdd = 16,
BlockCacheDataBytesInsert = 17, BlockCacheDataBytesInsert = 17,
BlockCacheByteRead = 18, // bytes read from cache BlockCacheByteRead = 18, // bytes read from cache
BlockCacheByteWrite = 19, // bytes written into cache BlockCacheByteWrite = 19, // bytes written into cache
BloomFilterUseful = 20, // times bloom filter has avoided file reads BloomFilterUseful = 20, // times bloom filter has avoided file reads
MemtableHit = 25, MemtableHit = 25,
MemtableMiss = 26, MemtableMiss = 26,
GetHitL0 = 27, // Get() queries served by L0 GetHitL0 = 27, // Get() queries served by L0
...@@ -351,6 +351,10 @@ extern "C" { ...@@ -351,6 +351,10 @@ extern "C" {
block_options: *mut DBBlockBasedTableOptions, block_options: *mut DBBlockBasedTableOptions,
v: c_uchar, v: c_uchar,
); );
pub fn crocksdb_block_based_options_set_read_amp_bytes_per_bit(
block_options: *mut DBBlockBasedTableOptions,
v: c_int,
);
pub fn crocksdb_options_increase_parallelism(options: *mut Options, threads: c_int); pub fn crocksdb_options_increase_parallelism(options: *mut Options, threads: c_int);
pub fn crocksdb_options_optimize_level_style_compaction( pub fn crocksdb_options_optimize_level_style_compaction(
options: *mut Options, options: *mut Options,
......
...@@ -119,6 +119,15 @@ impl BlockBasedOptions { ...@@ -119,6 +119,15 @@ impl BlockBasedOptions {
v as u8); v as u8);
} }
} }
pub fn set_read_amp_bytes_per_bit(&mut self, v: u32) {
unsafe {
crocksdb_ffi::crocksdb_block_based_options_set_read_amp_bytes_per_bit(
self.inner,
v as c_int,
)
}
}
} }
pub struct RateLimiter { pub struct RateLimiter {
......
...@@ -562,3 +562,31 @@ fn test_read_options() { ...@@ -562,3 +562,31 @@ fn test_read_options() {
} }
assert!(key_count == 3); assert!(key_count == 3);
} }
#[test]
fn test_block_based_options() {
let path = TempDir::new("_rust_rocksdb_block_based_options").expect("");
let path_str = path.path().to_str().unwrap();
let mut opts = DBOptions::new();
opts.create_if_missing(true);
opts.enable_statistics();
opts.set_stats_dump_period_sec(60);
let mut bopts = BlockBasedOptions::new();
bopts.set_read_amp_bytes_per_bit(16);
let mut cfopts = ColumnFamilyOptions::new();
cfopts.set_block_based_table_factory(&bopts);
let db = DB::open_cf(opts.clone(), path_str, vec!["default"], vec![cfopts]).unwrap();
db.put(b"a", b"a").unwrap();
db.flush(true).unwrap();
db.get(b"a").unwrap();
assert_ne!(
opts.get_statistics_ticker_count(TickerType::ReadAmpTotalReadBytes),
0
);
assert_ne!(
opts.get_statistics_ticker_count(TickerType::ReadAmpEstimateUsefulBytes),
0
);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment