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.028 0.105 0.105 0.105 8.031 0.101
No instrumentation past 0.107 0.000 0.090 0.106 0.106 0.107 78.111 0.103
Deactivated probe current 0.737 0.008 3.898 0.706 0.718 0.738 2756.164 0.669
Deactivated probe past 0.722 0.008 3.941 0.688 0.705 0.723 2758.547 0.654
No logging current 2.709 0.011 5.504 2.649 2.675 2.705 2881.116 2.582
No logging past 2.683 0.010 4.928 2.630 2.651 2.678 2833.634 2.576
Binary file current 5.015 0.049 24.807 3.446 4.383 5.190 24117.120 2.947
Binary file past 4.919 0.028 14.263 3.500 4.370 5.618 12775.566 3.055
Binary TCP current 6.546 0.011 5.414 6.258 6.765 7.136 2497.314 2.965
Binary TCP past 6.737 0.012 6.221 6.632 6.841 7.232 3268.889 3.239

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.688 0.000 0.171 1.575 1.727 1.738 25.338 1.493
No instrumentation past 1.671 0.000 0.184 1.568 1.704 1.731 37.213 1.490
Deactivated probe - A current 1.597 0.000 0.171 1.536 1.551 1.694 28.125 1.464
Deactivated probe - A past 1.916 0.000 0.201 1.854 1.887 1.988 32.091 1.747
Deactivated probe - B current 3.999 0.001 0.351 3.803 3.835 4.230 144.987 3.697
Deactivated probe - B past 4.100 0.001 0.367 3.854 4.165 4.274 92.656 3.704
No logging - A current 1.612 0.000 0.174 1.556 1.567 1.698 34.557 1.465
No logging - A past 22.753 0.002 0.905 22.385 22.464 22.648 68.365 21.969
No logging - B current 45.035 0.003 1.570 44.435 44.669 44.972 228.407 43.428
No logging - B past 44.566 0.003 1.712 43.906 44.137 44.451 243.900 42.956
Text file - A current 1.709 0.000 0.162 1.696 1.709 1.718 27.021 1.476
Text file - A past 181.353 0.162 82.821 173.311 177.709 187.661 34012.903 170.166
Text file - B current 1308.735 1.609 820.888 1255.394 1271.598 1355.805 316377.700 1229.968
Text file - B past 1301.436 1.195 609.669 1245.380 1271.897 1346.518 231942.345 1217.921
Binary TCP - A current 1.734 0.000 0.204 1.728 1.745 1.757 33.552 1.490
Binary TCP - A past 84.299 0.070 35.538 82.820 83.222 84.346 32366.614 50.373
Binary TCP - B current 468.865 0.058 29.459 460.595 463.509 468.494 1234.707 234.659
Binary TCP - B past 469.360 0.056 28.484 460.742 463.736 468.959 2263.595 231.335

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.107 0.000 0.156 0.105 0.107 0.108 151.195 0.103
No instrumentation past 0.105 0.000 0.032 0.105 0.105 0.105 11.119 0.102
No logging current 6.563 0.046 23.657 6.392 6.428 6.470 10782.410 6.274
No logging past 6.797 0.044 22.206 6.625 6.664 6.708 11564.595 6.467
Zipkin current 9.601 0.026 13.487 8.903 8.952 9.019 3547.144 8.716
Zipkin past 10.330 0.026 13.088 9.606 9.661 9.732 3723.408 9.272

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 0.107 0.000 0.032 0.106 0.107 0.108 7.545 0.103
No instrumentation past 4.862 0.002 0.850 4.667 4.892 4.925 49.854 4.321
Deactivated probe current 14.172 0.023 11.983 13.902 14.015 14.117 4072.369 13.242
Deactivated probe past 17.159 0.085 43.470 16.701 16.908 17.040 39865.815 15.771
No logging current 42.045 0.037 18.947 41.117 41.337 41.648 9407.827 39.932
No logging past 40.068 0.031 15.720 38.942 39.284 39.676 4480.940 37.646
Zipkin current 45.374 0.113 57.828 41.880 42.197 42.695 51966.030 37.055
Zipkin past 41.713 0.085 43.364 39.623 39.881 40.249 31208.106 35.080
Prometheus current 24.224 0.025 12.536 23.795 23.902 24.023 3485.240 23.220
Prometheus past 24.809 0.055 28.265 24.376 24.493 24.631 23032.267 22.463