75-ször gyorsabb lesz a Firefox böngésző

kami911 képe

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:

  1. Baseline fordító: gyors gépi kódot generál, így a Wasm modulok szinte azonnal futtathatók letöltés után.
  2. 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.

A pókmajom, ahogyan várakozik a további fejlesztésekre a Belize Állatketben

Ú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)

A pókmajom, ahogyan várakozik a további fejlesztésekre a Belize Állatketben
A pókmajom, ahogyan várakozik a további fejlesztésekre a Belize Állatketben (kép: Wikipédia)

Hozzászólások

kami911 képe

Lássuk!!

Értékelés: 

0
Még nincs értékelve

#1 ahogy néztem a 132-es verzióban benne lesz, de a 133-asban is lesznek még sebesség növelő javítások.