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

Benoit Sigoure commented on HBASE-3115:
---------------------------------------

No I haven't tried it either - I don't use this HBase client anymore, I use my 
asynchronous client instead.

But given that the patch changes the code to call out.write() only once, I 
can't imagine how this can be split in 2 write() system calls that would result 
in 2 packets.

> HBaseClient wastes 1 TCP packet per RPC
> ---------------------------------------
>
>                 Key: HBASE-3115
>                 URL: https://issues.apache.org/jira/browse/HBASE-3115
>             Project: HBase
>          Issue Type: Improvement
>          Components: client
>    Affects Versions: 0.20.1, 0.20.2, 0.20.3, 0.20.4, 0.20.5, 0.20.6, 
> 0.89.20100621
>            Reporter: Benoit Sigoure
>            Assignee: Todd Lipcon
>            Priority: Minor
>         Attachments: hbase-3115.txt
>
>
> In {{ipc/HBaseClient.java}}, the method {{sendParam}} does:
> {code}
> out.writeInt(dataLength);      //first put the data length
> out.write(data, 0, dataLength);//write the data
> {code}
> While analyzing some tcpdump traces tonight, I saw that this consistently 
> translates to 1 TCP packet with a 4 byte payload followed by another TCP 
> packet with the RPC itself.  This makes inefficient use of network resources 
> and adversely affects TCP throughput.  I believe each of those lines 
> translates to a {{write}} system call on the socket's file descriptor 
> (unnecessary system calls are also bad for performance).  The code attempts 
> to call {{out.flush();}} but this approach is ineffective on sockets in Java 
> (as far as I empirically noticed over the past few months).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to