Nathan Bronson b7198c3afe reduce db mutex contention for write batch groups
Summary:
This diff allows a Writer to join the next write batch group
without acquiring any locks. Waiting is performed via a per-Writer mutex,
so all of the non-leader writers never need to acquire the db mutex.
It is now possible to join a write batch group after the leader has been
chosen but before the batch has been constructed. This diff doesn't
increase parallelism, but reduces synchronization overheads.

For some CPU-bound workloads (no WAL, RAM-sized working set) this can
substantially reduce contention on the db mutex in a multi-threaded
environment.  With T=8 N=500000 in a CPU-bound scenario (see the test
plan) this is good for a 33% perf win.  Not all scenarios see such a
win, but none show a loss.  This code is slightly faster even for the
single-threaded case (about 2% for the CPU-bound scenario below).

Test Plan:
1. unit tests
2. COMPILE_WITH_TSAN=1 make check
3. stress high-contention scenarios with db_bench -benchmarks=fillrandom -threads=$T -batch_size=1 -memtablerep=skip_list -value_size=0 --num=$N -level0_slowdown_writes_trigger=9999 -level0_stop_writes_trigger=9999 -disable_auto_compactions --max_write_buffer_number=8 -max_background_flushes=8 --disable_wal --write_buffer_size=160000000

Reviewers: sdong, igor, rven, ljin, yhchiang

Subscribers: dhruba

Differential Revision: https://reviews.facebook.net/D43887
2015-08-14 10:55:43 -07:00
..
2015-07-17 18:59:11 +02:00
2015-07-17 12:02:52 -07:00
2015-08-05 07:33:27 -07:00
2015-07-20 17:20:40 -07:00
2015-08-11 17:52:23 -07:00
2015-08-11 12:19:56 -07:00
2015-07-20 17:20:40 -07:00
2015-04-23 12:10:36 -07:00
2015-03-17 14:08:00 -07:00
2015-08-07 21:59:51 -07:00
2015-08-06 17:59:05 -07:00
2015-01-26 11:48:07 -08:00
2015-07-07 12:10:10 -07:00
2015-07-07 12:10:10 -07:00
2015-08-05 07:33:27 -07:00
2015-08-05 07:33:27 -07:00
2015-03-30 16:05:35 -04:00
2015-03-17 14:08:00 -07:00
2015-08-11 11:25:22 -07:00
2015-08-06 17:59:05 -07:00
2015-08-11 12:19:56 -07:00
2015-07-20 17:20:40 -07:00
2014-11-10 17:39:38 -05:00
2015-07-29 16:54:23 -07:00
2015-07-29 16:54:23 -07:00
2015-08-06 17:59:05 -07:00
2015-05-29 14:36:35 -07:00