È stata proposta un'implementazione della funzione memchr per il kernel Linux, che funziona fino a 4 volte più velocemente

È stata proposta l'inclusione nel kernel Linux di una serie di patch con un'implementazione ottimizzata della funzione memchr(), utilizzata per cercare un simbolo in un array. A differenza della vecchia versione, che utilizzava il confronto byte per byte, l'implementazione proposta è costruita tenendo conto del pieno utilizzo dei registri della CPU a 64 e 32 bit. Invece dei byte, il confronto viene eseguito utilizzando parole macchina, che consentono di confrontare almeno 4 byte alla volta.

Durante la ricerca in stringhe di grandi dimensioni, la nuova opzione si è rivelata circa 4 volte più veloce di quella precedente (ad esempio, per stringhe di 1000 caratteri). Per le stringhe di piccole dimensioni l'efficienza della nuova implementazione non è così significativa, ma è comunque superiore rispetto alla versione originale. Nel kernel Linux, la dimensione delle stringhe elaborate in memchr() raggiunge i 512 byte. Il miglioramento delle prestazioni per stringhe da 512 byte, in una situazione in cui il carattere cercato si trova alla fine della stringa, è del 20%.

Testare il kernel 5.18 con la nuova opzione "memchr()" per architetture a 32 e 64 bit non ha rivelato alcun problema. Non è stato ancora valutato il miglioramento complessivo delle prestazioni dei sottosistemi del kernel quando si utilizza la versione ottimizzata di “memchr()”, né è stata analizzata la fattibilità di una sostituzione dell’implementazione (nel codice del kernel, le chiamate alla funzione memchr() si verificano 129 volte , incluso nel codice dei driver e dei file system).

Fonte: opennet.ru

Aggiungi un commento