Se ha propuesto una implementación de la función memchr para el kernel de Linux, ejecutándose hasta 4 veces más rápido

Se ha propuesto para su inclusión en el kernel de Linux un conjunto de parches con una implementación optimizada de la función memchr(), utilizada para buscar un símbolo en una matriz. A diferencia de la versión anterior, que utilizaba una comparación byte a byte, la implementación propuesta se construye teniendo en cuenta el uso completo de registros de CPU de 64 y 32 bits. En lugar de bytes, la comparación se realiza mediante palabras de máquina, lo que permite comparar al menos 4 bytes a la vez.

Al buscar cadenas grandes, la nueva opción resultó ser aproximadamente 4 veces más rápida que la anterior (por ejemplo, para cadenas de 1000 caracteres). Para cadenas pequeñas, la eficiencia de la nueva implementación no es tan significativa, pero sigue siendo mayor en comparación con la versión original. En el kernel de Linux, el tamaño de las cadenas procesadas en memchr() alcanza los 512 bytes. La ganancia de rendimiento para cadenas de 512 bytes, en una situación en la que el carácter buscado está al final de la cadena, es del 20%.

Las pruebas del kernel 5.18 con la nueva opción "memchr()" para arquitecturas de 32 y 64 bits no revelaron ningún problema. Aún no se ha evaluado la ganancia de rendimiento general de los subsistemas del kernel cuando se utiliza la versión optimizada de “memchr()”, ni se ha analizado la viabilidad de reemplazar la implementación (en el código del kernel, las llamadas a la función memchr() ocurren 129 veces , incluso en el código de controladores y sistemas de archivos).

Fuente: opennet.ru

Añadir un comentario