Pour l'inclusion dans le noyau Linux, un ensemble de patches a été proposé avec une implémentation optimisée de la fonction memchr(), utilisée pour rechercher un caractère dans un tableau. Contrairement à l'ancienne version, qui utilisait une comparaison byte-à-byte, l'implémentation proposée est conçue pour tirer pleinement parti des registres CPU 64 et 32 bits. Au lieu de comparer des octets, la comparaison se fait en utilisant des mots machine, ce qui permet de comparer au moins 4 octets à la fois.
Lors de la recherche dans de grandes chaînes, la nouvelle version s'est révélée environ 4 fois plus rapide que l'ancienne (par exemple, pour des chaînes de 1000 caractères). Pour les chaînes de petite taille, l'efficacité de la nouvelle implémentation n'est pas aussi significative, mais reste supérieure par rapport à l'ancienne version. Dans le noyau Linux, la taille des chaînes traitées par memchr() atteint 512 octets. Le gain de performance pour des chaînes de 512 octets, dans une situation où le caractère recherché se trouve à la fin de la chaîne, est de 20%.
Les tests du noyau 5.18 avec la nouvelle version de «memchr()» pour les architectures 32 et 64 bits n'ont révélé aucun problème. Le gain de performance global des sous-systèmes du noyau lors de l'utilisation de la version optimisée de «memchr()» n'a pas encore été évalué, tout comme la faisabilité de remplacer l'implémentation (dans le code du noyau, l'appel de la fonction memchr() apparaît 129 fois, y compris dans le code des pilotes et des systèmes de fichiers).
Source : opennet.ru
