cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefania (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-8630) Faster sequential IO (on compaction, streaming, etc)
Date Thu, 20 Aug 2015 09:06:48 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-8630?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14704551#comment-14704551
] 

Stefania commented on CASSANDRA-8630:
-------------------------------------

I've rebased to 3.0 and renamed the branch to [8630-3.0|https://github.com/stef1927/cassandra/tree/8630-3.0].


I had conflicts with CASSANDRA-6230, since it introduced {{ChecksummedDataInput}}, a new specialization
of {{AbstractDataInput}}. I integrated it somehow but I feel there is some duplication between
this class and {{ChecksummedRandomAccessReader}}. However the two aren't identical either,
so for now they are separate.

I made good progress with moving the segments to the builders and replacing the map with an
array but this is still not complete. If you want to take a quick look the class doing the
bulk of the work is called [MmappedRegions|https://github.com/stef1927/cassandra/commit/d1418ab889f60812cc866f12bf94b2360b3bb2d3#diff-88342f36d0687d3a0559fede5d158d83R33].
Your feedback is welcome but it is far from complete, specifically I still need to make it
into a ref counted object, since the builders don't necessarily survive the files, and address
thread safety issues. Also, I merely extend segments at the moment, I make no effort to compact
them. I did not go for the two arrays approach since the code is more readable with a single
array of a well defined class but if you really think this makes a big difference I can change
it.

The second batch of code review comments is also still WIP. I will post more details once
it is complete.

> Faster sequential IO (on compaction, streaming, etc)
> ----------------------------------------------------
>
>                 Key: CASSANDRA-8630
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8630
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core, Tools
>            Reporter: Oleg Anastasyev
>            Assignee: Stefania
>              Labels: compaction, performance
>             Fix For: 3.x
>
>         Attachments: 8630-FasterSequencialReadsAndWrites.txt, cpu_load.png, flight_recorder_001_files.tar.gz,
flight_recorder_002_files.tar.gz, mmaped_uncomp_hotspot.png
>
>
> 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 were on my profiler's hotspot method list 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