Dans la base de code sur laquelle repose le noyau Linux 7.0, un ensemble de modifications a Ă©tĂ© intĂ©grĂ©, Ă la suite de tests de stress effectuĂ©s sur un rĂ©seau de 100 gigabits, permettant d'augmenter la performance du traitement des paquets UDP entrants de 12 %. L'optimisation a Ă©tĂ© rĂ©alisĂ©e par le biais de l'inlining manuel de 2 fonctions. Il est Ă noter que la fonction timecounter_cyc2time() peut ĂȘtre appelĂ©e pour chaque paquet entrant, Ă©tant donnĂ© que les protocoles modernes exigent la prise en compte du temps d'arrivĂ©e du paquet. En raison de cela, sur une charge importante, le serveur la fonction timecounter_cyc2time() peut ĂȘtre appelĂ©e plus de 100 millions de fois par seconde.
Dans cette situation, les optimisations automatiques appliquées par le compilateur, telles que FDO (Feedback Directed Optimization), LTO (Link Time Optimization) et PGO (Profile Guided Optimization), n'ont pas pu détecter le segment de code chaud et l'ont ignoré, apparemment parce que les pilotes de cartes réseau sont fournis sous forme de modules séparés. Cependant, le déploiement inline manuel de la fonction a entraßné un gain de performance significatif.
Source : opennet.ru
