Receive-Side Scaling distribuisce il carico di rete del server domestico suddividendo i flussi in entrata in più code di ricezione NIC e associando queste code a diversi core della CPU. Invece di avere un solo core che gestisce quasi tutti gli interrupt di ricezione e i compiti di protocollo, diversi core possono elaborare connessioni indipendenti in parallelo.
RSS è più utile quando il server riceve abbastanza pacchetti da far diventare un core il limite. Non rende un singolo disco più veloce, non aumenta la capacità di rete né divide un normale flusso TCP in modo uniforme su tutti i core. Il suo compito è rimuovere un collo di bottiglia nell'elaborazione dei pacchetti preservando l'ordine del flusso.
Il Meccanismo Principale: Più Code di Ricezione Alimentano Più Core
Senze l'elaborazione multi-coda, una NIC veloce può consegnare lavoro a un percorso di interrupt più rapidamente di quanto un core CPU possa gestirlo. L'uso complessivo della CPU può sembrare modesto perché gli altri core sono inattivi, ma la velocità si stabilizza e la latenza di rete aumenta sul core sovraccarico.
RSS utilizza più code di ricezione così i flussi in entrata possono essere gestiti contemporaneamente. Ogni coda genera il proprio interrupt e percorso di elaborazione, permettendo al sistema operativo di usare più risorse CPU già presenti.
Questo è importante su un server domestico che esegue condivisione file, streaming multimediale, backup e app container contemporaneamente. Quelle connessioni indipendenti forniscono il lavoro parallelo di cui RSS ha bisogno; un collegamento 1GbE poco utilizzato potrebbe non generare mai abbastanza pressione di pacchetti per rendere visibile la differenza.
L'Hashing dei Flussi Preserva l'Ordine Distribuendo le Connessioni
La NIC calcola un hash dai campi dell'intestazione del pacchetto come indirizzi di origine e destinazione, porte e protocollo. Una tabella di indirezione mappa quell'hash a una coda di ricezione. I pacchetti dello stesso flusso normalmente raggiungono la stessa coda, impedendo che l'elaborazione parallela riorganizzi quel flusso.
La relazione tra RSS, affinità IRQ e RPS determina dove il lavoro viene effettivamente eseguito su Linux. L'RSS hardware sceglie una coda di ricezione; l'affinità degli interrupt collega quella coda a una CPU; lo steering software può ridistribuire il lavoro di protocollo successivo quando le code hardware sono limitate.
L'hashing bilancia molti flussi statisticamente, non perfettamente. Alcuni flussi pesanti possono collidere su una coda, e un singolo flusso dominante può rimanere vincolato a un solo core. Per questo motivo le osservazioni per core e per coda sono più utili che assumere che una CPU multi-core garantisca un carico di rete uniforme.
Più Code Possono Scambiare Sollievo dal Collo di Bottiglia con Maggior Overhead CPU
Aumentare il numero di code crea più opportunità di parallelismo, ma genera anche interrupt, lavoro di scheduling e spostamento della cache. Il numero ottimale dipende dalla capacità della NIC, dalla topologia CPU, dal tasso di traffico e dal fatto che le applicazioni che consumano pacchetti girino vicino all'elaborazione di ricezione.
Una spiegazione pratica di saturazione di ricezione su core singolo mostra perché la percentuale totale di CPU può nascondere il vero limite. Il test utile è se un core è impegnato da interrupt o softirq mentre gli altri core hanno margine.
RSS può anche aumentare l'overhead quando il traffico è troppo leggero per necessitarne. La distribuzione parallela dei pacchetti migliora la scalabilità, ma la collocazione delle code e la località flusso-core influenzano ancora l'efficienza. Abilitare tutte le code possibili quindi non è un'ottimizzazione universale.
Come RSS Cambia un Collo di Bottiglia su un Server Domestico
RSS aiuta quando il percorso di ricezione è vincolato dalla CPU: un core mostra un carico elevato di elaborazione di rete, diversi client sono attivi e lo storage ha ancora margine. Non aiuta quando il collegamento Ethernet è pieno, i dischi non reggono il carico, la crittografia domina il tempo CPU o un'applicazione serializza tutte le richieste.
| Osservazione | Limite probabile | Rilevanza RSS |
|---|---|---|
| Un core occupato, altri core inattivi | Elaborazione di ricezione | Potenzialmente alta |
| Tutti i core bassi, collegamento a velocità di linea | Capacità di rete | Bassa |
| Aumenta la latenza disco con i client | Coda di storage | Solo indiretta |
| Un flusso TCP si stabilizza | Limite di flusso singolo o applicazione | Spesso limitata |
Confronta i contatori delle code NIC, il carico di interrupt per core, la velocità e la latenza delle applicazioni prima e dopo una modifica controllata. Un controllo più ampio del collo di bottiglia del server domestico aiuta a evitare che una modifica di tuning di rete mascheri un vincolo di storage, memoria o calcolo.
Domande Frequenti
RSS divide una connessione TCP su tutti i core?
Normalmente no. RSS mantiene i pacchetti di un flusso sulla stessa coda per preservarne l'ordine. Il beneficio di scalabilità è più evidente quando diversi flussi indipendenti possono essere hashati su più code.
RSS è utile su un server domestico 1GbE?
Può esserlo, specialmente con molti pacchetti piccoli o una CPU a basso consumo, ma molti sistemi possono gestire 1GbE con un solo core. Misura il carico per core prima di considerare RSS come la funzione mancante per le prestazioni.
RSS e RPS sono la stessa cosa?
No. RSS indirizza i pacchetti nell'hardware NIC verso le code di ricezione, mentre Receive Packet Steering esegue un passaggio di distribuzione correlato in software. Possono completarsi a vicenda quando il numero di code hardware è limitato.
Hub Tecnologico e AI
Altro da leggere

Come fa un server AI domestico a mantenere separato il contesto di ogni utente?
Un server AI domestico può mantenere separato il contesto di ogni utente pur condividendo lo stesso modello, ma la separazione non deriva dal modello...

Perché l’espulsione del modello provoca picchi di latenza sui server AI domestici?
L'espulsione del modello costringe un server AI domestico a ricaricare i pesi e ricostruire lo stato di runtime. Scopri come confermare gli avvii a...

Qual è il modo più sicuro per preservare i timestamp durante una migrazione NAS?
Preserva i timestamp del NAS definendo i campi necessari, testando un percorso di copia consapevole dei metadati, registrando un manifesto della sorgente, verificando separatamente...

