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