Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit 221e480

Browse files
authored
Trace Benchmarks (#1833)
* Adds initial benchmarks of basic tracing operations. * Expands basic operations benchmarks also adds latests results. * Adds benchmarks for basic data and span operations * Updates code formatting based on style guidelines. * Updates javadoc to conform to style guidelines. * Adds benchmarks for simple operations. * Moves some benchmarks from SpanOperations to BasicOperations; Reformats files according to style guide. * Removes OperationsBenchmark because all benchmarks have been moved to BasicOperationsBenchmark. * Migrates network events to message events and reformats code to match guidelines. * Adds benchmarks for creating Links and Message Events. * Updates javadoc to conform to style guide.
1 parent fcfc663 commit 221e480

4 files changed

Lines changed: 669 additions & 0 deletions

File tree

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
* Copyright 2019, OpenCensus Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
/*
18+
* ./gradlew --no-daemon -PjmhIncludeSingleClass=BasicDataBenchmark clean :opencensus-benchmarks:jmh
19+
*/
20+
21+
package io.opencensus.benchmarks.trace;
22+
23+
import io.opencensus.trace.Annotation;
24+
import io.opencensus.trace.AttributeValue;
25+
import java.util.HashMap;
26+
import java.util.Map;
27+
import java.util.concurrent.TimeUnit;
28+
import org.openjdk.jmh.annotations.Benchmark;
29+
import org.openjdk.jmh.annotations.BenchmarkMode;
30+
import org.openjdk.jmh.annotations.Mode;
31+
import org.openjdk.jmh.annotations.OutputTimeUnit;
32+
import org.openjdk.jmh.annotations.Param;
33+
import org.openjdk.jmh.annotations.Scope;
34+
import org.openjdk.jmh.annotations.Setup;
35+
import org.openjdk.jmh.annotations.State;
36+
import org.openjdk.jmh.annotations.TearDown;
37+
38+
/** Benchmarks for basic data structures related to trace events. */
39+
@State(Scope.Benchmark)
40+
public class BasicDataBenchmark {
41+
private static final String ANNOTATION_DESCRIPTION = "MyAnnotation";
42+
private static final String ATTRIBUTE_KEY = "MyAttributeKey";
43+
private static final String ATTRIBUTE_VALUE_STRING = "MyAttributeValue";
44+
private static final long ATTRIBUTE_VALUE_LONG = 90215;
45+
46+
@State(Scope.Benchmark)
47+
public static class Data {
48+
private AttributeValue[] attributeValues;
49+
private String[] attributeKeys;
50+
Map<String, AttributeValue> attributeMap;
51+
52+
// @Param({"impl", "impl-lite"})
53+
@Param({"impl"})
54+
String implementation;
55+
56+
@Param({"0", "1", "4", "8", "16"})
57+
int size;
58+
59+
@Param({"string", "boolean", "long"})
60+
String attributeType;
61+
62+
@Setup
63+
public void setup() {
64+
attributeValues = getAttributeValues(size, attributeType);
65+
attributeKeys = new String[size];
66+
attributeMap = new HashMap<>(size);
67+
for (int i = 0; i < size; i++) {
68+
attributeKeys[i] = ATTRIBUTE_KEY + "-i";
69+
attributeMap.put(attributeKeys[i], attributeValues[i]);
70+
}
71+
}
72+
73+
@TearDown
74+
public void doTearDown() {}
75+
}
76+
77+
/** Create attribute values. */
78+
@Benchmark
79+
@BenchmarkMode(Mode.AverageTime)
80+
@OutputTimeUnit(TimeUnit.NANOSECONDS)
81+
public AttributeValue[] createAttributeValues(Data data) {
82+
return getAttributeValues(data.size, data.attributeType);
83+
}
84+
85+
/** Create an AttributeMap. */
86+
@Benchmark
87+
@BenchmarkMode(Mode.AverageTime)
88+
@OutputTimeUnit(TimeUnit.NANOSECONDS)
89+
public Map<String, AttributeValue> createAttributeMap(Data data) {
90+
Map<String, AttributeValue> attributeMap = new HashMap<>(data.size);
91+
for (int i = 0; i < data.size; i++) {
92+
attributeMap.put(data.attributeKeys[i], data.attributeValues[i]);
93+
}
94+
return attributeMap;
95+
}
96+
97+
/** Create an Annotation. */
98+
@Benchmark
99+
@BenchmarkMode(Mode.AverageTime)
100+
@OutputTimeUnit(TimeUnit.NANOSECONDS)
101+
public Annotation createAnnotation(Data data) {
102+
return Annotation.fromDescriptionAndAttributes(ANNOTATION_DESCRIPTION, data.attributeMap);
103+
}
104+
105+
private static AttributeValue[] getAttributeValues(int size, String attributeType) {
106+
AttributeValue[] attributeValues = new AttributeValue[size];
107+
switch (attributeType) {
108+
case "string":
109+
for (int i = 0; i < size; i++) {
110+
attributeValues[i] = AttributeValue.stringAttributeValue(ATTRIBUTE_VALUE_STRING + "-i");
111+
}
112+
break;
113+
case "boolean":
114+
for (int i = 0; i < size; i++) {
115+
attributeValues[i] = AttributeValue.booleanAttributeValue(i % 3 == 0);
116+
}
117+
break;
118+
case "long":
119+
for (int i = 0; i < size; i++) {
120+
attributeValues[i] = AttributeValue.longAttributeValue(ATTRIBUTE_VALUE_LONG + i);
121+
}
122+
break;
123+
default:
124+
throw new IllegalArgumentException("Unknown attribute type: " + attributeType);
125+
}
126+
return attributeValues;
127+
}
128+
}

0 commit comments

Comments
 (0)