Предложен е пакет от пачове за включване в ядрото на Linux с оптимизирана реализация на функцията memchr(), използвана за търсене на символ в масив. За разлика от старата версия, при която се прилагаше байтово сравняване, предложената реализация е изградена с оглед на пълното използване на 64- и 32-битови регистри на CPU. Вместо байтове, сравнението се извършва с машинни думи, което позволява сравнението на минимум 4 байта наведнъж.
При търсене в големи низове новата версия се оказа с около 4 пъти по-бърза от старата (например, за низове от 1000 символа). За по-малки низове ефективността на новата реализация не е толкова значителна, но все пак е по-висока в сравнение с оригиналната версия. В ядрото на Linux размерът на обработваните низове в memchr() достига 512 байта. Увеличението в производителността за низове от 512 байта, в ситуации, когато търсеният символ е в края на низа, е 20%.
Тестовете на ядрото 5.18 с новата версия на „memchr()“ за 32- и 64-битови архитектури не показаха никакви проблеми. Общото увеличаване на производителността на подсистемите на ядрото при използване на оптимизирана версия на „memchr()“ все още не е оценявано, както и целесъобразността на замяна на реализацията (в кода на ядрото функцията memchr() се извиква 129 пъти, включително в кода на драйверите и файловите системи).
Източник: opennet.ru
