Dla jądra Linuksa zaproponowano implementację funkcji memchr, która działa do 4 razy szybciej

Do jądra Linuksa zaproponowano zestaw poprawek ze zoptymalizowaną implementacją funkcji memchr(), służącej do wyszukiwania symbolu w tablicy. W odróżnieniu od starej wersji, w której stosowano porównywanie bajt po bajcie, proponowana implementacja jest zbudowana z uwzględnieniem pełnego wykorzystania 64- i 32-bitowych rejestrów procesora. Zamiast bajtów porównanie odbywa się przy użyciu słów maszynowych, co pozwala na porównanie co najmniej 4 bajtów jednocześnie.

Przy wyszukiwaniu dużych ciągów nowa opcja okazała się około 4 razy szybsza od starej (np. dla ciągów o długości 1000 znaków). W przypadku małych ciągów wydajność nowej implementacji nie jest już tak znacząca, ale i tak jest wyższa w porównaniu z wersją pierwotną. W jądrze Linuksa rozmiar ciągów przetwarzanych w memchr() sięga 512 bajtów. Wzrost wydajności dla ciągów o długości 512 bajtów, w sytuacji, gdy szukany znak znajduje się na końcu ciągu, wynosi 20%.

Testowanie jądra 5.18 z nową opcją „memchr()” dla architektur 32-bitowych i 64-bitowych nie ujawniło żadnych problemów. Nie oceniono jeszcze całkowitego wzrostu wydajności podsystemów jądra podczas korzystania ze zoptymalizowanej wersji „memchr()” ani nie przeanalizowano możliwości zastąpienia implementacji (w kodzie jądra wywołania funkcji memchr() występują 129 razy , w tym w kodzie sterowników i systemów plików).

Źródło: opennet.ru

Dodaj komentarz