In den Code-Basis, auf dessen Grundlage der Linux-Kernel 7.0 entsteht, wurden Änderungen übernommen, die während der Stresstests in einem 100-Gigabit-Netzwerk die Verarbeitung von eingehenden UDP-Paketen um 12 % verbessert haben. Die Optimierung wurde durch manuelles Inlining von 2 Funktionen umgesetzt. Es wird darauf hingewiesen, dass die Funktion timecounter_cyc2time() für jedes eingehende Paket aufgerufen werden kann, da moderne Protokolle die Berücksichtigung der Ankunftszeit des Pakets erfordern. Daher wird bei hoher Auslastung Server die Funktion timecounter_cyc2time() mehr als 100 Millionen Mal pro Sekunde aufgerufen werden kann.
In dieser Situation konnten die automatisch vom Compiler angewendeten Optimierungen, wie FDO (Feedback Directed Optimization), LTO (Link Time Optimization) und PGO (Profile Guided Optimization), das heiße Code-Segment nicht erkennen und ignorierten es anscheinend, da die Treiber für Netzwerkkarten in Form separater Module bereitgestellt werden. Dennoch brachte das manuelle Inline-Deployment der Funktion einen erheblichen Leistungsvorteil.
Quelle: opennet.ru
