Skip to content
Faculty of Mathematics

Academic year 2026/27

1 meeting, newest first

Upcoming

Petak, 16. oktobar 2026. u 12 časova, Studentski trg, sala će biti naknadno objavljena

Strahinja Stanojević
Metodologije za ponovljiva merenja vremena izvršavanja kratkotrajnih CI/CD programa
(odbrana naučne zasnovanosti teme doktorske disertacije)

Abstract (in Serbian)

Evaluacija performansi softvera zahteva stabilna i ponovljiva merenja vremena izvršavanja kako bi se pouzdano poredili programi i njihove verzije, kao i algoritmi. Postizanje takvih merenja predstavlja jedan od važnih, ali i veoma zahtevnih problema u evaluaciji performansi, jer na vreme izvršavanja istovremeno utiču brojni faktori koji nisu direktno povezani sa samim programom. Sa druge strane, stabilna i ponovljiva merenja su od suštinskog značaja za donošenje pouzdanih zaključaka o performansama, jer velika varijabilnost može prikriti stvarna ubrzanja ili usporenja programa. Ovaj problem je posebno izražen kod kratkotrajnih programa karakterističnih za procese kontinuirane integracije i isporuke (eng. CI/CD), kod kojih sistemski šum može imati značajan relativni uticaj na izmereno vreme izvršavanja. Na varijabilnost merenja utiču brojni hardverski i sistemski faktori, kao i podešavanja okruženja za izvršavanje, uključujući dinamičku promenu frekvencije procesora, istovremeno korišćenje više logičkih jezgara jednog fizičkog jezgra, raspoređivanje procesa, NUMA arhitekturu, prioritet procesa i upravljanje hip memorijom.

Ova disertacija se bavi razvojem metodologije za stabilna i ponovljiva merenja vremena izvršavanja kratkotrajnih programa. Definisane su dve preporučene konfiguracije sistema: opšta konfiguracija namenjena postizanju visoke stabilnosti merenja i konfiguracija za programe koji se izvršavaju u više niti, koja dodatno čuva i njihovo paralelno izvršavanje. Pored njih, razmatrana je i podrazumevana konfiguracija sistema, pri čemu su ove tri konfiguracije korišćene kao osnovne konfiguracije i međusobno upoređene. Za svaku od osnovnih konfiguracija definisan je veći broj modifikacija, dobijenih promenom pojedinačnih podešavanja i njihovih odabranih kombinacija, kako bi se kvantifikovao njihov pojedinačni i zajednički uticaj na stabilnost merenja i vreme izvršavanja programa. Konfiguracije i njihove modifikacije evaluirane su nad programima napisanim u jezicima Java, Scala, C i C++, u pet različitih okruženja, uključujući neopterećene i opterećene UMA i NUMA servere i laptop. Java i Scala programi kompilirani su unapred korišćenjem kompilatora GraalVM Native Image. Dodatno su analizirani broj početnih iteracija koje je potrebno odbaciti pre prikupljanja merenja i broj iteracija tokom kojih se merenja prikupljaju, kako bi se utvrdio praktični minimalni broj ponavljanja potreban za dobijanje dovoljno stabilnih rezultata.

Rezultati pokazuju da opšta preporučena konfiguracija obezbeđuje visoko stabilna merenja u svim razmatranim okruženjima, sa prosečnom vrednošću relativne apsolutne devijacije medijane (eng. Relative Median Absolute Deviation, RMAD) manjom od 0.55% i maksimalnom vrednošću manjom od 1%. Konfiguracija namenjena programima koji se izvršavaju u više niti postiže prosečnu vrednost metrike RMAD manju od 2% i maksimalnu vrednost manju od 3% na neopterećenim serverima i laptopu, dok se na opterećenim serverima ne preporučuje. Podrazumevana konfiguracija pokazuje znatno veću varijabilnost, naročito u uslovima pozadinskog opterećenja sistema. Analizom modifikacija konfiguracija kvantifikovani su uticaji pojedinačnih podešavanja i njihovih kombinacija, kao i odnos između stabilnosti merenja i vremena izvršavanja. Pokazano je i da je 30 iteracija tokom kojih se prikupljaju merenja u proseku dovoljno za postizanje ciljanog nivoa stabilnosti, iako pojedini programi i okruženja zahtevaju veći broj ponavljanja. Na osnovu dobijenih rezultata formulisane su praktične preporuke za izbor i podešavanje konfiguracije sistema, a razvijen je i prateći softver za automatizovano podešavanje sistema i izvršavanje referentnih programa.

Abstract (in English)

Software performance evaluation requires stable and reproducible execution-time measurements to enable reliable comparisons of programs, program versions, and algorithms. Obtaining such measurements is an important but highly challenging problem in performance evaluation, because execution time can be affected simultaneously by numerous factors that are not directly related to the program itself. At the same time, stable and reproducible measurements are essential for drawing reliable conclusions about performance, since high variability can obscure actual program speedups or slowdowns. This problem is particularly pronounced for short-running programs commonly used in continuous integration and continuous delivery (CI/CD) processes, where system noise can have a substantial relative impact on measured execution time. Measurement variability is influenced by numerous hardware- and system-level factors, as well as runtime-environment settings, including dynamic CPU frequency scaling, the simultaneous use of multiple logical cores sharing the same physical core, process scheduling, NUMA architecture, process priority, and heap management.

This dissertation focuses on developing a methodology for obtaining stable and reproducible execution-time measurements of short-running programs. Two recommended system configurations are defined: a general-purpose configuration aimed at achieving high measurement stability, and a configuration for multi-threaded programs that preserves their parallel execution. A default system configuration is also considered, with these three configurations serving as the baseline configurations and being compared directly. For each baseline configuration, a large number of variants are defined by modifying individual settings and selected combinations of settings in order to quantify their individual and combined effects on measurement stability and program execution time. The configurations and their variants are evaluated using programs written in Java, Scala, C, and C++ across five different execution environments, including idle and busy UMA and NUMA servers and a laptop. Java and Scala programs are compiled ahead of time using the GraalVM Native Image compiler. In addition, both the number of initial iterations that should be discarded before measurements are collected and the number of iterations used for measurement are analyzed in order to determine a practical minimum number of repetitions required to obtain sufficiently stable results.

The results show that the general-purpose recommended configuration provides highly stable measurements across all evaluated environments, with an average Relative Median Absolute Deviation (RMAD) below 0.55% and a maximum RMAD below 1%. The configuration intended for multi-threaded programs achieves an average RMAD below 2% and a maximum RMAD below 3% on idle servers and the laptop, while it is not recommended for use on busy servers. The default configuration exhibits substantially higher variability, particularly in the presence of background system load. By analyzing the configuration variants, the effects of individual settings and their combinations are quantified, together with the relationship between measurement stability and execution time. The results also show that 30 measurement iterations are sufficient on average to achieve the target stability level, although some programs and execution environments require a larger number of repetitions. Based on these results, practical recommendations are formulated for selecting and configuring the system, and a supporting software tool is developed to automate system configuration and benchmark execution.

All years