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)