You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Hiroshi Ikeda (JIRA)" <ji...@apache.org> on 2015/08/28 10:22:52 UTC

[jira] [Updated] (HBASE-14331) a single callQueue related improvements

     [ https://issues.apache.org/jira/browse/HBASE-14331?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hiroshi Ikeda updated HBASE-14331:
----------------------------------
    Attachment: CallQueuePerformanceTestApp.java

Added a simple application to check performance between {{LinkedBlockingQueue}} and {{ConcurrentLinkedQueue}} with {{Semaphore}}. The callQueue here is not one in HBase but is defined inside as a mere simple interface. This application also show how many threads to read from the queue were simultaneously waken.

In my environment using {{ConcurrentLinkedQueue}} is about 1.5-2 times faster, aside from whether the performance test practically makes sense.


> a single callQueue related improvements
> ---------------------------------------
>
>                 Key: HBASE-14331
>                 URL: https://issues.apache.org/jira/browse/HBASE-14331
>             Project: HBase
>          Issue Type: Improvement
>          Components: IPC/RPC, Performance
>            Reporter: Hiroshi Ikeda
>            Priority: Minor
>         Attachments: CallQueuePerformanceTestApp.java
>
>
> {{LinkedBlockingQueue}} well separates locks between the {{take}} method and the {{put}} method, but not between takers, and not between putters. These methods are implemented to take locks at the almost beginning of their logic. HBASE-11355 introduces multiple call-queues to reduce such possible congestion, but I doubt that it is required to stick to {{BlockingQueue}}.
> There are the other shortcomings of using {{BlockingQueue}}. When using multiple queues, since {{BlockingQueue}} blocks threads it is required to prepare enough threads for each queue. It is possible that there is a queue starving for threads while there is another queue where threads are idle. Even if you can tune parameters to avoid such situations, the tuning is not so trivial.
> I suggest using a single {{ConcurrentLinkedQueue}} with {{Semaphore}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)