در پایه کدی که هسته بر روی آن شکل گرفته است Linux 7.0, принят набор изменений, при проведении стресс-тестирования в 100-гигабитной сети позволивших повысить производительность обработки входящих UDP-пакетов на 12%. Оптимизация реализована путём ручного инлайнинга 2 функций. Отмечается, что функция timecounter_cyc2time() может вызываться на каждый входящий пакет, поскольку современные протоколы требуют учёта времени поступления пакета. Из-за этого на нагруженном سرور تابع timecounter_cyc2time() را میتوان بیش از ۱۰۰ میلیون بار در ثانیه فراخوانی کرد.
در این شرایط، بهینهسازیهای خودکار کامپایلر مانند FDO (بهینهسازی هدایتشده با بازخورد)، LTO (بهینهسازی زمان پیوند) و PGO (بهینهسازی هدایتشده با نمایه) نتوانستند قطعه کد داغ را شناسایی کنند و آن را نادیده گرفتند، ظاهراً به این دلیل که درایورهای کارت شبکه به عنوان ماژولهای جداگانه ارائه میشوند. با این حال، گسترش دستی درونخطی تابع، افزایش عملکرد قابل توجهی را به همراه داشت.
منبع: opennet.ru
