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.103 0.000 0.043 0.102 0.103 0.103 17.711 0.101
No instrumentation past 0.106 0.000 0.075 0.105 0.106 0.106 59.497 0.101
Deactivated probe current 0.716 0.007 3.487 0.683 0.700 0.719 2509.545 0.650
Deactivated probe past 0.730 0.007 3.421 0.696 0.714 0.734 2594.063 0.658
No logging current 2.750 0.009 4.528 2.697 2.720 2.749 2721.431 2.620
No logging past 2.716 0.011 5.387 2.661 2.685 2.713 2995.704 2.581
Binary file current 5.363 0.043 21.747 3.708 4.624 6.784 21122.490 3.153
Binary file past 5.178 0.065 32.965 3.600 4.495 5.883 31636.767 3.259
Binary TCP current 6.568 0.011 5.379 6.563 6.824 7.025 2826.545 3.378
Binary TCP past 6.740 0.017 8.803 6.562 6.892 7.148 6761.397 3.266

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.594 0.000 0.207 1.508 1.564 1.647 19.459 1.439
No instrumentation past 1.638 0.000 0.242 1.552 1.621 1.709 74.285 1.446
Deactivated probe - A current 4.043 0.001 0.433 3.799 4.010 4.204 42.288 3.559
Deactivated probe - A past 4.153 0.001 0.453 3.935 4.094 4.355 117.315 3.616
Deactivated probe - B current 4.205 0.001 0.388 3.969 4.144 4.426 42.966 3.592
Deactivated probe - B past 4.110 0.001 0.680 3.897 4.035 4.319 439.052 3.559
No logging - A current 169.425 0.011 5.795 166.969 167.515 168.227 360.264 164.317
No logging - A past 169.102 0.012 5.989 166.583 167.128 167.850 474.941 163.921
No logging - B current 42.297 0.004 2.060 41.417 41.636 41.935 223.979 40.461
No logging - B past 42.706 0.004 2.031 41.987 42.206 42.493 514.348 41.001
Text file - A current 1426.774 1.262 644.050 1363.141 1395.787 1476.335 177786.900 1339.996
Text file - A past 1463.584 1.689 861.757 1397.299 1437.354 1513.326 603924.502 1370.455
Text file - B current 1227.885 1.322 674.757 1172.751 1198.912 1269.471 293272.800 1149.859
Text file - B past 1226.549 0.982 501.229 1171.494 1206.473 1269.322 188877.665 1145.316
Binary TCP - A current 663.320 0.073 37.349 652.161 655.115 662.946 1208.054 390.280
Binary TCP - A past 666.888 0.095 48.556 656.879 659.748 667.494 23233.627 392.683
Binary TCP - B current 457.343 0.046 23.675 448.539 451.331 457.045 3031.629 235.031
Binary TCP - B past 458.272 0.052 26.694 450.243 452.864 457.183 3398.041 234.187

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.110 0.000 0.034 0.110 0.110 0.110 12.417 0.101
No instrumentation past 0.108 0.000 0.035 0.107 0.108 0.108 14.243 0.102
No logging current 6.515 0.044 22.378 6.346 6.384 6.431 10357.020 6.188
No logging past 6.472 0.051 26.024 6.271 6.319 6.390 15091.755 6.096
Zipkin current 11.692 0.026 13.218 10.755 10.907 11.069 3487.958 10.268
Zipkin past 10.416 0.044 22.650 9.695 9.756 9.828 13084.450 9.202

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 37.394 0.012 6.325 34.638 37.865 38.138 287.820 33.450
No instrumentation past 39.739 0.014 7.316 39.094 39.712 39.994 290.196 34.889
Deactivated probe current 38.589 0.012 6.330 37.908 38.147 38.397 287.963 33.442
Deactivated probe past 39.874 0.019 9.728 39.145 39.434 39.686 5140.580 34.739
No logging current 38.373 0.013 6.432 37.723 37.942 38.177 321.588 33.269
No logging past 39.829 0.017 8.459 39.395 39.746 40.018 2906.126 34.921
Zipkin current 38.447 0.013 6.455 37.743 37.932 38.147 281.887 33.575
Zipkin past 39.749 0.014 7.067 39.168 39.418 39.668 504.603 34.637
Prometheus current 38.764 0.013 6.546 38.070 38.267 38.485 312.301 33.924
Prometheus past 39.596 0.014 7.169 39.005 39.287 39.547 704.781 34.390