В ядрото на Linux обработката на входящи UDP-пакети е ускорена с 12%

В кодовата база, на която се основава ядрото Linux 7.0, бе приет набор от промени, които позволиха да се увеличи производителността на обработката на входящи UDP-пакети с 12% при стрес тестиране в 100-гигабитна мрежа. Оптимизацията е реализирана чрез ръчно инлайниране на 2 функции. Забелязва се, че функцията timecounter_cyc2time() може да бъде извиквана за всеки входящ пакет, тъй като съвременните протоколи изискват учет на времето на пристигане на пакета. Поради това, при натоварен сървър функцията timecounter_cyc2time() може да бъде извиквана повече от 100 млн. пъти в секунда.

В настоящата ситуация автоматично прилаганите оптимизации от компилатора, като FDO (Оптимизация, насочена от отзиви), LTO (Оптимизация на времето за свързване) и PGO (Оптимизация, ръководена от профил) не успяха да открият горещ сегмент от кода и го игнорираха, очевидно защото драйверите на мрежовите карти се предоставят под формата на отделни модули. Въпреки това, ръчното инлайн разгръщане на функцията доведе до значителен ръст в производителността.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster