From 1f078c0daf3818c6c9897504af8daa256ef88fde Mon Sep 17 00:00:00 2001 From: Dmitry Konstantinov Date: Tue, 19 May 2026 09:55:58 +0100 Subject: [PATCH] Reduce time to execute microbench-test Set 1 thread and 1 second for the measurement iteration (note: it is a smoke test only, we do not analyze results from such short measurements) Exclude some options for heavy benchmarks by default Shutdown all threads once JMH test is completed to avoid awaiting of a forked JVM till timeout at the end patch by Dmitry Konstantinov; reviewed by Michael Semb Wever for CASSANDRA-21388 --- .build/build-bench.xml | 8 +++++--- .../cassandra/test/microbench/BatchStatementBench.java | 9 +++++++++ .../cassandra/test/microbench/CIDRAuthorizerBench.java | 6 +++--- .../cassandra/test/microbench/CacheLoaderBench.java | 9 +++------ .../test/microbench/FunctionWithTerminalArgsBench.java | 8 +++----- .../test/microbench/MetadataCollectorBench.java | 9 +++++++++ .../microbench/ZstdDictionaryCompressorBenchBase.java | 5 +++-- .../test/microbench/tries/ComparisonReadBench.java | 6 ++++-- .../test/microbench/tries/InMemoryTrieUnionBench.java | 6 ++++-- 9 files changed, 43 insertions(+), 23 deletions(-) diff --git a/.build/build-bench.xml b/.build/build-bench.xml index 4ea0ff571e..a0715b9dc4 100644 --- a/.build/build-bench.xml +++ b/.build/build-bench.xml @@ -49,9 +49,11 @@ - - - + + + + + diff --git a/test/microbench/org/apache/cassandra/test/microbench/BatchStatementBench.java b/test/microbench/org/apache/cassandra/test/microbench/BatchStatementBench.java index f2f88409ad..c7b1b190f3 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/BatchStatementBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/BatchStatementBench.java @@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -33,6 +34,7 @@ import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; import org.openjdk.jmh.annotations.Threads; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.profile.GCProfiler; @@ -63,6 +65,7 @@ import org.apache.cassandra.service.ClientState; import org.apache.cassandra.transport.Dispatcher; import org.apache.cassandra.utils.ByteArrayUtil; import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.TestHelper; @BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.MILLISECONDS) @@ -120,6 +123,12 @@ public class BatchStatementBench bqo = BatchQueryOptions.withPerStatementVariables(QueryOptions.DEFAULT, parameters, queryOrIdList); } + @TearDown(Level.Trial) + public void teardown() throws Exception + { + TestHelper.teardown(); + } + @Benchmark public void bench() { diff --git a/test/microbench/org/apache/cassandra/test/microbench/CIDRAuthorizerBench.java b/test/microbench/org/apache/cassandra/test/microbench/CIDRAuthorizerBench.java index 88ff3c726a..b3d1fbf4ec 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/CIDRAuthorizerBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/CIDRAuthorizerBench.java @@ -28,7 +28,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; @@ -50,6 +49,7 @@ import org.apache.cassandra.auth.AuthenticatedUser; import org.apache.cassandra.cql3.CIDR; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.exceptions.UnauthorizedException; +import org.apache.cassandra.utils.TestHelper; /** * Benchmark CIDR authorizer (enforce mode) @@ -99,9 +99,9 @@ public class CIDRAuthorizerBench extends CQLTester } @TearDown(Level.Trial) - public void teardown() throws IOException, ExecutionException, InterruptedException + public void teardown() throws Exception { - CQLTester.cleanup(); + TestHelper.teardown(); } @State(Scope.Thread) diff --git a/test/microbench/org/apache/cassandra/test/microbench/CacheLoaderBench.java b/test/microbench/org/apache/cassandra/test/microbench/CacheLoaderBench.java index 68eab3fe00..f95f50cfa8 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/CacheLoaderBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/CacheLoaderBench.java @@ -46,18 +46,17 @@ import org.apache.cassandra.cache.KeyCacheKey; import org.apache.cassandra.config.Config; import org.apache.cassandra.config.DataStorageSpec; import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.QueryProcessor; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.RowUpdateBuilder; -import org.apache.cassandra.db.commitlog.CommitLog; import org.apache.cassandra.db.marshal.AsciiType; import org.apache.cassandra.io.sstable.AbstractRowIndexEntry; import org.apache.cassandra.io.sstable.format.SSTableReader; import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.service.CacheService; import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.TestHelper; @SuppressWarnings("unused") @BenchmarkMode(Mode.SampleTime) @@ -151,11 +150,9 @@ public class CacheLoaderBench } @TearDown(Level.Trial) - public void teardown() + public void teardown() throws Exception { - CQLTester.tearDownClass(); - CommitLog.instance.stopUnsafe(true); - CQLTester.cleanup(); + TestHelper.teardown(); } @Benchmark diff --git a/test/microbench/org/apache/cassandra/test/microbench/FunctionWithTerminalArgsBench.java b/test/microbench/org/apache/cassandra/test/microbench/FunctionWithTerminalArgsBench.java index bf1b0a3742..462bf27e56 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/FunctionWithTerminalArgsBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/FunctionWithTerminalArgsBench.java @@ -41,7 +41,7 @@ import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.UntypedResultSet; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; -import org.apache.cassandra.db.commitlog.CommitLog; +import org.apache.cassandra.utils.TestHelper; /** * Benchmarks the performance of CQL functions calls with terminal arguments. @@ -101,11 +101,9 @@ public class FunctionWithTerminalArgsBench extends CQLTester } @TearDown(Level.Trial) - public void teardown() throws InterruptedException + public void teardown() throws Exception { - CommitLog.instance.shutdownBlocking(); - CQLTester.tearDownClass(); - CQLTester.cleanup(); + TestHelper.teardown(); } @Benchmark diff --git a/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java b/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java index 2adb0c2047..5f24f4d731 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java @@ -27,6 +27,7 @@ import org.jctools.util.Pow2; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -34,6 +35,7 @@ import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; import org.openjdk.jmh.annotations.Warmup; import org.apache.cassandra.cql3.CQLTester; @@ -47,6 +49,7 @@ import org.apache.cassandra.db.rows.Cell; import org.apache.cassandra.io.sstable.metadata.MetadataCollector; import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.utils.TestHelper; @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) @@ -122,6 +125,12 @@ public class MetadataCollectorBench } } + @TearDown(Level.Trial) + public void teardown() throws Exception + { + TestHelper.teardown(); + } + @Benchmark public void updateCell() { diff --git a/test/microbench/org/apache/cassandra/test/microbench/ZstdDictionaryCompressorBenchBase.java b/test/microbench/org/apache/cassandra/test/microbench/ZstdDictionaryCompressorBenchBase.java index ad00e806f7..91c6d5e01c 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/ZstdDictionaryCompressorBenchBase.java +++ b/test/microbench/org/apache/cassandra/test/microbench/ZstdDictionaryCompressorBenchBase.java @@ -39,7 +39,7 @@ import org.apache.cassandra.db.compression.CompressionDictionary.Kind; import org.apache.cassandra.db.compression.ZstdCompressionDictionary; import org.apache.cassandra.io.compress.ZstdDictionaryCompressor; -// The bench takes over 20 minutes to finish +// The full bench takes over 20 minutes to finish @State(Scope.Benchmark) public abstract class ZstdDictionaryCompressorBenchBase { @@ -52,7 +52,8 @@ public abstract class ZstdDictionaryCompressorBenchBase @Param({"0", "65536"}) protected int dictionarySize; - @Param({"3", "5", "7"}) + // @Param({"3", "5", "7"}) + @Param({"3"}) protected int compressionLevel; protected byte[] inputData; diff --git a/test/microbench/org/apache/cassandra/test/microbench/tries/ComparisonReadBench.java b/test/microbench/org/apache/cassandra/test/microbench/tries/ComparisonReadBench.java index 91dc6970e8..63425da50f 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/tries/ComparisonReadBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/tries/ComparisonReadBench.java @@ -77,10 +77,12 @@ public class ComparisonReadBench @Param({"ON_HEAP"}) BufferType bufferType = BufferType.OFF_HEAP; - @Param({"1000", "100000", "10000000"}) + // @Param({"1000", "100000", "10000000"}) + @Param({"1000", "100000"}) int count = 1000; - @Param({"TREE_MAP", "CSLM", "TRIE"}) + // @Param({"TREE_MAP", "CSLM", "TRIE"}) + @Param({"CSLM", "TRIE"}) MapOption map = MapOption.TRIE; @Param({"LONG"}) diff --git a/test/microbench/org/apache/cassandra/test/microbench/tries/InMemoryTrieUnionBench.java b/test/microbench/org/apache/cassandra/test/microbench/tries/InMemoryTrieUnionBench.java index 7cfd3290f5..28d7fecb58 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/tries/InMemoryTrieUnionBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/tries/InMemoryTrieUnionBench.java @@ -56,10 +56,12 @@ public class InMemoryTrieUnionBench @Param({"ON_HEAP", "OFF_HEAP"}) BufferType bufferType = BufferType.OFF_HEAP; - @Param({"1000", "100000", "10000000"}) + // @Param({"1000", "100000", "10000000"}) + @Param({"1000", "100000"}) int count = 1000; - @Param({"2", "3", "8"}) + // @Param({"2", "3", "8"}) + @Param({"2", "3"}) int sources = 2; @Param({"false", "true"})