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

Enis Soztutar commented on HBASE-14490:
---------------------------------------

bq. We can not put back the buffer to pool here. The req is just given to 
handlers for processing. With CellScanners in place, we are not sure whether 
all Cells are read out of it yet. We can release only at completeion of the 
Call. This was initially proposed for read reqs and now for all read and write.
Yes, I had a partial hacked-up patch as well. It carries the buffer in Call 
object, and releases at Call.done(), and also uses a fixed version of Hadoop's 
BoundedBBPool to give a buffer equal or bigger than the requested size. There 
is some sync overhead unfortunately. 

bq. (Also, what @enis found where PB CIS is allocating up the wazoo on top of 
our nice BB from a pool... probably obscures the benefit too).
Yeah, my test was with PE, and only gets so the IPC buffers were mostly <200 
bytes, while everytime CIS allocates 4KB defeating the whole purpose. Once we 
or Google guys do zero-copy CIS, I think we cannot get the full benefits. 

> [RpcServer] reuse request read buffer
> -------------------------------------
>
>                 Key: HBASE-14490
>                 URL: https://issues.apache.org/jira/browse/HBASE-14490
>             Project: HBase
>          Issue Type: Improvement
>          Components: IPC/RPC
>    Affects Versions: 2.0.0, 1.0.2
>            Reporter: Zephyr Guo
>            Assignee: Zephyr Guo
>              Labels: performance
>             Fix For: 2.0.0, 1.0.2
>
>         Attachments: 14490.hack.to.1.2.patch, ByteBufferPool.java, 
> HBASE-14490-v1.patch, HBASE-14490-v10.patch, HBASE-14490-v11.patch, 
> HBASE-14490-v12.patch, HBASE-14490-v2.patch, HBASE-14490-v3.patch, 
> HBASE-14490-v4.patch, HBASE-14490-v5.patch, HBASE-14490-v6.patch, 
> HBASE-14490-v7.patch, HBASE-14490-v8.patch, HBASE-14490-v9.patch, gc.png, 
> hits.png, test-v12-patch
>
>
> Reusing buffer to read request.It's not necessary to every request free 
> buffer.The idea of optimization is to reduce the times that allocate 
> ByteBuffer.
> *Modification*
> 1. {{saslReadAndProcess}} ,{{processOneRpc}}, {{processUnwrappedData}}, 
> {{processConnectionHeader}} accept a ByteBuffer instead of byte[].They can 
> move {{ByteBuffer.position}} correctly when we have read the data.
> 2. {{processUnwrappedData}} no longer use any extra memory.
> 3. Maintaining a buffer pool in each {{Connection}}.



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

Reply via email to