Sylvain Lebresne created CASSANDRA-9797:
-------------------------------------------

             Summary: Don't wrap byte arrays in SequentialWriter
                 Key: CASSANDRA-9797
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9797
             Project: Cassandra
          Issue Type: Improvement
            Reporter: Sylvain Lebresne
            Assignee: Sylvain Lebresne
            Priority: Minor
             Fix For: 3.x


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.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to