[
https://issues.apache.org/jira/browse/CASSANDRA-21535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitry Konstantinov updated CASSANDRA-21535:
--------------------------------------------
Fix Version/s: 6.x
7.x
> Avoid extra copy for cached Mutation serialization
> --------------------------------------------------
>
> Key: CASSANDRA-21535
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21535
> Project: Apache Cassandra
> Issue Type: Improvement
> Components: Local/Other
> Reporter: koo
> Assignee: koo
> Priority: Normal
> Fix For: 6.x, 7.x
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Description
> In Mutation.Serializer.serialization(), we first calculate the serialized
> size.
> After that, current code serializes the mutation to a thread local
> DataOutputBuffer.
> Then unsafeToByteArray() creates a new byte array and copies all serialized
> bytes.
> The serialized size is already known.
> So we can create a fixed size heap buffer first and serialize directly to
> that buffer.
> This change removes one full byte array copy when we create a cached mutation
> serialization.
> I also added a check that the written size is same as the calculated
> serialized size.
> Benchmark
> I added a JMH benchmark for this case.
> For every benchmark operation:
> - clear cached serialization
> - serialize the Mutation
> - create cached serialization again
> JDK 17, arm64, 1 thread:
> | Value size | Before | After | Result |
> |---:|---:|---:|---:|
> | 128 B | 3.70 M ops/s | 3.87 M ops/s | +4% |
> | 16 KiB | 608 K ops/s | 716 K ops/s | +18% |
> | 256 KiB | 41.4 K ops/s | 53.1 K ops/s | +28% |
> | 768 KiB | 6.83 K ops/s | 18.88 K ops/s | +177% |
>
> The result is bigger for large mutations because current code writes the data
> to a
> direct buffer first, and then copies all data again to a heap byte array.
> With this change, serialization writes directly to the final heap byte array.
> This benchmark measures cache creation cost. It does not mean normal write
> throughput will be 2.77x faster, because normal requests can reuse the cached
> serialization.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]