[
https://issues.apache.org/jira/browse/CASSANDRA-20360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17929471#comment-17929471
]
Abe Ratnofsky commented on CASSANDRA-20360:
-------------------------------------------
Here's the results of the JMH benchmark (from a local run on a laptop):
With patch:
||Benchmark||(numKeyspaces)||Mode||Cnt||Score Error Units||
|SchemaBench.validate|1|thrpt|5|0.046 ± 0.001 ops/ns|
|SchemaBench.validate|1000|thrpt|5|≈ 10⁻⁵ ops/ns|
|SchemaBench.validate|10000|thrpt|5|≈ 10⁻⁵ ops/ns|
|SchemaBench.validate|1|avgt|5|23.624 ± 0.566 ns/op|
|SchemaBench.validate|1000|avgt|5|36230.005 ± 118.858 ns/op|
|SchemaBench.validate|10000|avgt|5|275725.853 ± 3180.581 ns/op|
|SchemaBench.validate|1|sample|1046451|36.065 ± 3.451 ns/op|
|SchemaBench.validate:p0.00|1|sample| |≈ 0 ns/op|
|SchemaBench.validate:p0.50|1|sample| |41.000 ns/op|
|SchemaBench.validate:p0.90|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.95|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.99|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.999|1|sample| |209.000 ns/op|
|SchemaBench.validate:p0.9999|1|sample| |5624.000 ns/op|
|SchemaBench.validate:p1.00|1|sample| |499712.000 ns/op|
|SchemaBench.validate|1000|sample|814605|30766.777 ± 46.231 ns/op|
|SchemaBench.validate:p0.00|1000|sample| |25824.000 ns/op|
|SchemaBench.validate:p0.50|1000|sample| |29696.000 ns/op|
|SchemaBench.validate:p0.90|1000|sample| |33344.000 ns/op|
|SchemaBench.validate:p0.95|1000|sample| |34112.000 ns/op|
|SchemaBench.validate:p0.99|1000|sample| |39232.000 ns/op|
|SchemaBench.validate:p0.999|1000|sample| |95895.296 ns/op|
|SchemaBench.validate:p0.9999|1000|sample| |509480.346 ns/op|
|SchemaBench.validate:p1.00|1000|sample| |665600.000 ns/op|
|SchemaBench.validate|10000|sample|179638|278169.141 ± 274.680 ns/op|
|SchemaBench.validate:p0.00|10000|sample| |233728.000 ns/op|
|SchemaBench.validate:p0.50|10000|sample| |274944.000 ns/op|
|SchemaBench.validate:p0.90|10000|sample| |286208.000 ns/op|
|SchemaBench.validate:p0.95|10000|sample| |293888.000 ns/op|
|SchemaBench.validate:p0.99|10000|sample| |345600.000 ns/op|
|SchemaBench.validate:p0.999|10000|sample| |740352.000 ns/op|
|SchemaBench.validate:p0.9999|10000|sample| |811008.000 ns/op|
|SchemaBench.validate:p1.00|10000|sample| |1010688.000 ns/op|
|SchemaBench.validate|1|ss|5|13633.400 ± 24234.921 ns/op|
|SchemaBench.validate|1000|ss|5|428458.000 ± 251253.242 ns/op|
|SchemaBench.validate|10000|ss|5|4906192.000 ± 4619902.526 ns/op|
Without patch:
||Benchmark||(numKeyspaces)||Mode||Cnt||Score Error Units||
|SchemaBench.validate|1|thrpt|5|0.046 ± 0.004 ops/ns|
|SchemaBench.validate|1000|thrpt|5|≈ 10⁻⁵ ops/ns|
|SchemaBench.validate|10000|thrpt|5|≈ 10⁻⁶ ops/ns|
|SchemaBench.validate|1|avgt|5|21.807 ± 1.166 ns/op|
|SchemaBench.validate|1000|avgt|5|138095.377 ± 571.732 ns/op|
|SchemaBench.validate|10000|avgt|5|1234114.124 ± 3609.520 ns/op|
|SchemaBench.validate|1|sample|1968364|36.805 ± 2.383 ns/op|
|SchemaBench.validate:p0.00|1|sample| |≈ 0 ns/op|
|SchemaBench.validate:p0.50|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.90|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.95|1|sample| |42.000 ns/op|
|SchemaBench.validate:p0.99|1|sample| |83.000 ns/op|
|SchemaBench.validate:p0.999|1|sample| |208.000 ns/op|
|SchemaBench.validate:p0.9999|1|sample| |4368.000 ns/op|
|SchemaBench.validate:p1.00|1|sample| |627712.000 ns/op|
|SchemaBench.validate|1000|sample|375280|133169.250 ± 107.136 ns/op|
|SchemaBench.validate:p0.00|1000|sample| |117120.000 ns/op|
|SchemaBench.validate:p0.50|1000|sample| |130688.000 ns/op|
|SchemaBench.validate:p0.90|1000|sample| |136192.000 ns/op|
|SchemaBench.validate:p0.95|1000|sample| |143872.000 ns/op|
|SchemaBench.validate:p0.99|1000|sample| |160512.000 ns/op|
|SchemaBench.validate:p0.999|1000|sample| |592896.000 ns/op|
|SchemaBench.validate:p0.9999|1000|sample| |664576.000 ns/op|
|SchemaBench.validate:p1.00|1000|sample| |818176.000 ns/op|
|SchemaBench.validate|10000|sample|41152|1214439.913 ± 1469.489 ns/op|
|SchemaBench.validate:p0.00|10000|sample| |1097728.000 ns/op|
|SchemaBench.validate:p0.50|10000|sample| |1191936.000 ns/op|
|SchemaBench.validate:p0.90|10000|sample| |1257472.000 ns/op|
|SchemaBench.validate:p0.95|10000|sample| |1316864.000 ns/op|
|SchemaBench.validate:p0.99|10000|sample| |1692610.560 ns/op|
|SchemaBench.validate:p0.999|10000|sample| |1918035.968 ns/op|
|SchemaBench.validate:p0.9999|10000|sample| |4364955.238 ns/op|
|SchemaBench.validate:p1.00|10000|sample| |5480448.000 ns/op|
|SchemaBench.validate|1|ss|5|10741.800 ± 8413.829 ns/op|
|SchemaBench.validate|1000|ss|5|906616.800 ± 770359.504 ns/op|
|SchemaBench.validate|10000|ss|5|5972116.600 ± 7821829.326 ns/op|
> Improve performance of DistributedSchema.validate for large schemas
> -------------------------------------------------------------------
>
> Key: CASSANDRA-20360
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20360
> Project: Apache Cassandra
> Issue Type: Improvement
> Components: Transactional Cluster Metadata
> Reporter: Abe Ratnofsky
> Assignee: Abe Ratnofsky
> Priority: Normal
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Currently DistributedSchema validates on every instantiation:
> [https://github.com/apache/cassandra/blob/486a6276034df40f8ac0ec9bd1d1f727b39f62c7/src/java/org/apache/cassandra/schema/DistributedSchema.java#L405]
>
> Keyspaces.forEach delegates to AbstractBTreeMap.values, which copies the
> array:
> [https://github.com/apache/cassandra/blob/486a6276034df40f8ac0ec9bd1d1f727b39f62c7/src/java/org/apache/cassandra/utils/btree/AbstractBTreeMap.java#L109]
>
> This can be fixed by having AbstractBTreeMap.values return a view instead of
> a copy. Patch is available, preparing to push.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]