Visão geral da coalescência de pacotes
Certos protocolos de rede IP versão 4 (IPv4) e IP versão 6 (IPv6) envolvem a transmissão de pacotes para endereços de difusão ou multicast. Esses pacotes são recebidos por vários hosts na sub-rede IPv4/IPv6. Na maioria dos casos, o host que recebe esses pacotes não faz nada com eles. Portanto, a receção desses pacotes de difusão ou multicast indesejados leva a que ocorra processamento desnecessário e consumo de energia dentro do host recetor.
Por exemplo, o host A envia uma solicitação LLMNR (resolução de nomes de multicast local) de link em uma sub-rede IPv6 para resolver o nome do host B. Com exceção do host A, essa solicitação LLMNR é recebida por todos os hosts na sub-rede. Exceto para o host B, a pilha de protocolo TCP/IP executada nos outros hosts inspeciona o pacote e determina que o pacote não se destina a ele. Portanto, a pilha de protocolo rejeita o pacote e chama NdisReturnNetBufferLists para devolver o pacote ao driver de miniport.
A partir do NDIS 6.30, os adaptadores de rede podem suportar a coalescência de pacotes NDIS. Ao reduzir o número de interrupções de receção através da coalescência de pacotes aleatórios de difusão ou multicast, a sobrecarga de processamento e o consumo de energia são significativamente reduzidos no sistema.
A coalescência de pacotes envolve as seguintes etapas:
Drivers sobrepostos, como a pilha de protocolo TCP/IP, definem filtros de recebimento NDIS que são usados para filtrar pacotes de difusão e multicast. Os drivers superiores transferem esses filtros para o driver de miniporta subjacente que suporta coalescência de pacotes. Uma vez baixado, o driver de miniporta configura o adaptador de rede com os filtros de recebimento de coalescência de pacotes.
Para obter mais informações sobre esses filtros, consulte Packet Coalescing Receive Filters.
Os pacotes recebidos que correspondem aos filtros de recebimento são armazenados em cache ou aglutinados, no adaptador de rede. O adaptador não gera uma interrupção de recebimento para pacotes coalescidos. Em vez disso, o adaptador interrompe o host quando ocorre outro evento de hardware.
Quando essa interrupção é gerada, o adaptador deve indicar um evento de recebimento com a interrupção. Isso permite que o adaptador de rede processe pacotes agregados que foram recebidos pelo adaptador de rede.
Por exemplo, o adaptador de rede que suporta coalescência de pacotes pode gerar uma interrupção de recebimento quando ocorre um dos seguintes eventos:
A caducidade de um temporizador de hardware cujo tempo de expiração é definido para um valor máximo de atraso de coalescência do filtro de receção correspondente.
O espaço disponível dentro do buffer de coalescência de hardware atinge um nível baixo especificado pelo adaptador.
É recebido um pacote que não corresponde a um filtro coalescente.
Outro evento de interrupção, como um evento de conclusão de envio, ocorreu.
Para obter mais informações sobre esse processo, consulte Handling Packet Coalescing Receive Filters.
Os seguintes pontos aplicam-se ao suporte de coalescência de pacotes pelo NDIS:
O NDIS suporta a coalescência de pacotes para pacotes recebidos na porta NDIS padrão (porta 0) atribuída ao adaptador de rede física. O NDIS não suporta a coalescência de pacotes em portas NDIS atribuídas a adaptadores de rede virtual. Para obter mais informações, consulte Visão geral das portas NDIS.
O NDIS suporta aglutinação de pacotes para pacotes recebidos na fila de recebimento padrão do adaptador de rede. Esta fila de recebimento tem um identificador de NDIS_DEFAULT_RECEIVE_QUEUE_ID.