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]

Reply via email to