Skip to content

mv flexcache

Matthew Von-Maszewski edited this page Sep 23, 2013 · 29 revisions

Status

  • merged to master
  • code complete September 22, 2013
  • development started

History / Context

leveldb contains two caches per database (Riak vnode): file cache and block cache. The user establishes the size of each cache via the Options structure passed to leveldb upon database open. The two cache sizes are then fixed while the database is open. Within Riak, the two cache sizes are then fixed across all databases until Riak is restarted.

Riak is a very dynamic user of leveldb. Riak can have a highly variable number of databases open. And Riak can run for long periods of time, using hundreds to thousands of leveldb .sst table files. Both of these dynamics lead to suboptimal sizing of the two caches since sizes must conform to the worst case not the most likely, or to the mathematically estimated scenarios not the actual runtime usage.

This branch automates the sizing / resizing of the file cache and block cache during operation while maximizing total memory usage across a dynamic number databases. The variable items considered:

  • varying number of open databases (vnodes) as Riak performs handoffs
  • prioritized memory demands of file cache since cost of a cache miss in file cache is much greater than cost of block cache miss
  • file cache entries can become stale (not actively accessed) and therefore reduce the block cache size available to active files
  • Riak has two tiers of databases, user databases (vnodes) and internal databases (active anti-entropy management, AAE), that should get different allocations of memory
  • the total memory available to virtual servers can change dynamically in some VM environments and it would be helpful if leveldb could adjust without total restart

Branch description

pthread exit values

Clone this wiki locally