cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Anastasyev (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CASSANDRA-8630) Faster sequencial IO (on compaction, streaming, etc)
Date Thu, 15 Jan 2015 18:45:37 GMT
Oleg Anastasyev created CASSANDRA-8630:
------------------------------------------

             Summary: Faster sequencial IO (on compaction, streaming, etc)
                 Key: CASSANDRA-8630
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8630
             Project: Cassandra
          Issue Type: Improvement
          Components: Core
            Reporter: Oleg Anastasyev


When node is doing a lot of sequencial IO (streaming, compacting, etc) a lot of CPU is lost
in calls to RAF's int read() and DataOutputStream's write(int).
This is because default implementations of readShort,readLong, etc as well as their matching
write* are implemented with numerous calls of byte by byte read and write. 
This makes a lot of syscalls as well.

A quick microbench shows than just reimplementation of these methods in either way gives 8x
speed increase.

A patch attached implements RandomAccessReader.read<Type> and SequencialWriter.write<Type>
methods in more efficient way.
I also eliminated some extra byte copies in CompositeType.split and ColumnNameHelper.maxComponents,
which was on my profiler's hotspots during tests.

A stress tests on my laptop show that this patch makes compaction 25-30% faster  on uncompressed
sstables and 15% faster for compressed ones.

A deployment to production shows much less CPU load for compaction. 
(I attached a cpu load graph from one of our production, orange is niced CPU load - i.e. compaction;
yellow is user - i.e. not compaction related tasks)





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message