È stato proposto un insieme di patch per l'inclusione nel kernel di Linux con un'implementazione ottimizzata della funzione memchr(), utilizzata per la ricerca di un carattere in un array. A differenza della vecchia versione, che utilizzava il confronto byte per byte, l'implementazione proposta è creata in modo da sfruttare appieno i registri CPU a 64 e 32 bit. Invece di confrontare i byte, si utilizza il confronto con parole di macchina, permettendo di confrontare almeno 4 byte alla volta.
Nella ricerca in stringhe grandi, la nuova versione ha dimostrato di essere circa 4 volte più veloce della precedente (ad esempio, per stringhe di 1000 caratteri). Per stringhe di dimensioni ridotte, l'efficienza della nuova implementazione non è così significativa, ma comunque superiore rispetto all'originale. Nel kernel di Linux, la dimensione delle stringhe elaborate da memchr() raggiunge i 512 byte. Il guadagno prestazionale per stringhe di 512 byte, quando il carattere cercato si trova alla fine della stringa, è del 20%.
I test del kernel 5.18 con la nuova versione di ‘memchr()’ per architetture a 32 e 64 bit non hanno rivelato alcun problema. Non è stata ancora valutata la crescita complessiva delle prestazioni delle sottosistemi del kernel utilizzando la versione ottimizzata di ‘memchr()’, né è stato analizzato il valore di sostituire l'implementazione (nel codice del kernel, la funzione memchr() viene chiamata 129 volte, compreso il codice dei driver e dei file system).
Fonte: opennet.ru
