Nel codice sorgente, su cui si basa la creazione del kernel Linux 7.0, è stato accettato un insieme di modifiche che, durante i test di stress in una rete a 100 gigabit, hanno consentito di aumentare le prestazioni del trattamento dei pacchetti UDP in ingresso del 12%. L'ottimizzazione è stata realizzata attraverso l'inlining manuale di 2 funzioni. Si osserva che la funzione timecounter_cyc2time() può essere chiamata per ogni pacchetto in ingresso, poiché i protocolli moderni richiedono il monitoraggio del tempo di arrivo del pacchetto. A causa di ciò, in condizioni di carico elevato server la funzione timecounter_cyc2time() può essere chiamata più di 100 milioni di volte al secondo.
In questa situazione, le ottimizzazioni automatiche applicate dal compilatore, come FDO (Feedback Directed Optimization), LTO (Link Time Optimization) e PGO (Profile Guided Optimization), non sono riuscite a rilevare il segmento di codice caldo e lo hanno ignorato, apparentemente perché i driver delle schede di rete sono forniti come moduli separati. Tuttavia, il dispiegamento inline manuale della funzione ha portato a un significativo guadagno in termini di prestazioni.
Fonte: opennet.ru
