Do bazy kodu, na podstawie której formowane jest jądro Linux 7.0, wprowadzono zestaw zmian, które w trakcie stres-testów w sieci 100-gigabitowej pozwoliły zwiększyć wydajność przetwarzania przychodzących pakietów UDP o 12%. Optymalizacja została zrealizowana poprzez ręczne inline'owanie 2 funkcji. Zauważono, że funkcja timecounter_cyc2time() może być wywoływana dla każdego przychodzącego pakietu, ponieważ nowoczesne protokoły wymagają uwzględnienia czasu przybycia pakietu. Z tego powodu w obciążonym serwerze funkcja timecounter_cyc2time() może być wywoływana ponad 100 mln razy na sekundę.
W tej sytuacji automatyczne optymalizacje stosowane przez kompilator, takie jak FDO (Feedback Directed Optimization), LTO (Link Time Optimization) i PGO (Profile Guided Optimization), nie były w stanie wykryć gorącego segmentu kodu i zignorowały go, najprawdopodobniej dlatego, że sterowniki kart sieciowych dostarczane są w formie osobnych modułów. Jednak ręczne rozwinięcie inline funkcji przyniosło znaczną poprawę wydajności.
Źródło: opennet.ru
