Do kódu, na ktorom je postavené jadro Linux 7.0, boli prijaté zmeny, ktoré počas stresového testovania v 100-gigabitovej sieti umožnili zvýšiť výkon spracovania prichádzajúcich UDP paketov o 12%. Optimalizácia bola realizovaná ručným inlayingom dvoch funkcií. Je zdôraznené, že funkcia timecounter_cyc2time() môže byť volaná pri každom prichádzajúcom pakete, pretože moderné protokoly vyžadujú sledovanie času prichádzania paketu. Z tohto dôvodu sa pri zaťažení serveri funkcia timecounter_cyc2time() môže byť volaná viac ako 100 miliónov krát za sekundu.
V tejto situácii automatizované optimalizácie aplikované kompilátorom, ako sú FDO (Optimalizácia založená na spätnej väzbe), LTO (Optimalizácia časového prepojenia) a PGO (Optimalizácia založená na profile), nedokázali identifikovať horúcu časť kódu a ignorovali ju, zjavne kvôli tomu, že ovládače sieťových kariet sú dodávané vo forme samostatných modulov. Avšak ručná inline expanzia funkcie priniesla významné zvýšenie výkonu.
Zdroj: opennet.ru
