[
https://issues.apache.org/jira/browse/CASSANDRA-20212?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitry Konstantinov updated CASSANDRA-20212:
--------------------------------------------
Description:
If we enable offheap_objects allocation mode we have 3 implementations of Cells
used at the same time:
* NativeCell
* BufferCell
* ArrayCell (CASSANDRA-15393)
When all of them are invoked from the same callsite JIT compiler cannot
optimize such calls properly and we have megamorphic virtual calls with
correspondent overheads and lack of inlining.
The basic way to solve this issue is to reduce the number of Cell
implementations are actively used and invoked from the same callsites.
CASSANDRA-20166 replaces BufferCell with ArrayCell for Mutations created from
ModificationStatement.
Other places to consider:
* SimpleBuilders logic
!image-2025-01-15-21-31-21-426.png|width=300!
* EnsureOnHeap / HeapCloner used to clone data during reads
for them probably we can also move to ArrayCell usage too.
Related links:
*
[http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/]
*
[https://mechanical-sympathy.blogspot.com/2012/04/invoke-interface-optimisations.html]
* [https://shipilev.net/blog/2015/black-magic-method-dispatch/]
* [https://shipilev.net/jvm/anatomy-quarks/16-megamorphic-virtual-calls/]
was:
If we enable offheap_objects allocation mode we have 3 implementations of Cells
used at the same time:
* NativeCell
* BufferCell
* ArrayCell (CASSANDRA-15393)
When all of them are invoked from the same callsite JIT compiler cannot
optimize such calls properly and we have megamorphic virtual calls with
correspondent overheads and lack of inlining.
The basic way to solve this issue is to reduce the number of Cell
implementations are actively used and invoked from the same callsites.
CASSANDRA-20166 replaces BufferCell with ArrayCell for Mutations created from
ModificationStatement.
Other places to consider:
* SimpleBuilders logic
!image-2025-01-15-21-31-21-426.png|width=300!
* EnsureOnHeap / HeapCloner used to clone data during reads
for them probably we can also move to ArrayCell usage.
Related links:
*
[http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/]
*
[https://mechanical-sympathy.blogspot.com/2012/04/invoke-interface-optimisations.html]
* [https://shipilev.net/blog/2015/black-magic-method-dispatch/]
* [https://shipilev.net/jvm/anatomy-quarks/16-megamorphic-virtual-calls/]
> Avoid megamorpthic calls for NativeCell
> ---------------------------------------
>
> Key: CASSANDRA-20212
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20212
> Project: Apache Cassandra
> Issue Type: Improvement
> Components: Local/Memtable
> Reporter: Dmitry Konstantinov
> Assignee: Dmitry Konstantinov
> Priority: Normal
> Fix For: 5.0.x
>
> Attachments: image-2025-01-15-21-31-21-426.png
>
>
> If we enable offheap_objects allocation mode we have 3 implementations of
> Cells used at the same time:
> * NativeCell
> * BufferCell
> * ArrayCell (CASSANDRA-15393)
> When all of them are invoked from the same callsite JIT compiler cannot
> optimize such calls properly and we have megamorphic virtual calls with
> correspondent overheads and lack of inlining.
> The basic way to solve this issue is to reduce the number of Cell
> implementations are actively used and invoked from the same callsites.
> CASSANDRA-20166 replaces BufferCell with ArrayCell for Mutations created from
> ModificationStatement.
> Other places to consider:
> * SimpleBuilders logic
> !image-2025-01-15-21-31-21-426.png|width=300!
> * EnsureOnHeap / HeapCloner used to clone data during reads
> for them probably we can also move to ArrayCell usage too.
>
> Related links:
> *
> [http://insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/]
>
> *
> [https://mechanical-sympathy.blogspot.com/2012/04/invoke-interface-optimisations.html]
>
> * [https://shipilev.net/blog/2015/black-magic-method-dispatch/]
> * [https://shipilev.net/jvm/anatomy-quarks/16-megamorphic-virtual-calls/]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]