[ https://issues.apache.org/jira/browse/CASSANDRA-10407?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14943083#comment-14943083 ]
Stefania commented on CASSANDRA-10407: -------------------------------------- Thank you for the tests [~aboudreault]. It seems that when the patch was committed the performance of std was really bad (44-45k ops/second) compared to mmap (66-68k ops/second) and neither the patch nor readahead had any impact. However, this has changed quite radically with 3.0 rc1 (52k vs 57-59k). It's difficult to know why without bisecting but I think we should forget what the code was like back then and focus on the current 3.0 head and aim to have std without readahead as good as or better than mmap with readahead. We should also bring mmap back to 66-68k ops/second. I did some profiling by running mmap vs std locally and I've attached a couple of _.nps_ files that can be opened with [visual vm|http://visualvm.java.net/download.html]. I've also attached some screenshots. Here are some things that I've noticed: * In RAR.overrideLength() the call to channel.size() is expensive, we should cache the size in the channel or avoid calling this (it is just to throw an IllegalArgumentException) * Most of the time we spend in {{reBuffer}} follows a call from {{SSTableReader.getFileDataInput()}}, which is called when initializing iterators. Here a new reader is created so we cannot avoid rebuffering, also we spend a lot of time in dealing with checksums, more than we spend reading. * CRAR is allocating buffers that are too big for the buffer pool (> 64kb) and therefore we spend time calling {{allocateDirect()}}: {{INFO 07:57:16 Requested buffer size 65813 is bigger than 65536, allocating directly}} We should really address these points first (the first one is trivial but the other two I am not as familiar with). However, we could also in parallel try running these tests to see if there are any differences with the STD case: * 3.0 HEAD MMAP with readahead * 3.0 HEAD STD without readahead and setting this in the yaml: {{disk_optimization_page_cross_chance: 0.1}} - this is actually the current default * 3.0 HEAD STD without readahead and setting this in the yaml: {{disk_optimization_page_cross_chance: 0.5}} * 3.0 HEAD STD without readahead and setting this in the yaml: {{disk_optimization_page_cross_chance: 0.9}} [~benedict] WDYT regarding the points I've raised? Is it worth addressing them before running more tests or would you expect a big difference in the tests anyway? Also, is there anything that needs to be done to disable readahead, other than calling {{blockdev --setra}}? > Benchmark and evaluate CASSANDRA-8894 improvements > -------------------------------------------------- > > Key: CASSANDRA-10407 > URL: https://issues.apache.org/jira/browse/CASSANDRA-10407 > Project: Cassandra > Issue Type: Test > Reporter: Aleksey Yeschenko > Assignee: Alan Boudreault > Fix For: 3.0.0 rc2 > > Attachments: 3_0_head_mmap_wo_ra.nps, 3_0_head_std_wo_ra.nps, > 8894_tiny.yaml, allocateDirect.png, flight-recordings.tar.gz, > reBufferStandardTime.png, size.png, test-with-8894-tiny.json, > test-without-8894-tiny.json > > > The original ticket (CASSANDRA-8894) was committed to 3.0 alpha1 two months > ago. We need to get proper performance tests before GA. > See [~benedict]'s > [comment|https://issues.apache.org/jira/browse/CASSANDRA-8894?focusedCommentId=14631203&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14631203] > for more details. -- This message was sent by Atlassian JIRA (v6.3.4#6332)