Machine Learning aided Linux Kernel Code Analysis
Krogerus, Heikki (2024)
Krogerus, Heikki
2024
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2024060621841
https://urn.fi/URN:NBN:fi:amk-2024060621841
Tiivistelmä
Jokainen koodimuutos, jota ehdotetaan Linux-käyttöjärjestelmäytimeen, testataan monilla eri
automaattisilla testeillä. Tästä huolimatta jokainen muutos on vaatinut ihmisten tekemän
katselmoinnin. Johtuen rajallisesta määrästä ihmisiä, jotka pystyvät katselmoimaan Linux koodia,
monia virheitä on jäänyt huomaamatta.
Automaattisten testien ongelmana on ollut niiden keskittyminen staattiseen analyysiin, jolla
ongelmia ei pystytä löytämään tehokkaasti. Pieni määrä ihmisiä, jotka ovat katselmoineet
Linux-käyttöjärjestelmäytimen koodia on seurausta tehtävän vaativuudesta. Linuxin koodin
katselmointi ei vaadi ainoastaan kykyä ymmärtää Linux-käyttöjärjestelmäytimen rakennetta,
vaan myös laitestoa tai teknologiaa johon koodimuutoksella vaikutettaan.
Jotta nähtäisiin kuinka moderneja syväoppimistekniikoita ja malleja voitaisiin hyödyntää tilanteen
parantamiseksi luotiin joukko toisistaan periytyviä kehitysaskeleita. Tavoitteena ei ollut
ainoastaan helpottaa ongelmaa koodin katselmoinnissa, vaan nähdä miten syväoppimista
voidaan Linux kehityksessä hyödyntää yleisesti.
Ensimmäisenä tavoitteena oli luoda malli, jolla voitiin osoittaa syväoppimisen tarjoavan
mahdollisuuksia Linux kehityksessä. Ensimmäisen tavoitteen mallin tuli kyetä löytämään
perusongelmia ehdotetuista koodimuutoksista, mutta tähän mallia ei ollut mahdollista kouluttaa
johtuen huonolaatuisesta opetusdatasta. Oletuksena oli ollut, että jos koodinkatselmointi johti
uuteen versioon koodimuutoksesta, koodimuutoksen laatu paranee. Tämä oletus ei täysin
vastannut odotuksia.
Tästä huolimatta, malli, joka kehitettiin tätä tehtävää varten, koulutettiin ensin ymmärtämään
Linuxin lähdekoodia yleisellä tasolla, ja malli selkeästi kykeni.
Kouluttamalla malli, joka ymmärtää Linuxin lähdekoodia osoittaa, että syväoppimista voidaan
hyödyntää Linuxin kehitystyössä. Sama malli voidaan jatkokouluttaa moniin eri tehtäviin.
Epäonnistuminen kouluttaa malli löytämään virheitä koodimuutoksista ei johtunut mallin
arkkitehtuurista, vaan opetusdatan heikosta laadusta. Several automated tests are used to find issues in every code change proposal for the Linux
kernel. Despite automated testing, each change needs a review that is done by humans. Due to
the small number of dedicated reviewers, a lot of issues have goon undetected.
The problem with automated testing has been that it relies on static analysis which does not
detect issues very efficiently. The few reviewers are a result of not just anyone being able to
review the new code. The reviewer does not only need to understand the architecture of Linux
kernel itself, but also the hardware or technology that the proposed change was targeted for.
To see if modern deep learning techniques could be used to mitigate the problem, a set of steps,
each progressing from the previous one, were designed. The focus was not only on the
mitigation of the problem, but in the utilisation of deep learning to aid Linux kernel development
in general. The first step in the plan was used as the Proof-of-Concept.
The goal of the first step in the plan was to construct a model that can detect rudimentary quality
issues in the proposed code changes, but that could not be achieved due to the problems with
the learning data. The code reviews from the past were used as the learning data. The
assumption was that if a code change was revised, its overall quality improves. That assumption
turned out not to be true.
Nevertheless, the deep learning model that was produced was first taught to understand Linux
kernel source code in unsupervised fashion, and that the model could obviously learn.
By producing a Large Language Model that understands Linux kernel source code at the general
level shows that deep learning can be used to aid Linux kernel development. The model can be
fine-tuned to perform several different tasks. The failure to fine-tune the model to detect issues
in the code changes were not caused by the model design or architecture. It was caused by the
poor-quality learning data.
automaattisilla testeillä. Tästä huolimatta jokainen muutos on vaatinut ihmisten tekemän
katselmoinnin. Johtuen rajallisesta määrästä ihmisiä, jotka pystyvät katselmoimaan Linux koodia,
monia virheitä on jäänyt huomaamatta.
Automaattisten testien ongelmana on ollut niiden keskittyminen staattiseen analyysiin, jolla
ongelmia ei pystytä löytämään tehokkaasti. Pieni määrä ihmisiä, jotka ovat katselmoineet
Linux-käyttöjärjestelmäytimen koodia on seurausta tehtävän vaativuudesta. Linuxin koodin
katselmointi ei vaadi ainoastaan kykyä ymmärtää Linux-käyttöjärjestelmäytimen rakennetta,
vaan myös laitestoa tai teknologiaa johon koodimuutoksella vaikutettaan.
Jotta nähtäisiin kuinka moderneja syväoppimistekniikoita ja malleja voitaisiin hyödyntää tilanteen
parantamiseksi luotiin joukko toisistaan periytyviä kehitysaskeleita. Tavoitteena ei ollut
ainoastaan helpottaa ongelmaa koodin katselmoinnissa, vaan nähdä miten syväoppimista
voidaan Linux kehityksessä hyödyntää yleisesti.
Ensimmäisenä tavoitteena oli luoda malli, jolla voitiin osoittaa syväoppimisen tarjoavan
mahdollisuuksia Linux kehityksessä. Ensimmäisen tavoitteen mallin tuli kyetä löytämään
perusongelmia ehdotetuista koodimuutoksista, mutta tähän mallia ei ollut mahdollista kouluttaa
johtuen huonolaatuisesta opetusdatasta. Oletuksena oli ollut, että jos koodinkatselmointi johti
uuteen versioon koodimuutoksesta, koodimuutoksen laatu paranee. Tämä oletus ei täysin
vastannut odotuksia.
Tästä huolimatta, malli, joka kehitettiin tätä tehtävää varten, koulutettiin ensin ymmärtämään
Linuxin lähdekoodia yleisellä tasolla, ja malli selkeästi kykeni.
Kouluttamalla malli, joka ymmärtää Linuxin lähdekoodia osoittaa, että syväoppimista voidaan
hyödyntää Linuxin kehitystyössä. Sama malli voidaan jatkokouluttaa moniin eri tehtäviin.
Epäonnistuminen kouluttaa malli löytämään virheitä koodimuutoksista ei johtunut mallin
arkkitehtuurista, vaan opetusdatan heikosta laadusta.
kernel. Despite automated testing, each change needs a review that is done by humans. Due to
the small number of dedicated reviewers, a lot of issues have goon undetected.
The problem with automated testing has been that it relies on static analysis which does not
detect issues very efficiently. The few reviewers are a result of not just anyone being able to
review the new code. The reviewer does not only need to understand the architecture of Linux
kernel itself, but also the hardware or technology that the proposed change was targeted for.
To see if modern deep learning techniques could be used to mitigate the problem, a set of steps,
each progressing from the previous one, were designed. The focus was not only on the
mitigation of the problem, but in the utilisation of deep learning to aid Linux kernel development
in general. The first step in the plan was used as the Proof-of-Concept.
The goal of the first step in the plan was to construct a model that can detect rudimentary quality
issues in the proposed code changes, but that could not be achieved due to the problems with
the learning data. The code reviews from the past were used as the learning data. The
assumption was that if a code change was revised, its overall quality improves. That assumption
turned out not to be true.
Nevertheless, the deep learning model that was produced was first taught to understand Linux
kernel source code in unsupervised fashion, and that the model could obviously learn.
By producing a Large Language Model that understands Linux kernel source code at the general
level shows that deep learning can be used to aid Linux kernel development. The model can be
fine-tuned to perform several different tasks. The failure to fine-tune the model to detect issues
in the code changes were not caused by the model design or architecture. It was caused by the
poor-quality learning data.