Dmitry Konstantinov created CASSANDRA-20212:
-----------------------------------------------

             Summary: Avoid megamorpthic calls for NativeCell
                 Key: CASSANDRA-20212
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20212
             Project: Apache Cassandra
          Issue Type: Improvement
            Reporter: Dmitry Konstantinov
            Assignee: Dmitry Konstantinov
         Attachments: image-2025-01-15-21-31-21-426.png

If we use 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 
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/]



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