Oleg Kibirev created CASSANDRA-4681:
---------------------------------------

             Summary: SlabAllocator spends a lot of time in Thread.yield
                 Key: CASSANDRA-4681
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4681
             Project: Cassandra
          Issue Type: Bug
          Components: Core
    Affects Versions: 1.1.5
         Environment: OEL Linux
            Reporter: Oleg Kibirev


When profiling high volume inserts into Cassandra running on a host with fast 
SSD and CPU, Thread.yield() invoked by SlabAllocator appeared as the top item 
in CPU samples. The fix is to return a regular byte buffer if current slab is 
being initialized by another thread. So instead of:


               if (oldOffset == UNINITIALIZED)
                {
                    // The region doesn't have its data allocated yet.
                    // Since we found this in currentRegion, we know that 
whoever
                    // CAS-ed it there is allocating it right now. So spin-loop
                    // shouldn't spin long!
                    Thread.yield();
                    continue;
                }

do:

if (oldOffset == UNINITIALIZED)
    return ByteBuffer.allocate(size);

I achieved 4x speed up in my (admittedly specialized) benchmark. 


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to