Per l'inclusione nel kernel Linux è stato proposto un set di patch con un'implementazione ottimizzata della funzione memchr(), utilizzata per cercare un carattere in un array. A differenza della versione precedente, che utilizzava un confronto byte per byte, l'implementazione proposta è costruita tenendo conto dell'utilizzo completo dei registri CPU a 64 e 32 bit. Invece di confrontare byte, si utilizza una parola macchina, il che consente di confrontare almeno 4 byte in una volta.
Nella ricerca in lunghe stringhe, la nuova versione si è rivelata circa 4 volte più veloce della vecchia (ad esempio, per stringhe di 1000 caratteri). Per stringhe di dimensioni ridotte, l'efficienza della nuova implementazione non è così significativa, ma rimane comunque superiore rispetto alla versione originale. Nel kernel Linux, la dimensione delle stringhe trattate in memchr() raggiunge i 512 byte. L'incremento delle prestazioni per stringhe di 512 byte, quando il carattere ricercato 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 rilevato problemi. L'aumento complessivo delle prestazioni delle sottosistemi del kernel utilizzando la versione ottimizzata di 'memchr()' non è stato ancora valutato, così come non è stata analizzata la fattibilità di sostituire l'implementazione (nel codice del kernel, la funzione memchr() viene chiamata 129 volte, inclusi i driver e i file system).
Fonte: opennet.ru
