[
https://issues.apache.org/jira/browse/HBASE-14490?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15144219#comment-15144219
]
Hiroshi Ikeda commented on HBASE-14490:
---------------------------------------
{quote}
but I was rejected in some other JIRA issue if I remember right.
Where Hiroshi Ikeda We want to save on the offheap copy to oneheap from socket
for sure.
{quote}
What I said above is for writing (HBASE-14873). BoundedByteBuffer is just used
for writing data to a socket, as far as I know, and GatheringByteChannel can
accept multiple byte buffers so that discarding and re-creating direct buffers,
which might cause fragmentation of the off-heap area, is not necessary.
As to reading, in general, data for an operation has a various length, which
might be quite smaller or larger than NIO_BUFFER_LIMIT, and it doesn't seem
effective to hold a given direct buffer to prepare and execute its operation.
Besides the issue of copying, using another pool for large heap buffers might
be useful to reduce GC frequency, as described long ago.
> [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)