title: Bayesian inference for inverse software performance problems
Creators: name: Fischer, Florian
Publisher: name: TU Wien
Year: 2023
Subjects: subject: bayesian inference
subject: inverse performance problems
subject: software performance
subject: probabilistic programming
subject: probabilistic modelling
subject: performance modelling
subject: root cause analysis

description: Performance, Laufzeiten und Antwortzeiten sind stetig verbesserbare Aspekte von komplexen Computersystemen, die nicht nur theoretisch, sondern auch praktisch große Relevanz zeigen. Durch Methoden wie Tracking, Tracing und Messen von Antwortzeiten lassen sich Probleme der Performance durchaus rasch bis zur auslösenden Komponente verfolgen, jedoch sind genau diese Methoden in der Praxis oft nicht anwendbar, da die zusätzliche Rechenbelastung oder die zusätzlichen Kosten für das Speichern der gesammelten Daten nicht in jedem Szenario tragbar sind. In solchen Fällen müssen Messungen oft auf das Überwachen der Antwortzeiten des gesamten Systems beschränkt werden, was die Suche nach der auslösenden Komponente im Falle eines Performance-Einbruchs deutlich erschwert.Eine mögliche Hilfestellung für die oben genannte Suche könnte Inferenz bieten. Klassische Inferenz, wie durch “Machine Learning”, benötigt jedoch große Mengen von Daten im Training der Modelle um verlässliche Ergebnisse zu liefern, was wiederum im oben genannten Szenario nicht tragbar ist. Eine mögliche Lösung dafür scheint Bayes'sche Inferenz zu sein, die es erlaubt, anhand von geringen Daten in Kombination mit bestehendem Wissen und Annahmen über das modellierte System, verlässliche Inferenz zu betreiben. Der Bayes'schen Inferenz liegt Bayes' Theorem zugrunde, was die Inferenz zu einer probabilistischen Inferenz macht. Um also ein Problem mit Bayes'scher Inferenz zu lösen, muss es erst probabilistisch modelliert werden.In dieser Diplomarbeit gehen wir näher auf eine Möglichkeit des probabilistischen Modellierens von Computersystemen und deren Performance ein und evaluieren daraufhin Bayes'sche Inferenz an solchen Modellen, um einer möglichen Verwendung als Unterstützung in der Suche nach Komponenten nachzugehen, die beobachtete Performance-Probleme ausgelöst haben könnten. Als erster Schritt wird ein Prozess etabliert, um den Sourcecode von Systemen in einen Graphen zu übertragen, der die Performance des Systems und dessen Komponenten widerspiegelt. Dieser Graph wird daraufhin in ein probabilistisches Modell übersetzt, auf dem die Bayes'sche Inferenz durchgeführt werden kann. Im zweiten Schritt wird ein Framework beschrieben, das Vorlagen mit vordefiniertem Verhalten von häufig vorkommenden Komponenten bietet, um in der Modellierung zu unterstützen, und in weiterer Folge auch die Inferenz mit den resultierenden Modellen in der Programmiersprache python erlaubt. Der Modellierungsprozess sowie die Inferenz über das Framework werden daraufhin an drei simulierten Testsystemen und generierten Daten evaluiert, die repräsentativ für etwaige Strukturen von realen Systemen gewählt wurden. Weiters wird eine Case-Study an einem echten System durchgeführt, für welches im lokalen Netzwerk über Benchmarking, gemeinsam mit manuellem Auslösen von Performance-Last, Daten gesammelt wurden.Die Ergebnisse der Evaluierung legen die, in gewissen Fällen, potenzielle Anwendbarkeit von Bayes'scher Inferenz für inverse Software Performance Probleme dar, zeigen jedoch auch die Empfindlichkeit der Inferenz bezüglich der Definition des Modells und der Konfiguration der Parameter auf. Desweiteren zeigt die Evaluierung eine Einschränkung dieser Art von Inferenz, da viele Systeme durch zu ähnliches Performance-Verhalten der Komponenten nicht mehr für die Inferenz der Performance geeignet sein können. Softwaresysteme und deren Performance können jedoch mit Hilfe des hier etablierten Graphen gut von Sourcecode zu probabilistischen Modellen übersetzt werden, was die Möglichkeit eröffnet diesen Prozess zu automatisieren. Für eine verlässliche Inferenz mit diesen probabilistischen Modellen wird jedoch Expertise zum tatsächlichen sowie möglichen Systemverhalten und sorgfältige Konfiguration der Inferenzparameter benötigt.
description: Performance problems of complex computer systems and the resolution of such are an everlasting topic of improvement in theory as well as in practice. While tracking, tracing and measuring response times all throughout the system certainly are useful practices to track down causes of performance issues quickly, once occurred, they are often not feasible in practice due to the sometimes high overhead and cost introduced by such measures and the data gathered by them. In such cases it might only be feasible to monitor the overall performance of the system and then perform thorough analysis and in-depth search for the cause once an issue is observed.In this thesis we explore the possible support of such analysis through inference. Classical inference (e.g. Machine Learning) though, relies on large amounts of data in the training process to produce reliable results, which again might not be feasible in the above-mentioned setting. A possible relief for this issue seems to be Bayesian inference, which allows for inference on little observed data by incorporating prior knowledge and assumptions on the subject of inference into the inference itself. Bayesian inference is based on Bayes' theorem and is, as such, a probabilistic method of inference. Thus, it poses the need of modelling the problem at hand probabilistically.This thesis will look into the probabilistic modelling of computer systems and their performance and then evaluate Bayesian inference on such models to explore a possible support in solving inverse performance problems. We will do so by introducing a workflow to transform a system's source code to a graph reflecting the system's performance, which can then be translated into a probabilistic model. Further, a framework is proposed that provides templates with preconfigured behaviour for common system components, with which such models can then be easily implemented and inference be performed upon in python. The modelling workflow, as well as the use of inference through the proposed framework is then evaluated on three artificial example systems and generated data, chosen to reflect different possible real-life structures, and one case study of a real-life system that was benchmarked and manually brought to heavy-load behaviour.The results of the evaluation show a potential applicability of Bayesian inference for inverse software performance problems in some cases, although bringing attention to firstly, the sensibility of the inference regarding the chosen parameters and the defined model and secondly, the fact that many systems might not be fit for this type of inference. Using the proposed graph, we are able to easily translate software systems and their performance from source code to probabilistic model, which also opens up the possibility of automating the modelling process for inverse performance problems. Though for reliable inference using these models, expertise on the system's actual as well as possible performance behaviour and careful configuration of the inference itself is needed.