Andrej Pečimúth, absolvent magisterského programu Informatika - Softwarové systémy na Matfyzu, si téma pro svou diplomovou práci vybral během stáže ve firmě Oracle Labs. „Pre študentov môže byť moja práca inšpiráciou, že industriálna spolupráca funguje a ja som sa pri nej veľa naučil,“ říká Andrej, jehož poznatky teď využijí vývojáři pracující na překladači pro Javu.
Můžete stručně představit svou práci?
Projekt vychádza zo spolupráce Oracle Labs a Katedry distribuovaných a spolehlivých systémů (D3S). Oracle Labs vyvíja GraalVM, čo je behové prostredie pre Javu s pokročilejším just-in-time (JIT) prekladačom pre Javu. To znamená, že dokáže aplikovať lepšie optimalizácie a teda spustená Java aplikácia dosahuje vyšší výkon. D3S pomáha Oracle Labs s vyhodnocovaním kvality tohoto prekladača – teda rýchlosti preloženého kódu. Každá malá zmena v zdrojovom kóde prekladača môže ovplyvniť výkon bežiacej aplikácie, a vývojári chcú zaistiť, aby výkon prekladača časom neklesal.
Niektoré zmeny kódu prekladača však môžu spôsobiť nechcený pokles výkonu aplikácie. Cieľom diplomovej práce bolo pomôcť vývojárom prekladača riešiť túto situáciu. Zmena výkonu môže súvisieť napríklad s transformáciami (optimalizáciami), ktoré prekladač aplikuje počas kompilácie. Nechcený dôsledok zmeny môže byť, že prekladač prestane vykonávať prospešnú optimalizáciu a teda výkon spúšťanej aplikácie klesne.
V rámci diplomovej práce sme pridali do prekladača možnosť zaznamenať všetky takéto transformácie, ktoré pri kompilácii vykonáva. Následne sme vyrobili nástroj, ktorý dokáže medzi dvomi verziami prekladača ukázať najdôležitejšie rozdiely ako jednotlivé verzie optimalizujú konkrétnu aplikáciu. Tento nástroj môže vývojárom ušetriť čas a zároveň sa nám podarilo vyriešiť niekoľko problémov, na ktoré predtým neexistovali vhodné prostriedky.
Co vás inspirovalo k tomu zaměřit se právě na toto téma?
Oslovila ma možnosť industriálnej spolupráce, kde som pracoval na projekte v rámci stáže. Veľká výhoda bola, že na strane fakulty projekt viedol Petr Tůma a ďalšími spolupracovníkmi boli Lubomír Bulej a Vojtěch Horký z D3S, ktorí sú odborníci na výkon dynamických prostredí. Na strane Oracle Labs som mal možnosť spolupracovať zase s expertmi na JIT prekladače ako David Leopoldseder, ktorý bol externým vedúcim práce.
S konkrétnou témou a náčrtom riešenia samozrejme prišli vedúci. Pred tým, ako som začal, som mal len základný prehľad o tom, ako fungujú takéto prostredia, a nevedel som, že niekto rieši takýto problém. Preto si myslím, že pri hľadaní témy je vždy dobré začať oslovením relevantných ľudí, ktorí majú zásobu vhodných tém.
Jaký konkrétní přínos nebo využití má vaše práce?
Využitie je primárne pri práci vývojárov prekladača. Je to pre nich ďalší nástroj, ktorý môže uľahčiť riešenie niektorých problémov. Časť na zaznamenávanie transformácií v prekladači má využitie aj v ďalších projektoch, napríklad pri automatickom náhodnom testovaní. Pred mojou prácou informoval prekladač o vykonaných optimalizáciách rôznymi spôsobmi. V rámci diplomovej práce sme k tomu vyrobili nové rozhranie a všetky predchádzajúce spôsoby zjednotili. Keď vývojár pridá do prekladača novú optimalizáciu, použije toto rozhranie, aby bola zaznamenaná.
S jakými technologiemi a metodami jste pracoval?
Prekladač je sám napísany v Jave, takže som primárne programoval v Jave. Nástroj na porovnávanie je súčasťou rovnakého repozitára ako prekladač, teda je tiež v Jave. Na konci práce som vyrobil Dockerfile, aby si nástroj ľahšie dokázali vyskúšať aj ľudia, ktorí nie sú vývojári GraalVM.
Pri písaní textu mi pomoholi Overleaf a Grammarly – na obe služby poskytuje MFF predplatné.
Co bylo během psaní nejtěžší? Je něco, co byste zpětně udělal jinak?
Náročné bolo, že na začiatku projektu bol iba problém a konkrétne riešenie nebolo jasné. Nestačilo teda len postupne implementovať nejaký program, ale veľakrát sme museli prototypovať a až na základe toho sa ponúkli ďalšie možnosti. Medzitým sa objavovali nové problémy, ako napríklad že záznamy o kompiláciach v jednom behu aplikácie mali desiatky GB a spracovať ich všetky trvalo príliš dlho. Nebolo teda vôbec isté, či to bude vôbec fungovať v nejakej reálnej situácii a teda či výsledok bude užitočný.
Jakým způsobem jste ověřoval výsledky své práce?
Prácu sme overovali tak, že sme sa ňou pokúsili vyriešiť vybrané skutočné problémy. To znamená, že sme v issue trackeri prekladača našli niekoľko nevysvetlených regresí výkonu, ktoré väčšinou už boli otvorené dlhšiu dobu. Riešenie týchto problémov je obzvlášť bez vhodných nástrojov často zdĺhavé, pretože prekladač kompiluje veľké množstvo kódu a v ňom robí veľké množstvo transformácií, a nie je jasné ktoré z nich a ako ovplyvňujú výkon. Pomocou nášho nástroja sa nám podarilo nájsť príčiny viacerých regresií. Ďalším krokom bolo dať vývojárom vedieť o týchto príčinách a na základe našej analýzy mohli problém opraviť.
Co považujete za nejdůležitější výsledek nebo závěr své práce?
Hlavným záverom je, že určité problémy v JIT prekladačoch sa dajú riešiť pomocou zaznamenávania a porovnávania vykonaných transformácií, k čomu v práci popisujeme konkrétny návod. Ďalším výsledkom je samotný softvér, ktorý je po roku od odovzdania stále súčasťou repozitára s GraalVM a občas je užitočný pre vývojárov.
Z práce sme napísali aj odbornú publikáciu, vydanú v zborníku konferencie Managed Programming Languages and Runtimes (MPLR) 2023, ktorá sa konala v Cascais, Portugalsku.
Máte pocit, že vaše práce může být inspirací pro další studenty nebo odborníky v dané oblasti?
Pre študentov môže byť inšpiráciou, že industriálna spolupráca funguje a ja som sa pri nej veľa naučil, takže ju každému odporúčam. Pre odborníkov by mohla byť inšpirujúca tiež – na konferencii tento prístup zaujal viacerých ľudí.
Jaké jsou vaše plány do budoucna?
Momentálne pokračujem v doktorskom štúdiu, naďalej na D3S a v spolupráci s Oracle Labs. Téma mojej dizertácie čiastočne nadväzuje na diplomovú prácu, ale venujem sa aj možnostiam, ktoré by mohli zlepšiť výkonnostné metriky prekladača celkovo a nielen keď sa objaví výkonnostný problém.
Odkazy: