[ https://issues.apache.org/jira/browse/CASSANDRA-15389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17013294#comment-17013294 ]
Benedict Elliott Smith edited comment on CASSANDRA-15389 at 1/11/20 12:44 AM: ------------------------------------------------------------------------------ very nice! If we change the order of parameter provision to the {{BiLongAccumulator}}, we can (if we want) do the same trick of just supplying {{accumulate(LongAccumulator::apply, accumulator, initialValue)}} to keep only one implementation without the extra (admittedly minor) obfuscation. I still need to double check the fine details of a couple of the methods, but I think we're pretty much close to done here. was (Author: benedict): very nice! If we change the order of parameter provision to the BiLongAccumulator, we can (if we want) do the same trick of just supplying {{accumulate(LongAccumulator::apply, accumulator, initialValue)}} to keep only one implementation without the extra (admittedly minor) obfuscation. I still need to double check the fine details of a couple of the methods, but I think we're pretty much close to done here. > Minimize BTree iterator allocations > ----------------------------------- > > Key: CASSANDRA-15389 > URL: https://issues.apache.org/jira/browse/CASSANDRA-15389 > Project: Cassandra > Issue Type: Sub-task > Components: Local/Compaction > Reporter: Blake Eggleston > Assignee: Blake Eggleston > Priority: Normal > Fix For: 4.0 > > > Allocations of BTree iterators contribute a lot amount of garbage to the > compaction and read paths. > This patch removes most btree iterator allocations on hot paths by: > • using Row#apply where appropriate on frequently called methods > (Row#digest, Row#validateData > • adding BTree accumulate method. Like the apply method, this method walks > the btree with a function that takes and returns a long argument, this > eliminates iterator allocations without adding helper object allocations > (BTreeRow#hasComplex, BTreeRow#hasInvalidDeletions, BTreeRow#dataSize, > BTreeRow#unsharedHeapSizeExcludingData, Rows#collectStats, > UnfilteredSerializer#serializedRowBodySize) as well as eliminating the > allocation of helper objects in places where apply was used previously^[1]^. > • Create map of columns in SerializationHeader, this lets us avoid > allocating a btree search iterator for each row we serialize. > These optimizations reduce garbage created during compaction by up to 13.5% > > [1] the memory test does measure memory allocated by lambdas capturing objects -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org