Dmitry Konstantinov created CASSANDRA-20226:
-----------------------------------------------
Summary: Reduce contention in NativeAllocator.allocate
Key: CASSANDRA-20226
URL: https://issues.apache.org/jira/browse/CASSANDRA-20226
Project: Apache Cassandra
Issue Type: Improvement
Components: Local/Memtable
Reporter: Dmitry Konstantinov
Assignee: Dmitry Konstantinov
Attachments: cpu_profile_batch.html,
image-2025-01-20-23-38-58-896.png, profile.yaml
For a high insert batch rate it looks like we have a bottleneck in
NativeAllocator.allocate probably caused by contention within the logic.
!image-2025-01-20-23-38-58-896.png|width=300!
[^cpu_profile_batch.html]
The logic has at least the following 2 potential places to assess:
# allocation cycle in MemtablePool.SubPool#tryAllocate. This logic has a while
loop with a CAS, which can be non-efficient under a high contention, similar to
CASSANDRA-15922 we can try to replace it with addAndGet (need to check if it
does not break the allocator logic)
# swap region logic in NativeAllocator.trySwapRegion (under a high insert rate
1MiB regions can be swapped quite frequently)
Reproducing test details:
* test logic
{code:java}
./tools/bin/cassandra-stress "user profile=./profile.yaml no-warmup
ops(insert=1) n=10m" -rate threads=100 -node somenode
{code}
* Cassandra version: 5.0.3
* configuration changes compared to default:
{code:java}
memtable_allocation_type: offheap_objects
memtable:
configurations:
skiplist:
class_name: SkipListMemtable
trie:
class_name: TrieMemtable
parameters:
shards: 32
default:
inherits: trie
{code}
* 1 node cluster
* OpenJDK jdk-17.0.12+7
* Linux kernel: 4.18.0-240.el8.x86_64
* CPU: 16 cores, Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
* RAM: 46GiB
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]