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

Daryn Sharp commented on HADOOP-10278:
--------------------------------------

I think some of the anomalies you are seeing may be due to other entropy.  I'd 
be concerned if it was say a 5% difference, but a fraction of a percent isn't 
worth extra complexity and locking.  I checked the source for take vs poll, and 
they are virtually identical sans one calls condition.await() and the other 
condition.await(nanos).  Thus I don't see how poll time impacts normal 
operation.  During a queue swap, a longer poll just means idle handlers waiting 
on an empty queue will take a little longer to switch over to another queue - 
no big deal.  I also can't see how poll time and client cpu can possibly be 
correlated.

Anyway, another RW lock or other synchronization to protect against the 
exceedingly rare, if ever, use case of a queue swap is overkill.  Although the 
impact may appear minimal at the scale you tested, I have grave concerns with 
5-10 readers and 100-200 handlers.  Highly contended locks exhibit very poor 
performance characteristics.

I glanced at the former pre-lock/custom-queue patch and I think it's pretty 
good.  Ie. bounded take via poll and atomic ref swap.  It's minimally invasive 
and shouldn't pose any real-world (non micro-benchmark) performance impact.  
Drainto may need to be replaced to avoid undefined behavior.

I generally agree with Hiroshi on abstraction but creating a wrapper class to 
passthrough all the methods just to convert take to poll may be overkill.


> Refactor to make CallQueue pluggable
> ------------------------------------
>
>                 Key: HADOOP-10278
>                 URL: https://issues.apache.org/jira/browse/HADOOP-10278
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: ipc
>            Reporter: Chris Li
>         Attachments: HADOOP-10278-atomicref-rwlock.patch, 
> HADOOP-10278-atomicref.patch, HADOOP-10278-atomicref.patch, 
> HADOOP-10278-atomicref.patch, HADOOP-10278.patch, HADOOP-10278.patch
>
>
> * Refactor CallQueue into an interface, base, and default implementation that 
> matches today's behavior
> * Make the call queue impl configurable, keyed on port so that we minimize 
> coupling



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to