Haiku získá podporu hardwarové virtualizace
Google Summer of Code je každoroční program, v němž Google uděluje stipendia programátorům, kteří se v období května až srpna úspěšně přispejí do open-source projektů. Má za sebou už dvacet ročníků a ač byl původně určen zejména pro studenty a čerstvé absolventy, od roku 2022 se ho může účastnit každý. V letošním roce bylo k realizaci schváleno 1168 projektů od 194 organizací a mezi nimi byl i projekt operačního systému Haiku a jedním z realizovaných projektů bylo zavedení podpory hardwarové virtualizace v QEMU.
Doposud bylo v Haiku možné x86 stroje pouze emulovat, což je vcelku pochopitelně několikanásobně pomalejší než je virtualizovat. Vývojář Daniel Martin (dalme) se proto v rámci GSoC projektu pustil do portace hypervizoru NVMM z DragonFlyBSD a jak se lze dočíst z jeho závěrečného reportu, ačkoliv se mu nepovedlo úplně vše, dobral se k funkční virtualizaci na procesorech od Intelu s instrukcemi VT-x (prakticky cokoliv od pozdních Pentií 4 výše).
Celý proces vyžadoval doplnění hlavičkových souborů, které jsou v BSD, ale nejsou v Haiku; dále úpravy plynoucí z toho že NVMM je v C, kdežto Haiku převážně v C++, portaci libnvmm knihovny a také virtualizačních backendů SVM a VMX. První jmenovaný backend je určený pro procesory AMD a není funkční, portováno bylo jen holé minimum, nezbytné k překladu celého hypervizoru. Druhý backend, tedy VMX, je určen pro procesory od Intelu a práce na něm zabrala většinu času, který byl projektu vyhrazen.
Prvotní otestování proběhlo pomocí jednoduchého virtuálního stroje calc-vm, který je přímo součástí testů funkčnosti NVMM. Tento stroj nedělá nic jiného, než že inicializuje virtualizovaný procesor, naplní registry EAX a EBX parametry z příkazové řádky, provede instrukce ADD EBX, EAX a HLT a vypíše obsah registru EBX.
Zdroj: Haiku
Test proběhl úspěšně, dalším krokem tedy bylo upravit samotné QEMU tak, aby na Haiku bylo schopné NVMM použít a pak už se testovaly reálné operační systémy. Zde se narazilo na řadu problémů, z nichž některé se nepodařilo v rámci projektu vyřešit a zůstávají tak pro další vývojáře:
- Některé systémy ve virtualizaci bezdůvodně padají již v raných fázích startu.
- Nefunguje SMP.
- Virtualizace se chová jinak na reálném hardware a jinak ve vnořené virtualizaci. Na reálném hardware by měla být významně rychlejší, než jde-li o virtualizaci několikanásobnou, ale v praxi tomu tak ne vždy je.
Veškerý kód je k dispozici na GitHubu, jeho části byly již začleněny přímo do kódu Haiku a vývojář má v plánu věnovat se mu i po konci GSoC. Ačkoliv bude mít výsledný produkt přínos i sám o sobě, je mimo jiné i zajímavou ukázkou toho, co vše je schopen realizovat jednotlivec v relativně krátkém období.