Um in den Linux-Kernel aufgenommen zu werden, wurde ein Satz von Patches mit einer optimierten Implementierung der Funktion memchr() vorgeschlagen, die zum Suchen eines Zeichens in einem Array verwendet wird. Im Gegensatz zur alten Variante, die byteweise Vergleiche anwendete, wurde die vorgeschlagene Implementierung unter BerĂŒcksichtigung der vollstĂ€ndigen Nutzung von 64- und 32-Bit-CPU-Registern erstellt. Anstelle von Bytes erfolgt der Vergleich unter Verwendung von Maschinenwörtern, was es ermöglicht, mindestens 4 Bytes gleichzeitig zu vergleichen.
Bei der Suche in groĂen Zeichenfolgen erwies sich die neue Variante als etwa 4-mal schneller als die alte (zum Beispiel bei Zeichenfolgen mit 1000 Zeichen). Bei kleinen Zeichenfolgen ist die Effizienz der neuen Implementierung nicht so signifikant, aber dennoch höher im Vergleich zur ursprĂŒnglichen Variante. Im Linux-Kernel erreicht die GröĂe der in memchr() verarbeiteten Zeichenfolgen 512 Bytes. Der Leistungszuwachs fĂŒr 512-Byte-Zeichenfolgen betrĂ€gt in Situationen, in denen das gesuchte Zeichen am Ende der Zeichenfolge steht, 20%.
Die Testung des Kernels 5.18 mit der neuen Variante von âmemchr()â fĂŒr 32- und 64-Bit-Architekturen hat keine Probleme ergeben. Der Gesamte Performance-Zuwachs der Kernel-Subsysteme bei Verwendung der optimierten Variante von âmemchr()â wurde bisher nicht bewertet, und auch die ZweckmĂ€Ăigkeit einer ImplementierungsĂ€nderung wurde nicht analysiert (in den Kernel-Codes wird die Funktion memchr() 129-mal aufgerufen, einschlieĂlich im Code von Treibern und Dateisystemen).
Quelle: opennet.ru
