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)