You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "koo (Jira)" <ji...@apache.org> on 2026/07/27 05:36:00 UTC

[jira] [Created] (CASSANDRA-21536) Profile pollution in AbstractType.writeValue makes serialization slow for all column types

koo created CASSANDRA-21536:
-------------------------------

             Summary: Profile pollution in AbstractType.writeValue makes serialization slow for all column types
                 Key: CASSANDRA-21536
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21536
             Project: Apache Cassandra
          Issue Type: Improvement
            Reporter: koo


*Description:* 

AbstractType.writeValue() is one shared method. All column types use it.

Inside writeValue(), it calls valueLengthIfFixed(). This is a virtual call. Many types override this method (Int32Type, LongType, UTF8Type, ...).

In a real cluster, many column types pass through writeValue(). So the profile always sees lots types. 

Because of this, the JIT cannot inline the call. It stays as a vtable call. Also, the compiled body of writeValue() becomes big, so the JIT refuses to inline writeValue() itself ("already compiled into a big method").

We also see the same itable/vtable stubs in async-profiler output from a real cluster, running with default production options and a normal workload.


*How to solve:*

Add a final int field to AbstractType. Set it in the constructor. writeValue() reads this field instead of calling valueLengthIfFixed().

A field read needs no type profile. So profile pollution has no effect on it. The valueLengthIfFixed() method is not changed. Only the write path uses the field.



*Result:*

Production is always the polluted state, so this is the real-world comparison 

|| || before || after ||
| M ops/s | 185.0 | 210.4 |
| improvement | | +13.7% |
| valueLengthIfFixed frames in profiler | 5.9% | 0% |



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org