cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ariel Weisberg (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (CASSANDRA-8630) Faster sequential IO (on compaction, streaming, etc)
Date Mon, 17 Aug 2015 23:44:47 GMT

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

Ariel Weisberg edited comment on CASSANDRA-8630 at 8/17/15 11:43 PM:
---------------------------------------------------------------------

The difference in performance seems too be big to be explained by what is covered here. Maybe
a native call like compression/decompression got slower due to additional copying? Flight
recorder happily ignores native code.

Flight recording of 8630 with compression, hot packages
||Package|Sample Count|Percentage(%)||
|org.apache.cassandra.db.rows|1,577|25.403|
|org.apache.cassandra.utils|1,498|24.13|
|org.apache.cassandra.utils.btree|670|10.793|
|com.googlecode.concurrentlinkedhashmap|598|9.633|
|java.util|585|9.423|
|org.apache.cassandra.io.sstable|430|6.927|
|org.apache.cassandra.db.partitions|183|2.948|
|org.apache.cassandra.cache|162|2.61|
|org.apache.cassandra.io.util|139|2.239|
|org.apache.cassandra.db.rows.UnfilteredRowIterators$UnfilteredRowMergeIterator$$Lambda$93|77|1.24|
|org.apache.cassandra.db|74|1.192|

Flight recording trunk, hot packages
||Package|Sample Count|Percentage(%)||
|org.apache.cassandra.utils|1,771|26.732|
|org.apache.cassandra.db.rows|1,599|24.136|
|com.googlecode.concurrentlinkedhashmap|631|9.525|
|java.util|590|8.906|
|org.apache.cassandra.utils.btree|565|8.528|
|org.apache.cassandra.io.sstable|438|6.611|
|org.apache.cassandra.io.util|330|4.981|
|org.apache.cassandra.db.partitions|124|1.872|
|org.apache.cassandra.cache|121|1.826|
|org.apache.cassandra.io.sstable.format.big|105|1.585|
|org.apache.cassandra.db|102|1.54|


was (Author: aweisberg):
Flight recording of 8630 with compression, hot packages
||Package|Sample Count|Percentage(%)||
|org.apache.cassandra.db.rows|1,577|25.403|
|org.apache.cassandra.utils|1,498|24.13|
|org.apache.cassandra.utils.btree|670|10.793|
|com.googlecode.concurrentlinkedhashmap|598|9.633|
|java.util|585|9.423|
|org.apache.cassandra.io.sstable|430|6.927|
|org.apache.cassandra.db.partitions|183|2.948|
|org.apache.cassandra.cache|162|2.61|
|org.apache.cassandra.io.util|139|2.239|
|org.apache.cassandra.db.rows.UnfilteredRowIterators$UnfilteredRowMergeIterator$$Lambda$93|77|1.24|
|org.apache.cassandra.db|74|1.192|

Flight recording trunk, hot packages
||Package|Sample Count|Percentage(%)||
|org.apache.cassandra.utils|1,771|26.732|
|org.apache.cassandra.db.rows|1,599|24.136|
|com.googlecode.concurrentlinkedhashmap|631|9.525|
|java.util|590|8.906|
|org.apache.cassandra.utils.btree|565|8.528|
|org.apache.cassandra.io.sstable|438|6.611|
|org.apache.cassandra.io.util|330|4.981|
|org.apache.cassandra.db.partitions|124|1.872|
|org.apache.cassandra.cache|121|1.826|
|org.apache.cassandra.io.sstable.format.big|105|1.585|
|org.apache.cassandra.db|102|1.54|

> 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
>
>
> 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