[
https://issues.apache.org/jira/browse/CASSANDRA-15215?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17436524#comment-17436524
]
Benedict Elliott Smith commented on CASSANDRA-15215:
----------------------------------------------------
Hi [~Gerrrr],
Thanks for picking this up, but what you've proposed in the patch isn't quite
what I had in mind. The premise is to introduce a new method to
{{DataOutputPlus}} that is able to write up to 8 bytes from a long, so it would
be something like {{putBytes(long register, int bytes)}} where {{bytes<=8}}. If
there are more than 8 bytes left in the underlying storage then
{{putLong(offset, register)}} is invoked, but the byte counter is incremented
only by {{bytes}}.
This same approach can of course be performed directly to a {{ByteBuffer}}
also, and symmetrically for {{readBytes(bytes)}} with {{DataInputPlus}}.
This way the vint can be assembled and inserted using simple register
instructions while there is >= 8 bytes in the underlying storage buffer, i.e.
the majority of instances. Otherwise we could fall back to this suggested
approach or any other.
> VIntCoding should read and write more efficiently
> -------------------------------------------------
>
> Key: CASSANDRA-15215
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15215
> Project: Cassandra
> Issue Type: Bug
> Components: Local/Compaction, Local/SSTable
> Reporter: Benedict Elliott Smith
> Assignee: Aleksandr Sorokoumov
> Priority: Normal
> Fix For: 3.0.x, 3.11.x, 4.x
>
>
> Most vints occupy significantly fewer than 8 bytes, and most buffers have >=
> 8 bytes spare, in which case we can construct the relevant bytes in a
> register and memcpy them to the correct position. Since we read and write a
> lot of vints, this waste is probably measurable, particularly during
> compaction and flush, and can probably be considered a performance bug.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]