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