RyuJIT
379

Tegenwoordig draait alles op 64-bit.
Terwijl dat niet altijd beter of sneller hoeft te zijn ten opzichte van 32 bit
Een heleboel programma’s werken beter op 32-bit om allerlei redenen.
Een goed voorbeeld is de 64-bit JIT compiler van Visual Studio. Die compiler is heel goed in het sneller maken van je code/programma maar is van zichzelf niet snel.

Uh … 64-bits?
Het lijkt af en toe wel alsof de 32-bit x86 computer altijd heeft bestaan. Qua architectuur is het fantastisch, maar het heeft 1 probleem: een 32-bit pointer die maar 4GB RAM aankan. 64-bit computers, met grotere – bredere – pointers kunnen bijna ongelimiteerde hoeveelheden aan. Omdat RAM oorspronkelijk duur was, werden eigenlijk alleen servers uitgerust met 64-bits architectuur. Tegenwoordig komt bijna alles met een 64-bits architectuur. Zelfs smartphones en dat terwijl die vaak nog minder als een 1 GB RAM hebben.

De oorspronkelijke 64-bit JIT was ontworpen om efficiënte code te produceren gedurende de lange levensloop van een server proces. Dit in tegenstelling tot de x86- JIT die ontworpen is om snel code te produceren zodat programma’s sneller starten. De tijd nemen om efficiënt te compileren is een logische keuze als het om server code gaat, maar “server code” is tegenwoordig ook een webapp die snel moet starten. De huidige .NET 64-bit compiler is niet altijd het snelst als het gaat om compileren wat weer betekent dat je afhankelijk bent van technologieën als NGEN of background JIT om snelle opstart mogelijk te maken

De redding
RyuJIT. Dit is een JIT compiler (gemaakt door het .NET Code Generation team) die twee keer zo snel is en dat betekent dat apps 30% sneller opstarten. (De tijd die nodig is voor de JIT Compiler is maar 1 component van de opstart tijd, dus je app start niet twee keer zo snel. Daarnaast wordt er nog steeds die efficiënte server code geproduceerd).
Onderstaande grafiek vergelijkt de compileer tijd (“throughput”) ratio van JIT64 met die van RyuJIT

ryujit

Zoals duidelijk te zien is is alles sneller met RyuJIT. Maar de RFC822 e-mail regex is letterlijk “ off-the-charts” Dat komt omdat regular expressions (RegEx) heel slecht performen op JIT64 (60 seconden t.o.v. 1.8 seconden)

Ten slotte
De optimalisatie is niet eens het beste van wat RyuJIT te bieden heeft. De huidige JIT64 compiler is gebaseerd op de C++ optimizing compiler.
RyuJIT is gebaseerd op de x86JIT, en alhoewel RyuJIT er nu alleen nog maar voor de 64-bit omgevingen bedoeld is gaat RyuJIT uiteindelijk de basis vormen voor alle compilers; x86, ARM, MDIL en wat er nog meer verzonnen gaat worden. Een enkelvoudige codebase betekent dat .NET apps consistenter worden over de verschillende architecturen heen, naast het voordeel van snellere innovaties en feature set ontwikkeling.

RyuJIT werkt op alleen 64-bit edities van Windows (vanaf 8.1) en kan je hier downloaden.
Na installatie kan je RyuJIT op twee manieren aanzetten:
1. Voor 1 applicatie: set een omgevingsvariabele, COMPLUS_AltJit=*
2. Voor je machine: set regkey HKLM\SOFTWARE\Microsoft\.NETFramework\AltJit naar string *

Het is uiteindelijk de bedoeling dat RyuJIT gaat van CTP (Community Technology Preview) naar One True .NET JIT Compiler™ Vanaf .Net 4.6 is het zelfs de standaard compiler voor 64-bits applicaties.

Auteur: Arjan Crielaard / Bergler Competence Center © 2015