001package io.prometheus.benchmark; 002 003import com.codahale.metrics.MetricRegistry; 004 005import java.util.concurrent.TimeUnit; 006import org.openjdk.jmh.annotations.BenchmarkMode; 007import org.openjdk.jmh.annotations.Mode; 008import org.openjdk.jmh.annotations.Benchmark; 009import org.openjdk.jmh.annotations.OutputTimeUnit; 010import org.openjdk.jmh.annotations.Scope; 011import org.openjdk.jmh.annotations.Setup; 012import org.openjdk.jmh.annotations.State; 013import org.openjdk.jmh.runner.Runner; 014import org.openjdk.jmh.runner.RunnerException; 015import org.openjdk.jmh.runner.options.Options; 016import org.openjdk.jmh.runner.options.OptionsBuilder; 017 018@State(Scope.Benchmark) 019public class CounterBenchmark { 020 021 MetricRegistry registry; 022 com.codahale.metrics.Counter codahaleCounter; 023 com.codahale.metrics.Meter codahaleMeter; 024 025 io.prometheus.client.metrics.Counter prometheusCounter; 026 io.prometheus.client.metrics.Counter.Child prometheusCounterChild; 027 io.prometheus.client.Counter prometheusSimpleCounter; 028 io.prometheus.client.Counter.Child prometheusSimpleCounterChild; 029 io.prometheus.client.Counter prometheusSimpleCounterNoLabels; 030 031 @Setup 032 public void setup() { 033 prometheusCounter = io.prometheus.client.metrics.Counter.newBuilder() 034 .name("name") 035 .documentation("some description..") 036 .build(); 037 prometheusCounterChild = prometheusCounter.newPartial().apply(); 038 039 prometheusSimpleCounter = io.prometheus.client.Counter.build() 040 .name("name") 041 .help("some description..") 042 .labelNames("some", "group").create(); 043 prometheusSimpleCounterChild = prometheusSimpleCounter.labels("test", "group"); 044 045 prometheusSimpleCounterNoLabels = io.prometheus.client.Counter.build() 046 .name("name") 047 .help("some description..") 048 .create(); 049 050 registry = new MetricRegistry(); 051 codahaleCounter = registry.counter("counter"); 052 codahaleMeter = registry.meter("meter"); 053 } 054 055 @Benchmark 056 @BenchmarkMode({Mode.AverageTime}) 057 @OutputTimeUnit(TimeUnit.NANOSECONDS) 058 public void prometheusCounterIncBenchmark() { 059 prometheusCounter.newPartial().apply().increment(); 060 } 061 062 @Benchmark 063 @BenchmarkMode({Mode.AverageTime}) 064 @OutputTimeUnit(TimeUnit.NANOSECONDS) 065 public void prometheusCounterChildIncBenchmark() { 066 prometheusCounterChild.increment(); 067 } 068 069 @Benchmark 070 @BenchmarkMode({Mode.AverageTime}) 071 @OutputTimeUnit(TimeUnit.NANOSECONDS) 072 public void prometheusSimpleCounterIncBenchmark() { 073 prometheusSimpleCounter.labels("test", "group").inc(); 074 } 075 076 @Benchmark 077 @BenchmarkMode({Mode.AverageTime}) 078 @OutputTimeUnit(TimeUnit.NANOSECONDS) 079 public void prometheusSimpleCounterChildIncBenchmark() { 080 prometheusSimpleCounterChild.inc(); 081 } 082 083 @Benchmark 084 @BenchmarkMode({Mode.AverageTime}) 085 @OutputTimeUnit(TimeUnit.NANOSECONDS) 086 public void prometheusSimpleCounterNoLabelsIncBenchmark() { 087 prometheusSimpleCounterNoLabels.inc(); 088 } 089 090 @Benchmark 091 @BenchmarkMode({Mode.AverageTime}) 092 @OutputTimeUnit(TimeUnit.NANOSECONDS) 093 public void codahaleCounterIncBenchmark() { 094 codahaleCounter.inc(); 095 } 096 097 @Benchmark 098 @BenchmarkMode({Mode.AverageTime}) 099 @OutputTimeUnit(TimeUnit.NANOSECONDS) 100 public void codahaleMeterMarkBenchmark() { 101 codahaleMeter.mark(); 102 } 103 104 public static void main(String[] args) throws RunnerException { 105 106 Options opt = new OptionsBuilder() 107 .include(CounterBenchmark.class.getSimpleName()) 108 .warmupIterations(5) 109 .measurementIterations(4) 110 .threads(4) 111 .forks(1) 112 .build(); 113 114 new Runner(opt).run(); 115 } 116}