[ 
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-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to