Linuxové jádro zvyšuje o 12 % výkon při zpracování UDP díky vložení časovače

Sdílet

Síťová karta ethernet Autor: Depositphotos

Eric Dumazet ze společnosti Google poslal do linuxového jádra úpravu, která výrazné zlepšuje výkon při příjmu síťového provozu transportovaného pomocí protokolu UDP. Základem úpravy je vložení funkce časovače, kterou kompilátory nedokázaly optimalizovat.

Změny byly začleněny do linuxového jádra verze 7.0. Zahrnují ruční vložení kódu funkce timecounter_cyc2time() používané v procesu zpracování síťového provozu. To vede k 12% zlepšení v zátěžovém testu příjmu UDP na 100Gb rozhraní síťové karty.

Ruční vložení těchto dvou funkcí se provádí, protože optimalizace řízené zpětnou vazbou kompilátoru (FDO), optimalizace v době propojení (LTO) nebo optimalizace řízené profilem (PGO) nedokázaly správně zasáhnout. Síťové ovladače jsou prakticky výhradně dodávány jako moduly jádra, nikoli jako jeho vestavěné funkce.

Tyto funkce jsou ovšem využívány velmi intenzivně, protože nové síťové transportní protokoly vyžadují, aby ovladače síťových získávaly hardwarové časové značky všech příchozích paketů a případně i všech odchozích.

Jedním z příkladů je připravované řízení toku algoritmem BBR.Swift, který se používá v transportu TCP a funkci timecounter_cyc2time() intenzivně využívá. Na vytíženém serveru může být funkce volána i více než 100 milionkrát za sekundu a každá optimalizace se pak samozřejmě významně projeví.

Našli jste v článku chybu?

Autor zprávičky

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.