Details
-
Improvement
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
Description
While profiling a simple stress write run (cassandra-stress write n=2000000 -rate threads=50 to be precise) with Mission Control, I noticed that a non trivial amount of heap pressure was due to the ByteBuffer.wrap() call in SequentialWriter.write(byte[]). Basically, when writing a byte array, we wrap it in a ByteBuffer to reuse the SequentialWriter.write(ByteBuffer) method. One could have hoped this wrapping would be stack allocated, but if Mission Control isn't lying (and I was told it's fairly honest on that front), it's not. And we do use that write(byte[]) method quite a bit, especially with the new vint encodings since they use a byte[] thread local buffer and call that method.
Anyway, it sounds very simple to me to have a more direct write(byte[]) method, so attaching a patch to do that. A very quick local benchmark seems to show a little bit less allocation and a slight edge for the branch with this patch (on top of CASSANDRA-9705 I must add), but that local bench was far from scientific so happy if someone that knows how to use our perf service want to give that patch a shot.