[ 
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]

Reply via email to