[ 
https://issues.apache.org/jira/browse/HBASE-9535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nicolas Liochon updated HBASE-9535:
-----------------------------------

    Attachment: 9535.v1.patch

work in progress. This passes the TestHCM.

One of the difficult point is that we need to have a pool for the ByteBuffer, 
but it's difficult to know when we can give back the buffer to the pool. If we 
give it back at the end of the readAndProcess, the rpc doesn't workanymore, so 
someone must depend on it somewhere. That's not bad in theory, because if we 
keep the request until the end we could save some array copy (protobuf does 
copy all the time today, so we would need to bypass it in a way or another)

 

> Try a pool of direct byte buffers handling incoming ipc requests
> ----------------------------------------------------------------
>
>                 Key: HBASE-9535
>                 URL: https://issues.apache.org/jira/browse/HBASE-9535
>             Project: HBase
>          Issue Type: Brainstorming
>            Reporter: stack
>            Assignee: stack
>         Attachments: 9535.v1.patch
>
>
> ipc takes in a query by allocating a ByteBuffer of the size of the request 
> and then reading off the socket into this on-heap BB.
> Experiment with keeping a pool of BBs so we have some buffer reuse to cut on 
> garbage generated.  Could checkout from pool in RpcServer#Reader.  Could 
> check back into the pool when Handler is done just before it queues the 
> response on the Responder's queue.  We should be good since, at least for 
> now, kvs get copied up into MSLAB (not references) when data gets stuffed 
> into MemStore; this should make it so no references left over when we check 
> the BB back into the pool for use next time around.
> If on-heap BBs work, we could then try direct BBs (Allocation of DBBs takes 
> time so if already allocated, should be good.  GC of DBBs is a pain but if in 
> a pool, we shouldn't be wanting this to happen).  The copy from socket to the 
> DBB will be off-heap (should be fast).
> Could start w/ the HDFS DirectBufferPool.  It is unbounded and keeps items by 
> size (we might want to bypass the pool if an object is > size N).
> DBBs for this task would contend w/ offheap BBs used in BlockReadLocal when 
> short-circuit reading.  It'd be a bummer if we had to allocate big objects 
> on-heap.  Would still be an improvement.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to