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

Robert Stupp commented on CASSANDRA-9738:
-----------------------------------------

I’d like to propose this patch to be included in 3.0. I hope the cstar tests 
are sufficient but otherwise I can deliver more with different workloads.

h2. cstar tests

All cstar tests mentioned below perform three operations: write-only, mixed and 
read-only.
Unfortunately, cassandra-stress seems to reduce the really possible write 
throughput for workloads with clustering keys.

All tests on this patch show reduced GC pressure (for reads, of course).
By that it gives G1 more headroom to operate and and often gains about 10-15% 
read perf improvement depending on the hardware (in this case bdplab vs. 
blade_11_b) - bdplab (spinning disks, less RAM) shows a bigger improvement.

h3. one big clustering key

user, native, cql3, user 
[profile|https://gist.github.com/snazy/b6c160c65001eb074784]

[blade_11_b|http://cstar.datastax.com/tests/id/7f7265a2-3aee-11e5-b022-42010af0688f]
[bdplab|http://cstar.datastax.com/tests/id/af344e3e-3af0-11e5-b379-42010af0688f]

h3. big clustering over two clustering columns

user, native, cql3, user 
[profile|https://gist.github.com/snazy/351156424929d868baf3]

[blade_11_b|http://cstar.datastax.com/tests/id/e919725a-3b68-11e5-b590-42010af0688f]
[bdplab|http://cstar.datastax.com/tests/id/36f1d0ee-3b8c-11e5-9c9e-42010af0688f]

h3. big clustering over two clustering columns, reduced threads for pure-write 
and mixed operations

user, native, cql3, user 
[profile|https://gist.github.com/snazy/e4579499f61911802fcd]

[blade_11_b|http://cstar.datastax.com/tests/id/36f1d0ee-3b8c-11e5-9c9e-42010af0688f]
[bdplab|http://cstar.datastax.com/tests/id/07754e44-3b8d-11e5-9c9e-42010af0688f]

h3. stress _write_, _mixed_, _read_

[blade_11_b|http://cstar.datastax.com/tests/id/def04c20-3b8d-11e5-9c9e-42010af0688f]
[bdplab|http://cstar.datastax.com/tests/id/f3f5c172-3b8d-11e5-9c9e-42010af0688f]

h2. Git branch + cassci

[git branch|https://github.com/snazy/cassandra/tree/9738-key-cache-ohc]
[unit 
tests|http://cassci.datastax.com/view/Dev/view/snazy/job/snazy-9738-key-cache-ohc-testall/]
[dtests|http://cassci.datastax.com/view/Dev/view/snazy/job/snazy-9738-key-cache-ohc-dtest/]

I didn’t see any failed tests related to this patch.

There is another branch on github as well which contains [optimizations not 
purely related to 
key-cache|https://github.com/snazy/cassandra/tree/9738-key-cache-ref]. 
{{9738-key-cache-ohc}} is based on that branch and contains:
* “singletons” for key-cache {{o.a.c.db.SerializationHeader}} instances 
(dynamically extended, if required)
* “singletons” for {{IndexInfo.Serializer}} in {{o.a.c.db.Serializers}} 
(dynamically extended, if required)
* “singletons” for {{BigVersion}} instances for {{ma}}, {{la}}, {{ka}}, {{jb}} 
- other versions get temporary objects (some tests use older sstable versions)

h2. Further optimisations

There are some things that can be optimised in the future:
* Currently we need to serialise keyspace and cf names _and_ cfId. This is 
necessary since cfID of secondary indexes is inherited from the base table. If 
all tables and all secondary indexes have unique IDs, we can omit KS and CF 
name serialisation (and it’s weird {{cfName.contains(‘.’)}} 2i detection). Can 
be built with or after 2i API redesign.
* The full directory path is serialised. This appears to be less expensive than 
iterating of the whole {{List}} of sstables and identifying an sstable by its 
generation.
* As [~benedict] suggested, we can switch to very tiny key-cache entries and 
also omit serialisation of {{IndexInfo}}.


> Migrate key-cache to be fully off-heap
> --------------------------------------
>
>                 Key: CASSANDRA-9738
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9738
>             Project: Cassandra
>          Issue Type: Sub-task
>            Reporter: Robert Stupp
>            Assignee: Robert Stupp
>             Fix For: 3.0.0 rc1
>
>
> Key cache still uses a concurrent map on-heap. This could go to off-heap and 
> feels doable now after CASSANDRA-8099.
> Evaluation should be done in advance based on a POC to prove that pure 
> off-heap counter cache buys a performance and/or gc-pressure improvement.
> In theory, elimination of on-heap management of the map should buy us some 
> benefit.



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

Reply via email to