rocksdb/db
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
..
builder.cc introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
builder.h introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
c_test.c fix valgrind error in c_test caused by BlockBasedTableOptions 2014-08-26 09:57:25 -07:00
c.cc Implement full filter for block based table. 2014-09-08 10:37:05 -07:00
column_family_test.cc Ignore missing column families 2014-09-02 13:29:05 -07:00
column_family.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
column_family.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
compaction_picker.cc fix more compile warnings 2014-09-05 14:14:37 +08:00
compaction_picker.h Changes to support unity build: 2014-08-11 13:22:47 -04:00
compaction.cc fix more compile warnings 2014-09-05 14:14:37 +08:00
compaction.h Changes to support unity build: 2014-08-11 13:22:47 -04:00
corruption_test.cc move block based table related options BlockBasedTableOptions 2014-08-25 14:22:05 -07:00
cuckoo_table_db_test.cc Fix compaction bug in Cuckoo Table Builder. Use kvs_.size() instead of num_entries in FileSize() method. 2014-09-05 11:18:01 -07:00
db_bench.cc Implement full filter for block based table. 2014-09-08 10:37:05 -07:00
db_filesnapshot.cc rename options_ to db_options_ in DBImpl to avoid confusion 2014-09-05 11:48:17 -07:00
db_impl_debug.cc Fix valgrind issue 2014-09-08 08:01:25 -07:00
db_impl_readonly.cc rename options_ to db_options_ in DBImpl to avoid confusion 2014-09-05 11:48:17 -07:00
db_impl_readonly.h Fix ios compile 2014-08-28 12:46:05 -04:00
db_impl.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
db_impl.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
db_iter_test.cc Fix clang compiler warnings 2014-07-20 22:57:20 +08:00
db_iter.cc created a new ReadOptions parameter 'iterate_upper_bound' 2014-09-04 11:00:16 -07:00
db_iter.h created a new ReadOptions parameter 'iterate_upper_bound' 2014-09-04 11:00:16 -07:00
db_test.cc Implement full filter for block based table. 2014-09-08 10:37:05 -07:00
dbformat_test.cc Use IterKey instead of string in Block::Iter to reduce malloc 2014-07-23 12:31:11 -07:00
dbformat.cc remove_internal_filter_policy 2014-08-28 17:06:29 -07:00
dbformat.h fix a few compile warnings 2014-09-04 23:06:23 +08:00
deletefile_test.cc Start DeleteFileTest with clean plate 2013-11-15 16:30:23 -08:00
file_indexer_test.cc Allow user to specify DB path of output file of manual compaction 2014-07-21 19:06:00 -07:00
file_indexer.cc Allow user to specify DB path of output file of manual compaction 2014-07-21 19:06:00 -07:00
file_indexer.h Allow user to specify DB path of output file of manual compaction 2014-07-21 19:06:00 -07:00
filename_test.cc Support purging logs from separate log directory 2014-08-14 13:22:50 -07:00
filename.cc fix more compile warnings 2014-09-05 14:14:37 +08:00
filename.h Support purging logs from separate log directory 2014-08-14 13:22:50 -07:00
forward_iterator.cc Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
forward_iterator.h Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
internal_stats.cc fix more compile warnings 2014-09-05 14:14:37 +08:00
internal_stats.h Add is-file-deletions-enabled property 2014-08-26 16:26:29 -07:00
log_and_apply_bench.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
log_format.h Some minor refactoring on the code 2014-01-02 16:32:31 -08:00
log_reader.cc Make Log::Reader more robust 2014-02-28 13:19:47 -08:00
log_reader.h Fix UnmarkEOF for partial blocks 2014-01-27 14:49:10 -08:00
log_test.cc Make it compile on Debian/GCC 4.7 2014-03-14 22:44:35 +00:00
log_writer.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
log_writer.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
memtable_list.cc Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
memtable_list.h Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
memtable.cc Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
memtable.h Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
merge_context.h Enhance partial merge to support multiple arguments 2014-03-24 17:57:13 -07:00
merge_helper.cc Fixed the crash when merge_operator is not properly set after reopen. 2014-07-30 17:24:36 -07:00
merge_helper.h Fixed the crash when merge_operator is not properly set after reopen. 2014-07-30 17:24:36 -07:00
merge_operator.cc Some small cleaning up to make some compiling environment happy 2014-03-26 18:11:41 -07:00
merge_test.cc Temporary remove the last test in merge_test 2014-07-31 11:20:49 -07:00
perf_context_test.cc Missing includes 2014-03-14 13:02:20 -07:00
plain_table_db_test.cc introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
prefix_test.cc HashLinkList memtable switches a bucket to a skip list to reduce performance outliers 2014-07-01 17:14:15 -07:00
repair.cc fix more compile warnings 2014-09-05 14:14:37 +08:00
simple_table_db_test.cc introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
skiplist_test.cc Clean up arena API 2014-01-30 22:10:10 -08:00
skiplist.h Consolidate SliceTransform object ownership 2014-03-10 12:56:46 -07:00
snapshot.h fix a few compile warnings 2014-09-04 23:06:23 +08:00
table_cache.cc introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
table_cache.h introduce ImmutableOptions 2014-09-04 16:18:36 -07:00
table_properties_collector_test.cc fix asan check 2014-09-05 09:53:04 -07:00
table_properties_collector.cc Extract metaindex block from block-based table 2013-12-05 16:34:16 -08:00
table_properties_collector.h TablePropertiesCollectorFactory 2014-05-13 12:30:55 -07:00
transaction_log_impl.cc Fixed a file-not-found issue when a log file is moved to archive. 2014-05-12 17:50:21 -07:00
transaction_log_impl.h RocksDBLite 2014-04-15 13:39:26 -07:00
version_edit_test.cc Support Multiple DB paths (without having an interface to expose to users) 2014-07-02 21:14:44 -07:00
version_edit.cc Support Multiple DB paths (without having an interface to expose to users) 2014-07-02 21:14:44 -07:00
version_edit.h Fix swapped variable names to accurately reflect usage 2014-09-04 20:09:45 -07:00
version_set_test.cc Fix clang compiler warnings 2014-07-20 22:57:20 +08:00
version_set.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
version_set.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
write_batch_internal.h Ignore missing column families 2014-09-02 13:29:05 -07:00
write_batch_test.cc Remove path with arena==nullptr from NewInternalIterator 2014-09-04 17:40:41 -07:00
write_batch.cc Ignore missing column families 2014-09-02 13:29:05 -07:00
write_controller_test.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
write_controller.cc Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00
write_controller.h Push- instead of pull-model for managing Write stalls 2014-09-08 11:20:25 -07:00