Dans le code source sur lequel le noyau est formĂ© Linux Dans la version 7.0, un ensemble de modifications a Ă©tĂ© adoptĂ© qui, lors de tests de charge sur un rĂ©seau de 100 gigabits, a permis d'amĂ©liorer de 12 % les performances du traitement des paquets UDP entrants. L'optimisation a Ă©tĂ© implĂ©mentĂ©e en intĂ©grant manuellement deux fonctions. Il est Ă noter que la fonction `timecounter_cyc2time()` peut ĂȘtre appelĂ©e pour chaque paquet entrant, car les protocoles modernes exigent de prendre en compte l'heure d'arrivĂ©e des paquets. De ce fait, sur un rĂ©seau chargĂ©, les performances sont nettement supĂ©rieures. serveur La fonction timecounter_cyc2time() peut ĂȘtre appelĂ©e plus de 100 millions de fois par seconde.
Dans ce cas précis, les optimisations automatiques du compilateur, telles que FDO (Feedback Directed Optimization), LTO (Link Time Optimization) et PGO (Profile Guided Optimization), n'ont pas détecté le segment de code critique et l'ont ignoré, probablement parce que les pilotes de la carte réseau sont distribués sous forme de modules séparés. Cependant, l'intégration manuelle de la fonction a permis un gain de performance significatif.
Source: opennet.ru
