Een set patches met een geoptimaliseerde implementatie van de memchr() functie, die wordt gebruikt om een teken in een array te zoeken, is voorgesteld voor opname in de Linux-kernel. In tegenstelling tot de oude versie, waarin byte-voor-byte vergelijking werd toegepast, is de voorgestelde implementatie gebouwd met volledig gebruik van 64- en 32-bits CPU-registers. In plaats van bytes worden machinewoorden vergeleken, wat het mogelijk maakt om in ƩƩn keer minimaal 4 bytes te vergelijken.
Bij het zoeken in grote strings bleek de nieuwe variant ongeveer 4 keer sneller dan de oude (bijvoorbeeld voor strings van 1000 tekens). Voor strings van kleinere omvang is de efficiƫntie van de nieuwe implementatie niet zo significant, maar nog steeds hoger dan die van de oorspronkelijke variant. In de Linux-kernel bereikt de grootte van de in memchr() verwerkte strings 512 bytes. De prestatieverbetering voor 512-bits strings, in een situatie waarin het zoeker teken aan het einde van de string staat, bedraagt 20%.
Testen van kernel 5.18 met de nieuwe variant van 'memchr()' voor 32- en 64-bits architecturen heeft geen problemen aan het licht gebracht. De algehele prestatieverbetering van de kernel subsystemen bij het gebruik van de geoptimaliseerde variant van 'memchr()' is nog niet beoordeeld, net als de haalbaarheid van de vervanging van de implementatie (in de kernelcode komt de aanroep van de memchr() functie 129 keer voor, waaronder in de stuurprogramma's en bestandssystemen).
Bron: opennet.ru
