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]