[ https://issues.apache.org/jira/browse/HBASE-14331?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15331253#comment-15331253 ]
Hiroshi Ikeda commented on HBASE-14331: --------------------------------------- bq. Do you want to close this issue then in favor of HBASE-14479? I think these issues focus on different concerns (even though they would be related). A big issue is hard to tackle. bq. So, where would we do scheduling if the Reader threads ran the request Hiroshi Ikeda? Even if we adopt the strategy of making reader threads tend to directly execute tasks, we can use queues to store excessive tasks waiting for their turn (putting it aside whether we should do so). Passing tasks between different threads will actually reduce latency (and that would be justified in heavy congestion), but throughput will be harmed by context switches and using CAS based queues might be not so harmful. Rather, I worry how compatibility issues around callQueue in the way to make reader directly execute tasks. > 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 > Assignee: Hiroshi Ikeda > Attachments: BlockingQueuesPerformanceTestApp-output.pdf, > BlockingQueuesPerformanceTestApp-output.txt, > BlockingQueuesPerformanceTestApp.java, CallQueuePerformanceTestApp.java, > HBASE-14331-V2.patch, HBASE-14331-V3.patch, HBASE-14331-V4.patch, > HBASE-14331-V5.patch, HBASE-14331-V6.patch, HBASE-14331-V6.patch, > HBASE-14331.patch, HBASE-14331.patch, SemaphoreBasedBlockingQueue.java, > SemaphoreBasedLinkedBlockingQueue.java, > SemaphoreBasedPriorityBlockingQueue.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)