You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Branimir Lambov (JIRA)" <ji...@apache.org> on 2016/03/22 15:43:25 UTC

[jira] [Updated] (CASSANDRA-5863) In process (uncompressed) page cache

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

Branimir Lambov updated CASSANDRA-5863:
---------------------------------------
    Status: Patch Available  (was: In Progress)

Marking patch ready for review, as I believe it is worth adding to the codebase in its current form while I continue working on replacing and improving the actual cache implementation.

The main changes the patch does are to extract rebuffering from {{\[Compressed\]RandomAccessReader}} into a separate interface {{Rebufferer}}, and provide different rebuffering implementations that build upon each other to provide functionality.

The simplest one is {{SimpleReadRebufferer}} which just reads from a channel, and does not own a buffer. When cache is not enabled, a {{BufferManagingRebufferer}} is used to provide it with a buffer only used by the specific {{RandomAccessReader}}. If cache is enabled, it is used in combination with a shared {{ReaderCache.CachingRebufferer}} which operates cached buffers and gives them as required to (multiple) readers, without any data copying. If rate limitation is required, a {{LimitingRebufferer}} wrapper (specific to the reader) is applied.

In the case of compressed data, the {{SimpleReadRebufferer}} is replaced by {{CompressedRandomAccessReader.StandardRebufferer}} or {{CompressedRandomAccessReader.MmapRebufferer}}; the stack on top of it stays the same.

Separately, uncompressed memory-mapped access is implemented in one step by {{MmapRebufferer}} which can directly provide the mapped buffers (+ a {{LimitingRebufferer}} if required).

Most of the rebufferer stack is thread-safe and is placed in {{SegmentedFile}} to be shared among readers.

The patch also changes {{ChecksummedDataInput}} and the other hinting-related readers to be based on {{RebufferingInputStream}} instead of {{RandomAccessReader}} as they don't need random access (or caching).


> In process (uncompressed) page cache
> ------------------------------------
>
>                 Key: CASSANDRA-5863
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5863
>             Project: Cassandra
>          Issue Type: Sub-task
>            Reporter: T Jake Luciani
>            Assignee: Branimir Lambov
>              Labels: performance
>             Fix For: 3.x
>
>
> Currently, for every read, the CRAR reads each compressed chunk into a byte[], sends it to ICompressor, gets back another byte[] and verifies a checksum.  
> This process is where the majority of time is spent in a read request.  
> Before compression, we would have zero-copy of data and could respond directly from the page-cache.
> It would be useful to have some kind of Chunk cache that could speed up this process for hot data, possibly off heap.



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