Het zlib-rs project: Verhoogde prestaties en veiligheid door strategisch gebruik van SIMD-instructies
De Trifecta Tech Foundation blijft de open source-infrastructuur revolutioneren met hun initiatief voor data compressie op basis van Rust. Dit keer ligt de focus op het verbeteren van de prestaties van de bibliotheek zlib-rs, een veilige en compatibele alternatieve versie van de populaire zlib, oorspronkelijk geschreven in C. In een serie technische publicaties hebben ontwikkelaars laten zien hoe het strategisch gebruik van SIMD (Single Instruction, Multiple Data) instructies een aanzienlijke impact kan hebben op de efficiëntie.
Waarom SIMD?
Naarmate de Wet van Moore begon af te nemen, kozen chipfabrikanten ervoor om slimmer om te gaan met mogelijkheden: in plaats van de frequentie te verhogen, lieten ze een enkele instructie meerdere gegevens tegelijkertijd verwerken. Zo ontstond SIMD, aanwezig in architecturen zoals x86_64 en ARM NEON, met registers van 128, 256 of zelfs 512 bits. Deze uitbreidingen maken massale vectorbewerkingen mogelijk, zoals optellen of vergelijken, wat cruciaal is voor datacompressiefuncties.
zlib-rs en het geval van slide_hash_chain
Een sleutelcomponent in zlib-rs, slide_hash_chain, is verantwoordelijk voor het aanpassen van de indexen in een tabel tijdens de compressie. In de oorspronkelijke versie, geschreven in pure Rust, doorloopt de functie de tabel en trekt een waarde van elk element af. De ontwikkeling wordt interessanter wanneer de ontwikkelaars de door de compiler gegenereerde assemblagecode bestuderen: dankzij autovectorisatie is Rust al in staat om SIMD-registers te gebruiken zonder expliciete instructies.
Trifecta heeft de code verder geoptimaliseerd door gebruik te maken van blokken van 32 en 64 elementen, afhankelijk van het beschikbare type SIMD-instructie, waardoor het aantal instructies afnam en de efficiëntie steeg zonder in te boeten op portabiliteit. Op moderne architecturen maken deze optimalisaties een volledig gebruik van AVX2-registers (256 bits) mogelijk en wordt de optimale implementatie in realtime geselecteerd via dynamische detectie van processorcapaciteiten.
De kracht van SIMD vergelijking: compare256
In het tweede technische artikel pakt Trifecta de uitdaging aan van het vergelijken van twee datablokken van 256 bytes om overeenkomsten te detecteren. De functie compare256 vergelijkt, in zijn eenvoudigste vorm, byte voor byte en telt het aantal overeenkomende elementen tot de eerste afwijking. Hoewel Rust een redelijke assembler genereert, kan dit patroon niet automatisch worden gevectoriseerd. Daarom heeft het team handmatig een SIMD-gebaseerde versie geïmplementeerd met behulp van xmm registers en instructies zoals _mm_cmpeq_epi8 en _mm_movemask_epi8.
Deze SIMD-versie voert gelijktijdige vergelijkingen van 16 bytes uit, converteert de resultaten naar een bitmasker en telt de overeenkomsten via bitoperaties. Het resultaat: een prestatieverbetering van 10 keer in sommige gevallen in vergelijking met de traditionele aanpak.
Compatibiliteit, veiligheid en efficiëntie
Een van de belangrijkste pijlers van de Trifecta-aanpak is het bieden van generieke en geoptimaliseerde versies van elke functie, geselecteerd op basis van de hardwarecapaciteiten in realtime. Dit maakt het mogelijk om een enkele compatibele binaire distributie aan te bieden voor meerdere architecturen, waarbij veiligheid en prestaties behouden blijven zonder fragmentatie.
Dankzij Rust en zijn model van veiligheid tijdens compilatie, elimineert zlib-rs hele klassen van geheugenfouten die vaak in C voorkomen, zoals bufferoverlopen of ongeldige toegang. Door dit te combineren met SIMD ontstaat er een robuustere, snellere bibliotheek, klaar voor de uitdagingen van moderne infrastructuur.
Volgende stappen
Trifecta stopt niet bij zlib-rs. Ze werken ook aan bzip2-rs en zijn op zoek naar financiering om veilige implementaties in Rust van zstd en xz aan te pakken, waardoor een modern en betrouwbaar compressie-ecosysteem wordt voltooid.
Geïnteresseerde ontwikkelaars kunnen eenvoudig bijdragen of zlib-rs adopteren, zowel in Rust-projecten als in C-toepassingen via de bibliotheek libz-rs-sys, die fungeert als een compatibele vervanger van de originele zlib-API.
Conclusie: Het werk van de Trifecta Tech Foundation toont aan dat de weg naar een veiligere infrastructuur bestaat uit het gebruik van moderne talen zoals Rust en het maximaliseren van het potentieel van moderne hardware. De optimalisatie van zlib-rs met SIMD verbetert niet alleen de prestaties, maar markeert ook een keerpunt in de manier waarop cruciale bibliotheken voor toekomstige besturingssystemen zouden moeten worden ontwikkeld.
Referenties:
- Systeemadministratie
- SIMD in zlib-rs (deel 1): Autovectorisatie en doelkenmerken
- SIMD in zlib-rs (deel 2): compare256
