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

Zee Chen commented on HBASE-13259:
----------------------------------

[~Apache9] 

The current ByteBufferArray class encapsulates the concept of large offheap 
memory buffers pretty well, all the memory is obtained from mmap() calls. The 
only difference is whether the maps is anonymous or associated to a named file. 
It is not necessary to create 2 separate ByteBufferArray classes.

When the working set doesn't fit in RAM, paging will take place, even for 
offheap BucketCache option. Again the difference here is between paging to 
system swap space and paging to a named local file (except the case where the 
file is created on a tmpfs like /dev/shm). Paging happens regardless if 
pread/pwrite(FileIOEngine) is used or if mmap (FileMmapEngine) is used. This is 
because jvm doesn't support direct io.


> mmap() based BucketCache IOEngine
> ---------------------------------
>
>                 Key: HBASE-13259
>                 URL: https://issues.apache.org/jira/browse/HBASE-13259
>             Project: HBase
>          Issue Type: New Feature
>          Components: BlockCache
>    Affects Versions: 0.98.10
>            Reporter: Zee Chen
>             Fix For: 2.2.0
>
>         Attachments: HBASE-13259-v2.patch, HBASE-13259.patch, ioread-1.svg, 
> mmap-0.98-v1.patch, mmap-1.svg, mmap-trunk-v1.patch
>
>
> Of the existing BucketCache IOEngines, FileIOEngine uses pread() to copy data 
> from kernel space to user space. This is a good choice when the total working 
> set size is much bigger than the available RAM and the latency is dominated 
> by IO access. However, when the entire working set is small enough to fit in 
> the RAM, using mmap() (and subsequent memcpy()) to move data from kernel 
> space to user space is faster. I have run some short keyval gets tests and 
> the results indicate a reduction of 2%-7% of kernel CPU on my system, 
> depending on the load. On the gets, the latency histograms from mmap() are 
> identical to those from pread(), but peak throughput is close to 40% higher.
> This patch modifies ByteByfferArray to allow it to specify a backing file.
> Example for using this feature: set  hbase.bucketcache.ioengine to 
> mmap:/dev/shm/bucketcache.0 in hbase-site.xml.
> Attached perf measured CPU usage breakdown in flames graph.



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

Reply via email to