rocksdb/include/rocksdb
Igor Canadi a2bb7c3c33 Push- instead of pull-model for managing Write stalls
Summary:
Introducing WriteController, which is a source of truth about per-DB write delays. Let's define an DB epoch as a period where there are no flushes and compactions (i.e. new epoch is started when flush or compaction finishes). Each epoch can either:
* proceed with all writes without delay
* delay all writes by fixed time
* stop all writes

The three modes are recomputed at each epoch change (flush, compaction), rather than on every write (which is currently the case).

When we have a lot of column families, our current pull behavior adds a big overhead, since we need to loop over every column family for every write. With new push model, overhead on Write code-path is minimal.

This is just the start. Next step is to also take care of stalls introduced by slow memtable flushes. The final goal is to eliminate function MakeRoomForWrite(), which currently needs to be called for every column family by every write.

Test Plan: make check for now. I'll add some unit tests later. Also, perf test.

Reviewers: dhruba, yhchiang, MarkCallaghan, sdong, ljin

Reviewed By: ljin

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D22791
2014-09-08 11:20:25 -07:00
..
utilities fix more compile warnings 2014-09-05 14:14:37 +08:00
c.h created a new ReadOptions parameter 'iterate_upper_bound' 2014-09-04 11:00:16 -07:00
cache.h Remove unused member(s) 2014-09-05 20:50:29 -07:00
compaction_filter.h Add missing include to use std::unique_ptr 2014-08-23 13:02:21 -04:00
comparator.h Add License message to public header files. 2013-11-18 10:21:35 -08:00
db.h Add DB::GetIntProperty() to return integer properties to be returned as integers 2014-07-28 16:55:57 -07:00
env.h Allow env_posix to lower background thread IO priority 2014-08-13 20:49:58 -07:00
filter_policy.h Implement full filter for block based table. 2014-09-08 10:37:05 -07:00
flush_block_policy.h move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
immutable_options.h introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
iostats_context.h Fix ios compile 2014-08-28 12:46:05 -04:00
iterator.h Add License message to public header files. 2013-11-18 10:21:35 -08:00
ldb_tool.h [RocksDB] allow LDB tool to have customized key formatter 2014-06-23 15:35:40 -07:00
memtablerep.h HashLinkList memtable switches a bucket to a skip list to reduce performance outliers 2014-07-01 17:14:15 -07:00
merge_operator.h Enhance partial merge to support multiple arguments 2014-03-24 17:57:13 -07:00
options.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
perf_context.h Add a function to return current perf level 2014-07-10 11:35:48 -07:00
rate_limiter.h expose RateLimiter definition 2014-07-25 15:17:06 -07:00
slice_transform.h Add License message to public header files. 2013-11-18 10:21:35 -08:00
slice.h JSON (Document) API sketch 2014-07-10 09:31:42 -07:00
statistics.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
status.h fix dropping column family bug 2014-09-02 12:25:58 -07:00
table_properties.h TablePropertiesCollectorFactory 2014-05-13 12:30:55 -07:00
table.h introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
transaction_log.h Revert "Fix bad merge of D16791 and D16767" 2014-03-12 09:37:43 -07:00
types.h Add License message to public header files. 2013-11-18 10:21:35 -08:00
universal_compaction.h Support Multiple DB paths (without having an interface to expose to users) 2014-07-02 21:14:44 -07:00
version.h Bump up version 2014-08-18 12:02:02 -07:00
write_batch.h WriteBatchWithIndex: a wrapper of WriteBatch, with a searchable index 2014-08-18 16:37:38 -07:00