BenchmarkDotnet Exporter
edit
IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.
BenchmarkDotnet Exporter
editAn exporter for BenchmarkDotnet that will index benchmarking results directly into Elasticsearch.
Installation
editAdd a reference to the Elastic.CommonSchema.BenchmarkDotNetExporter package:
<PackageReference Include="Elastic.CommonSchema.BenchmarkDotNetExporter" Version="8.6.0" />
Usage
editvar options = new ElasticsearchBenchmarkExporterOptions(url) { GitBranch = "externally-provided-branch", GitCommitMessage = "externally provided git commit message", GitRepositoryIdentifier = "repository" }; var exporter = new ElasticsearchBenchmarkExporter(options); var config = CreateDefaultConfig().With(exporter); BenchmarkRunner.Run(typeof(Md5VsSha256), config);
The code snippet above configures the ElasticsearchBenchmarkExporter
with the supplied ElasticsearchBenchmarkExporterOptions
. It is possible to configure the exporter to use Elastic Cloud as follows:
var options = new ElasticsearchBenchmarkExporterOptions(url) { CloudId = "CLOUD_ID_HERE" };
Example _source from a search in Elasticsearch after a benchmark run:
{ "_index":"benchmark-dotnet-2020-01-01", "_type":"_doc", "_id":"pfFAh28B14pBZI_VO098", "_score":1.0, "_source":{ "agent":{ "git":{ "branch_name":"externally-provided-branch", "commit_message":"externally provided git commit message", "repository":"repository" }, "language":{ "jit_info":"RyuJIT", "dot_net_sdk_version":"3.0.101", "benchmark_dot_net_caption":"BenchmarkDotNet", "has_ryu_jit":true, "build_configuration":"RELEASE", "benchmark_dot_net_version":"0.12.0", "version":".NET Core 3.0.1 (CoreCLR 4.700.19.47502, CoreFX 4.700.19.51008)" }, "type":"Elastic.CommonSchema.BenchmarkDotNetExporter", "version":"1.0.0+7cedae2aaa06092ea253155279b835cee6160b3a" }, "os":{ "name":"Linux", "version":"ubuntu 18.10", "platform":"unix" }, "message":null, "benchmark":{ "q1":3632.625, "lower_outliers":[], "q3":5047.625, "confidence_interval":{ "margin":14613.282591693971, "level":12, "mean":4123.291666666667, "lower":-10489.990925027305, "n":3, "standard_error":462.4594877151704 }, "percentiles":{ "p0":3632.625, "p67":4151.345, "p25":3661.125, "p100":5047.625, "p90":4776.025000000001, "p80":4504.425, "p50":3689.625, "p85":4640.225, "p95":4911.825 }, "memory":{ "bytes_allocated_per_operation":112, "total_operations":4, "gen2_collections":0, "gen1_collections":0, "gen0_collections":0 }, "max":5047.625, "interquartile_range":1415, "all_outliers":[], "upper_fence":7170.125, "standard_deviation":801.0033291649501, "kurtosis":0.6666666666666661, "n":3, "standard_error":462.4594877151704, "min":3632.625, "median":3689.625, "upper_outliers":[], "variance":641606.3333333333, "mean":4123.291666666667, "lower_fence":1510.125, "skewness":0.3827086238595402 }, "@timestamp":"2020-01-08T22:22:10.7917398+00:00", "host":{ "hardware_timer_kind":"Unknown", "physical_processor_count":1, "logical_core_count":12, "in_docker":false, "processor_name":"Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz", "chronometer_frequency_hertz":1000000000, "has_attached_debugger":false, "physical_core_count":6, "architecture":"X64" }, "log.level":null, "event":{ "duration":1385324200, "measurement_stages":[ { "operations":2, "iteration_mode":"Overhead", "iteration_stage":"Jitting" }, { "operations":2, "iteration_mode":"Workload", "iteration_stage":"Jitting" }, { "operations":4, "iteration_mode":"Overhead", "iteration_stage":"Warmup" }, { "operations":4, "iteration_mode":"Overhead", "iteration_stage":"Actual" }, { "operations":4, "iteration_mode":"Workload", "iteration_stage":"Warmup" }, { "operations":4, "iteration_mode":"Workload", "iteration_stage":"Actual" }, { "operations":4, "iteration_mode":"Workload", "iteration_stage":"Result" } ], "job_config":{ "run_time":".NET Core 3.0", "jit":"Default", "launch":{ "unroll_factor":2, "max_iteration_count":0, "launch_count":1, "iteration_count":3, "run_strategy":"Throughput", "iteration_time_in_milliseconds":0, "warm_count":3, "max_warmup_iteration_count":0, "invocation_count":4, "min_warmup_iteration_count":0, "min_iteration_count":0 }, "id":"ShortRun", "gc":{ "heap_affinitize_mask":0, "server":false, "no_affinitize":false, "allow_very_large_objects":false, "retain_vm":false, "cpu_groups":false, "concurrent":false, "heap_count":0, "force":false }, "platform":"AnyCpu" }, "original":"Md5VsSha256.Sha256: ShortRun(Runtime=.NET Core 3.0, InvocationCount=4, IterationCount=3, LaunchCount=1, UnrollFactor=2, WarmupCount=3) [N=1000]", "method":"Elastic.CommonSchema.BenchmarkDotNetExporter.IntegrationTests.Md5VsSha256.Sha256(N: 1000)", "module":"Elastic.CommonSchema.BenchmarkDotNetExporter.IntegrationTests", "description":"Sha256", "action":"Sha256", "category":"Elastic.CommonSchema.BenchmarkDotNetExporter.IntegrationTests.Md5VsSha256-20200108-232208", "type":"Md5VsSha256", "parameters":"N=1000", "repetitions":{ "measured":4, "warmup":4 } } } }