Panoramica della unione dei pacchetti
Alcuni protocolli di rete IP versione 4 (IPv4) e IP versione 6 (IPv6) implicano la trasmissione di pacchetti a indirizzi broadcast o multicast. Questi pacchetti vengono ricevuti da più host nella subnet IPv4/IPv6. Nella maggior parte dei casi, l'host che riceve questi pacchetti non esegue alcuna operazione con questi pacchetti. Pertanto, la ricezione di questi pacchetti multicast o broadcast indesiderati causa l'elaborazione e il consumo di energia non necessari all'interno dell'host ricevente.
Ad esempio, l'host A invia una richiesta multicast per la risoluzione dei nomi di collegamento locale (LLMNR) in una subnet IPv6 per risolvere il nome dell'host B. Ad eccezione dell'host A, questa richiesta LLMNR viene ricevuta da tutti gli host nella subnet. Ad eccezione dell'host B, lo stack di protocollo TCP/IP in esecuzione negli altri host controlla il pacchetto e determina che il pacchetto non è destinato a loro. Di conseguenza, lo stack di protocolli rifiuta il pacchetto e chiama NdisReturnNetBufferLists per restituire il pacchetto al driver miniport.
A partire da NDIS 6.30, le schede di rete possono supportare la coalescenza dei pacchetti NDIS. Riducendo il numero di interruzioni di ricezione attraverso l'unione di pacchetti di trasmissione casuali o multicast, l'overhead di elaborazione e il consumo di energia sono notevolmente ridotti nel sistema.
L'unione dei pacchetti prevede i passaggi seguenti:
I driver overlying, ad esempio lo stack di protocolli TCP/IP, definiscono i filtri di ricezione NDIS usati per esaminare i pacchetti broadcast e multicast. I driver sovrastanti scaricano questi filtri nel driver miniport sottostante che supporta la coalescenza dei pacchetti. Dopo il download, il driver miniport configura la scheda di rete utilizzando i filtri di coalescenza dei pacchetti in ricezione.
Per altre informazioni su questi filtri, vedere filtri di ricezione del coalescing dei pacchetti.
I pacchetti ricevuti che corrispondono ai filtri di ricezione vengono memorizzati nella cache o raggruppati, sull'adattatore di rete. L'adattatore non genera un interrupt di ricezione per i pacchetti coalesciti. Al contrario, l'adattatore interrompe l'host quando si verifica un altro evento hardware.
Quando viene generato questo interrupt, l'adapter deve indicare un evento di ricezione con l'interrupt. Ciò consente alla scheda di rete di elaborare pacchetti uniti ricevuti dalla scheda di rete.
Ad esempio, la scheda di rete che supporta la coalescenza dei pacchetti può generare un interrupt di ricezione quando si verifica uno dei seguenti eventi:
Scadenza di un timer hardware la cui scadenza è impostata su un valore massimo di ritardo di unione del filtro di ricezione corrispondente.
Lo spazio disponibile all'interno del buffer di coalescenza hardware raggiunge una soglia minima specificata dall'adattatore.
Viene ricevuto un pacchetto che non corrisponde a un filtro di coalescenza.
Si è verificato un altro evento di interrupt, ad esempio un evento di completamento dell'invio.
Per ulteriori informazioni su questo processo, consultare Gestione dei filtri di ricezione del coalescing dei pacchetti.
I punti seguenti si applicano al supporto della unione dei pacchetti da parte di NDIS:
NDIS supporta l'unione di pacchetti per i pacchetti ricevuti sulla porta NDIS predefinita (porta 0) assegnata alla scheda di rete fisica. NDIS non supporta la coalescenza dei pacchetti sulle porte di NDIS assegnate alle schede di rete virtuali. Per ulteriori informazioni, vedere Panoramica delle porte NDIS.
NDIS supporta l'unione di pacchetti per i pacchetti ricevuti nella coda di ricezione predefinita della scheda di rete. Questa coda di ricezione ha un identificatore di NDIS_DEFAULT_RECEIVE_QUEUE_ID.