Durante il passaggio di Firefox a zlib-rs, gli sviluppatori hanno riscontrato un errore nella CPU Intel

L'organizzazione Trifecta Tech Foundation, che sviluppa progetti come ntpd-rs, sudo-rs, zlib-rs e bzip2-rs, ha annunciato il passaggio di Firefox all'utilizzo della libreria zlib-rs per la compressione e la decompressione utilizzando il metodo gzip. Oltre a proteggere contro i problemi causati da errori nella gestione della memoria, il passaggio da zlib a zlib-rs ha portato a un notevole miglioramento delle prestazioni: nei test condotti, l'accelerazione è stata da 3,3 a 32,5 volte nelle operazioni di decodifica singole e da 2,7 a 10,86 volte nella decodifica di flussi continui.

La libreria zlib-rs è stata utilizzata nella versione 151 di Firefox, ma dopo la sua integrazione alcuni utenti hanno riscontrato un problema che portava a chiusure anomale a causa di uscite dai limiti consentiti. Si segnala che nel codice Rust il problema causava un arresto anomalo, mentre in C una simile situazione avrebbe comportato una danneggiamento invisibile dei dati senza arresto delle operazioni. Come soluzione, nella versione 151.0.1 è stato ripristinato l'uso della vecchia libreria zlib.

Il primo manifestarsi del problema è stato notato durante i test delle prime versioni più di un anno fa, ma nei sistemi degli sviluppatori non è riuscito a essere riprodotto. Alla fine, dopo un anno di test su utenti di versioni beta, è stata presa la decisione di attivare zlib-rs nella versione rilasciata di Firefox 151. Dopo una nuova serie di segnalazioni di problemi e un'analisi delle regolarità, è stato scoperto che il guasto era causato da un errore nel microcodice della CPU Intel basato sull'architettura Raptor Lake di 13 e 14 generazione, relativo all'uso di un registro errato.

Il problema si verificava perché il generatore di codice LLVM utilizzava l'istruzione "mov byte ptr [rsi + rdi + 1], ch" durante la scrittura in memoria dei risultati della codifica di Huffman. L'esecuzione di questa istruzione sulla CPU Raptor Lake comportava, invece di 8-15 bit dal registro RCX, corrispondenti al registro CH specificato nell'istruzione, la scrittura in memoria dei bit 0-7, corrispondenti al registro CL. Durante la preparazione della versione di Firefox 152, l'errore è stato risolto con un workaround e la patch è stata integrata nel core di zlib-rs. La generazione dell'istruzione problematica è stata notata in LLVM 22 (nella branch in sviluppo di LLVM 23 non viene generata).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster