Base path:  ~/riak/deps/eleveldb/c_src/leveldb

Intentional stall:  db/db_impl.cc  function DBImpl::MakeRoomForWrite() … see 
two "else if" clauses that contain Log() calls with "waiting / waiting 2".  
These are the two conditions in which the Google code intentionally stalls the 
caller via Wait().  

Write throttle:  in the first few lines of the same function, you will see the 
variable "throttle" used.  This is the write throttle I implemented.  Its 
implementation includes logic in db/version_set.h, which depends upon inputs 
sent to SetWriteRate() (version_set.h) and from GetBackgroundBacklog() 
(util/env_posix.cc).

This is my second generation throttle.  1.2.0 contained a throttle that was 
added in a rush and was not responsive to the users' environment.  1.2.1 is 
more refined and utilizes direct measurements from actual write throughput.

The write throttle was tested via 12 scenarios with data values ranging in size 
from 800 bytes to 130k and 2 to 64 vnodes.  The most harsh was 130k with 64 
vnodes, the next was 130k with 2 vnodes (this latter case simulates a vnode 
handoff which was failing with the 1.2.0 throttle).  The goal:  equivalent 
overall throughput, no stalls.

What else?

Matthew



On Nov 2, 2012, at 3:13 PM, Dietrich Featherston wrote:

> Hi Matthew,
> 
> Thanks again for your help with this upgrade. You mentioned yesterday that we 
> might be seeing iowait times higher due to amortizing stalls over all writes 
> vice the stop-the-world scenario seen in previous versions. Would you mind 
> pointing me to the codepath where these stalls are forecasted and implemented?
> 
> Thanks,
> D
> 


_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to