Compartilhar via


Visão geral da coalescagem de pacotes

Determinados 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 esses pacotes. Portanto, a recepção desses pacotes de transmissão ou multicast indesejados faz com que o processamento desnecessário e o consumo de energia ocorram dentro do host receptor.

Por exemplo, o host A envia uma solicitação LLMNR (resolução de nomes multicast) local de link em uma sub-rede IPv6 para resolver o nome do host B. Exceto pelo host A, essa solicitação LLMNR é recebida por todos os hosts na sub-rede. Com exceção do 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 miniporta.

A partir do NDIS 6.30, os adaptadores de rede podem dar suporte à junção de pacotes NDIS. Ao reduzir o número de interrupções de recebimento por meio da junção de pacotes aleatórios de transmissão ou multicast, a sobrecarga de processamento e o consumo de energia são significativamente reduzidos no sistema.

A junção de pacotes envolve as seguintes etapas:

  1. Drivers sobrepostos, como a pilha de protocolo TCP/IP, definem filtros de recebimento NDIS que são usados para filtrar pacotes de broadcast e multicast. Os drivers sobrepostos baixam esses filtros para o driver de miniporta subjacente que dá suporte ao agrupamento de pacotes. Uma vez baixado, o driver de miniporta configura o adaptador de rede com os filtros de recepção de agrupamento de pacotes.

    Para obter mais informações sobre esses filtros, consulte Filtros de Recebimento de Agrupamento de Pacotes.

  2. Os pacotes recebidos que correspondem aos filtros de recebimento são armazenados em cache ou agrupados no adaptador de rede. O adaptador não gera uma interrupção de recebimento para pacotes unidos. Em vez disso, o adaptador interrompe o host quando outro evento de hardware ocorre.

    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 unidos que foram recebidos pelo adaptador de rede.

    Por exemplo, o adaptador de rede que dá suporte à junção de pacotes pode gerar uma interrupção de recebimento quando ocorre um dos seguintes eventos:

    • A expiração de um temporizador de hardware cujo tempo de expiração é ajustado para o valor máximo de atraso de agrupamento do filtro de recebimento correspondente.

    • O espaço disponível dentro do buffer de hardware de agrupamento atinge um nível mínimo especificado pelo adaptador.

    • Um pacote que não corresponde a um filtro de agrupamento é recebido.

    • Outro evento de interrupção, como um evento de conclusão de envio, ocorreu.

    Para obter mais informações sobre esse processo, consulte Gerenciamento de filtros de agrupamento de pacotes na recepção.

Os seguintes pontos se aplicam ao suporte à coalescagem de pacotes pelo NDIS:

  • O NDIS dá suporte à associação de pacotes para pacotes recebidos na porta NDIS padrão (porta 0) atribuída ao adaptador de rede físico. O NDIS não dá suporte ao agrupamento 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 dá suporte à junção de pacotes para pacotes recebidos na fila de recebimento padrão do adaptador de rede. Essa fila de recebimento tem um identificador de NDIS_DEFAULT_RECEIVE_QUEUE_ID.