ในฐานรหัสที่ใช้ในการสร้างแกนหลัก Linux 7.0, принят набор изменений, при проведении стресс-тестирования в 100-гигабитной сети позволивших повысить производительность обработки входящих UDP-пакетов на 12%. Оптимизация реализована путём ручного инлайнинга 2 функций. Отмечается, что функция timecounter_cyc2time() может вызываться на каждый входящий пакет, поскольку современные протоколы требуют учёта времени поступления пакета. Из-за этого на нагруженном เซิร์ฟเวอร์ ฟังก์ชัน timecounter_cyc2time() สามารถถูกเรียกได้มากกว่า 100 ล้านครั้งต่อวินาที
ในสถานการณ์นี้ การเพิ่มประสิทธิภาพคอมไพเลอร์อัตโนมัติ เช่น FDO (Feedback Directed Optimization), LTO (Link Time Optimization) และ PGO (Profile Guided Optimization) ล้มเหลวในการตรวจจับส่วนของโค้ดที่ใช้งานบ่อยและละเลยส่วนนั้นไป เห็นได้ชัดว่าเป็นเพราะไดรเวอร์การ์ดเครือข่ายถูกส่งมาเป็นโมดูลแยกต่างหาก อย่างไรก็ตาม การขยายฟังก์ชันแบบอินไลน์ด้วยตนเองทำให้ได้ประสิทธิภาพที่ดีขึ้นอย่างมาก
ที่มา: opennet.ru
