RocksDB系列二十:Simulation Cache

  Simulation Cache(SimCache)可以帮助用户在模拟的内存容量而不是物理上实际占用内存下预测block cache的性能数据,比如:hit、miss。

Motivation

  帮助用户调优参数:block cache size、更高效地使用内存。另外,也可以帮助用户了解 fast storage的cache性能。

Introduction

  SimCache的基本思想是根据要模拟的容量封装正常的block cache,但是这个封装后的block cache只有key,没有value。当插入数据时,把key插入到两个cache中,但是value只插入到normal cache。value的size会在两种cache中都计算进去,但是SimCache中因为只有key,所以并没有占用那么多的内存,但是以此却可以模拟block cache的一些行为。

How to use SimCache

  由于SimCache是normal cache的封装,所以必须要先创建一个block cache。

std::shared_ptr normal_block_cache =
  NewLRUCache(1024 * 1024 * 1024 /* capacity 1GB */);

然后使用NewSimCache来封装normal_block_cache,将rocksdb::BlockBasedTableOptions的block cache变量设置为SimCache实例,然后生成options.table_factory。

rocksdb::Options options;
rocksdb::BlockBasedTableOptions bbt_opts;
std::shared_ptr sim_cache = 
NewSimCache(normal_block_cache, 
  10 * 1024 * 1024 * 1024 /* sim_capacity 10GB */);
bbt_opts.block_cache = sim_cache;
options.table_factory.reset(new BlockBasedTableFactory(bbt_opts));

通过options配置来打开DB。通过调用sim_cache->get_hit_counter() and sim_cache->get_miss_counter()可以获取到SimCache的HIT/MISS。

Memory Overhead

用户可能会关注SimCache的实际内存占用,大致评估如下:
sim_capacity * entry_size / (entry_size + block_size),

  • 76 <= entry_size (key_size + other) <= 104
  • BlockBasedTableOptions.block_size = 4096 by default but is configurable

实际上,SimCache的实际内存开销大概是 sim_capacity * 2%

你可能感兴趣的:(RocksDB系列二十:Simulation Cache)