Performance Benchmarks

On this page, we collect performance benchmarks of Kieker monitoring and other instrumentation frameworks, such as OpenTelemetry and inspectIT, for comparison utilizing MooBench.

Details of the comparison of OpenTelemetry, inspectIT and Kieker can be found in https://oceanrep.geomar.de/id/eprint/55367/1/SSP2021overhead.pdf


Kieker Observability Framework – Java

These are the performance benchmark results for Kieker 4 Java probes utilizing different writer back end.

  • No instrumentation serves as a baseline value indicating how much execution time can be contributed to the benchmark program itself.
  • Deactivated probe as above, but with woven in probes that do not produce any output and do not aggregate information.
  • No logging are activated probes, but the collected data is not send utilizing a null writer.
  • Text File utilizes the text file logging. This is usually slow, as data is written in text files and getting more irrelevant in the performance benchmarks. The diagram below, therefore, does not show the results.
  • Binary File utilizes the binary file logging without compression.
  • Binary TCP utilizes a TCP connection to send the monitoring data to a logging service.
setup run mean ci sd 1.quartile median 3.quartile max min
No instrumentation current 0.105 0.000 0.031 0.105 0.105 0.105 8.412 0.101
No instrumentation past 0.110 0.000 0.042 0.108 0.111 0.111 18.358 0.105
Deactivated probe current 0.746 0.007 3.703 0.712 0.730 0.750 2716.710 0.662
Deactivated probe past 0.734 0.007 3.496 0.701 0.718 0.737 2703.090 0.662
No logging current 2.720 0.011 5.574 2.665 2.688 2.716 2977.598 2.585
No logging past 2.757 0.009 4.666 2.705 2.730 2.756 2879.569 2.623
Binary file current 5.118 0.018 9.359 3.633 4.426 4.948 6851.533 3.133
Binary file past 5.079 0.020 10.002 3.542 4.391 5.097 7765.298 3.082
Binary TCP current 6.929 0.011 5.412 6.686 6.905 7.118 2597.294 3.344
Binary TCP past 6.693 0.023 11.538 6.326 6.864 7.119 9673.183 3.125

Kieker Observability Framework – Python

Kieker 4 Python is the reimplementation of the probe and monitoring side of Kieker addressing programs written in Python. Here we also want to know how well certain parts perform.

  • No instrumentation is the baseline execution time of the benchmark program.
  • Deactivated probe is the execution time with integrated probes, but these are deactivated.
  • No logging is with active probes, but with a null writer.
  • Text File is with an activated probe logging to a text file.
  • Binary TCP is with an activated probe logging to a remote logging server.

Each of these setups, except of no instrumentation, are tested utilizing two different probe introduction methods (here labeled A and B).

setup run mean ci sd 1.quartile median 3.quartile max min
No instrumentation current 1.595 0.000 0.213 1.483 1.582 1.661 24.341 1.428
No instrumentation past 1.610 0.000 0.246 1.559 1.602 1.652 101.832 1.438
Deactivated probe - A current 4.159 0.001 0.429 3.928 4.073 4.368 148.685 3.649
Deactivated probe - A past 4.222 0.001 0.763 4.015 4.204 4.385 456.289 3.630
Deactivated probe - B current 4.098 0.001 0.435 3.899 4.011 4.306 182.744 3.550
Deactivated probe - B past 4.083 0.001 0.405 3.873 4.040 4.264 105.825 3.566
No logging - A current 169.984 0.011 5.706 167.678 168.282 169.045 361.831 164.647
No logging - A past 168.074 0.010 4.970 166.397 166.920 167.544 844.757 163.573
No logging - B current 42.436 0.003 1.611 41.845 42.067 42.323 223.222 40.814
No logging - B past 42.978 0.004 2.171 42.073 42.288 42.599 405.374 41.057
Text file - A current 1462.297 1.277 651.527 1393.889 1442.212 1508.754 187729.600 1366.091
Text file - A past 1470.043 1.214 619.445 1404.719 1444.597 1520.938 231722.195 1374.930
Text file - B current 1234.754 1.113 567.737 1177.812 1217.985 1277.408 260738.200 1152.230
Text file - B past 1247.208 1.133 578.291 1189.124 1234.322 1287.433 232731.622 1158.805
Binary TCP - A current 670.581 0.073 37.238 660.772 663.351 672.218 24504.440 389.796
Binary TCP - A past 672.056 0.295 150.551 662.042 664.721 673.278 128266.770 393.031
Binary TCP - B current 473.871 0.033 16.697 467.599 470.235 474.388 3546.343 235.653
Binary TCP - B past 468.211 0.042 21.381 461.180 463.567 467.863 3595.451 237.074

