You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "stack (JIRA)" <ji...@apache.org> on 2013/12/20 22:42:10 UTC

[jira] [Commented] (HBASE-10156) Fix up the HBASE-8755 slowdown when low contention

    [ https://issues.apache.org/jira/browse/HBASE-10156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13854583#comment-13854583 ] 

stack commented on HBASE-10156:
-------------------------------

After thinking on this for a while, here is a suggestion.

+ Handlers pass edits and sync calls across a ring buffer.
+ After handling off its edits and after it calls sync, the Handler goes into a holding pattern blocked waiting on its sync to complete (When the Handler passed its sync across the ringbuffer, it included a reference to an object that the Handler is currently blocked on for the syncer thread to pull on when sync completes).
+ A single appender/writer/consumer thread pulls from the ringbuffer and batches up the appends and syncs.
+ We have multiple threads running syncs as committed by 8755 (only in this case, I'll try and let them grow and shrink w/ demand rather than hardcode a number -- we'll see)
+ When one of the sync threads completes, it calls notify on all the sync objects it was called with thereby freeing up the blocked Handlers that are on their other end.

The above would at least remove the notifier thread.  There should also be less contention since we are doing explicit notifications rather than notifyAll and the use of the distruptor as the ringbuffer should make the edit+sync hand-off less contending as it goes out of its way to minimize locking and instances of volatile read/writes.

Now let me prove the above is better than what we have.

Elliott helped out on the above.  In particular he came up w/ the nice simplification that has us passing the object-the-handler-is-waiting-on off to the sync thread so it can do selective notifications.  It allowed for doing away w/ an ugly backchannel and notification thread I had up in an earlier incarnation.

> Fix up the HBASE-8755 slowdown when low contention
> --------------------------------------------------
>
>                 Key: HBASE-10156
>                 URL: https://issues.apache.org/jira/browse/HBASE-10156
>             Project: HBase
>          Issue Type: Sub-task
>          Components: wal
>            Reporter: stack
>            Assignee: stack
>         Attachments: Disrupting.java
>
>
> HBASE-8755 slows our writes when only a few clients.  Fix.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)