Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-9797

Don't wrap byte arrays in SequentialWriter

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Low
    • Resolution: Fixed
    • 2.2.0, 3.0 alpha 1
    • 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.

      Attachments

        1. 9797.txt
          2 kB
          Sylvain Lebresne

        Activity

          People

            slebresne Sylvain Lebresne
            slebresne Sylvain Lebresne
            Sylvain Lebresne
            Robert Stupp
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: