A Mozilla mérnökei különböző optimalizálásokat vezettek be a Firefox Ion komponensében, amely felgyorsította a fordítási folyamatot. Az egyik jelentős fejlesztés a regiszter-allokátor módosítása volt, amely most hatékonyabb vektormódszert használ. A blogbejegyzés szerint: „Ezekkel a változtatásokkal az Ion fordító most már kevesebb mint 3,9 másodperc alatt képes lefordítani az ONNX Wasm modult, ami több mint 75-ször gyorsabb, mint korábban.”. Ezek az optimalizálások azt eredményezik, hogy a Photoshop, Google Earth és más Wasm-alapú webalkalmazások általánosan gyorsabban töltődnek be a Firefoxban. Bár az „akár 75-ször gyorsabb” teljesítménynövekedés csak bizonyos funkciókra érvényes, a fejlesztések jelentős javulást hoznak a komplex alkalmazások számára. Például a Photoshop online demóverziója által használt nagy Wasm modul fordítási ideje 4 percről 14 másodpercre csökkent, míg a JetStream 2 tesztkészletben található HashSet modulnál a fordítási idő 2,8 másodpercről 0,2 másodpercre csökkent.
A probléma háttere
Szeptemberben a Mozilla gépi tanulási mérnökei hibajelentést kaptak, miszerint a Firefox túlzott memória- és CPU-erőforrásokat használt a Microsoft ONNX Runtime (gépi tanulási könyvtár) futtatásakor, amely WebAssembly-be (Wasm) lett fordítva. A Firefox SpiderMonkey motorja két különböző fordítót alkalmaz a WebAssembly kódhoz:
- Baseline fordító: gyors gépi kódot generál, így a Wasm modulok szinte azonnal futtathatók letöltés után.
- Ion fordító: fejlettebb fordító, amely gyorsabb kódot eredményez, de a fordítás sokkal hosszabb időt és jelentős erőforrást igényel.
Az ONNX modulnál az Ion fordító backendje túlzott időt és memóriát használt. Egy Linux x64 rendszeren például a fordítás több mint 5 percig tartott és 4 GB memóriát igényelt – ez háttérszálakon futtatva is túl nagy terhelést jelentett.
Az Ion backend optimalizálása
A vizsgálatok során kiderült, hogy az ONNX Wasm modul rendkívül nagy méretű funkciókat tartalmazott. Az egyik legnagyobb funkció vezérlési gráfjában például 132856 alapelemet találtak a fejlesztők, ami komoly teljesítményproblémákat okozott. A fő javítás az élettartományok (live ranges) tárolási módjának megváltoztatása volt: az alkalmazott láncolt listát vektorra cserélték, amely opcionálisan a kezdő pozíció szerint csökkenően rendezett. Ezenkívül az élettartományok kezdeti rendezésére is ügyeltek, így a későbbiekben könnyebb volt ezeket a elemeket kezelni. Például, ha egy értéket egy regiszterben tárolnak, majd később áthelyezzük a memóriába, két élettartomány jön létre a virtuális regiszterhez. A javítás lehetővé tette, hogy a mozgatási utasítások feldolgozása lineáris időigénnyel történjen, szemben a korábbi kvadratikus időigényű folyamatokkal. A módosításokkal az ONNX Wasm modul fordítási ideje 5 percről 3,9 másodpercre csökkent Linux x64 rendszeren – ez több mint 75-szörös gyorsulást jelent.
Új Wasm fordítási pipeline
A Mozilla folytatja a WebAssembly-teljesítmény további fejlesztését a Firefoxban, így a jövőben még több optimalizálás várható. Ezek az előrelépések nemcsak a teljesítményt növelik, hanem javítják a bonyolult webes alkalmazások használhatóságát is, amelyek további kényelmi szempontokat kínálnak a felhasználók számára. Noha ezek az optimalizálások jelentős előrelépést jelentenek, egy 14 másodperces fordítási idő (még gyors gépeken is) nem ideális felhasználói élmény. A Wasm csapat ezért új fordítási csővezetéken (pipeline) dolgozik, amely lehetővé teszi az egyes Wasm funkciók fordítását fokozatosan, ahogy „bemelegednek” (warm up) a futtatás során. Ez a megoldás a jövőben lehetőséget adhat olyan funkciókra is, mint a spekulatív inlining, beillesztés. A fejlesztések hamarosan elérhetővé válnak a Firefox böngészőben, amelyek tovább javítják a WebAssembly modulok teljesítményét.
(kép)
Hozzászólások
Lássuk!!
Beküldte Mano1980 -
Értékelés:
Lássuk!!
Lássuk!!
Beküldte kami911 -
Értékelés: