koo created CASSANDRA-21535:
-------------------------------

             Summary: 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
            Reporter: koo


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]

Reply via email to