You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "David Capwell (Jira)" <ji...@apache.org> on 2023/02/09 00:07:00 UTC
[jira] [Comment Edited] (CASSANDRA-18212) Reduce memory allocations of calls to ByteBufer.duplicate() made in org.apache.cassandra.transport.CBUtil#writeValue
[ https://issues.apache.org/jira/browse/CASSANDRA-18212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17686130#comment-17686130 ]
David Capwell edited comment on CASSANDRA-18212 at 2/9/23 12:06 AM:
--------------------------------------------------------------------
bq. I thought we had discussed either using the byte[] or casting to BufferPoolAllocator.Wrapped on slack?
That is what the patch does. If the BB is a heap based one, then we use the array (due to a CMS bug, Nate will update the code explaining that issue), if the BB is direct, then it uses the same "duplicate" logic used in other logic and calls MemoryUtil.duplicateDirectByteBuffer... If a new type of BB is added (not heap and not direct) then we fall back to duplicate.
{code}
if (src.hasArray())
{
byte[] array = src.array();
dest.writeBytes(array, src.arrayOffset() + src.position(), length);
}
else if (src.isDirect())
{
ByteBuffer local = getLocalDirectBuffer();
MemoryUtil.duplicateDirectByteBuffer(src, local);
dest.writeBytes(local);
}
else
{
dest.writeBytes(src.duplicate());
}
{code}
was (Author: dcapwell):
bq. I thought we had discussed either using the byte[] or casting to BufferPoolAllocator.Wrapped on slack?
That is what the patch does. If the BB is a heap based one, then we use the array (due to a CMS bug, Nate will update the code explaining that issue), if the BB is direct, then it uses the same "duplicate" logic used in other logic and calls MemoryUtil.duplicateDirectByteBuffer... If a new type of BB is added (not heap and not direct) then we fall back to duplicate.
> Reduce memory allocations of calls to ByteBufer.duplicate() made in org.apache.cassandra.transport.CBUtil#writeValue
> --------------------------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-18212
> URL: https://issues.apache.org/jira/browse/CASSANDRA-18212
> Project: Cassandra
> Issue Type: Improvement
> Components: Legacy/Local Write-Read Paths
> Reporter: Natnael Adere
> Assignee: Natnael Adere
> Priority: Normal
> Attachments: DiskBased.png, MemoryBased.png, allocations-after.html, allocations-before.html
>
> Time Spent: 1h 40m
> Remaining Estimate: 0h
>
> Currently, org.apache.cassandra.transport.CBUtil#writeValue(java.nio.ByteBuffer, io.netty.buffer.ByteBuf) calls ByteBufer.duplicate() and is found to be 20% of memory allocations in production. No changes have been made to reduce this but there is discussion related to the issue in CASSANDRA-13741. Attached below are the performance result for disk based queries and mostly memory based queries.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org