OpenTelemetry

OpenTelemetry (https://opentelemetry.io/) is a widely used monitoring tool, compatible with many programming languages. MooBench measures the overhead of OpenTelemetry using the following configurations:

  • No instrumentation is the baseline execution time of the benchmark program.
  • No Logging measures the execution time of the benchmark program with OpenTelemetry instrumentation, but without measuring or
    logging anything.
  • Logging measures the execution time of the benchmark program with OpenTelemetry instrumentation and writing every output to the standard output. Text file logging is slow and getting more irrelevant in the performance benchmarks. The diagram below, therefore, does not show the results.
  • Zipkin measures the execution time of the benchmark program with obtaining every method invocation and sending them to a local Zipkin instance.
  • Prometheus measures the execution time of the benchmark program with obtaining only aggregated execution times, which are stored by a local Prometheus instance.
setup run mean ci sd 1.quartile median 3.quartile max min
No instrumentation current 0.103 0.000 0.037 0.102 0.103 0.103 9.315 0.101
No instrumentation past 0.108 0.000 0.042 0.107 0.108 0.108 25.239 0.104
No logging current 6.703 0.088 44.944 6.426 6.491 6.618 31393.580 6.216
No logging past 6.402 0.038 19.356 6.235 6.271 6.313 9580.571 6.092
Zipkin current 11.042 0.102 51.951 10.101 10.149 10.229 38921.200 8.982
Zipkin past 10.410 0.032 16.439 9.711 9.773 9.881 10301.141 8.957

InspectIT

InspectIT (https://www.inspectit.rocks/) is a widely used monitoring tool, which is allows to trace the execution of Java programs. MooBench
measures the overhead of InspectIT using the following configurations:

  • No instrumentation is the baseline execution time of the benchmark program.
  • Deactivated processing measures the execution time of the benchmark program with inspectIT instrumentation, but without measuring or logging
    anything.
  • No Logging measures the execution time of the benchmark program with inspectIT instrumentation and just discarding the measurement results.
  • Zipkin measures the execution time of the benchmark program with obtaining every method invocation and sending them to a local Zipkin instance.
  • Prometheus measures the execution time of the benchmark program with obtaining only aggregated execution times, which are stored by a local Prometheus instance.
setup run mean ci sd 1.quartile median 3.quartile max min
No instrumentation current 41.076 0.014 7.354 40.827 41.233 41.524 290.159 36.038
No instrumentation past 40.902 0.014 7.291 39.330 40.986 41.314 301.581 35.901
Deactivated probe current 40.994 0.015 7.601 40.250 40.473 40.743 338.685 35.647
Deactivated probe past 41.042 0.015 7.604 40.183 40.670 40.965 364.818 35.574
No logging current 42.402 0.026 13.048 41.861 42.163 42.465 10639.750 36.809
No logging past 41.056 0.015 7.673 40.514 40.811 41.090 543.287 35.823
Zipkin current 41.711 0.015 7.627 41.073 41.328 41.596 492.710 36.223
Zipkin past 40.658 0.015 7.709 39.984 40.253 40.526 1067.463 35.303
Prometheus current 40.491 0.016 8.027 40.087 40.479 40.780 1489.498 35.556
Prometheus past 41.305 0.015 7.766 40.626 40.929 41.201 739.590 35.903