Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Ao receber dados, a maioria das camadas na pilha TCP/IP deve examinar as informações de cabeçalho de cada segmento separadamente. Isso cria uma grande quantidade de sobrecarga quando grandes quantidades de dados estão sendo recebidas.
Coalescência de segmentos de receção (RSC) reduz essa sobrecarga ao agrupar uma sequência de segmentos recebidos e indicá-los para a pilha TCP/IP como um único segmento coalescido. As camadas superiores na pilha TCP/IP só precisam examinar um cabeçalho para toda a sequência.
Uma placa de interface de rede (NIC) que suporta RSC em hardware pode melhorar significativamente o desempenho do caminho de receção. Ele também pode reduzir a utilização da CPU do host, pois libera a camada de protocolo de realizar RSC através de software.
Para obter mais detalhes sobre o RSC, consulte Visão geral da coalescência do segmento de recebimento.
NetAdapterCX também suporta UDP RSC (URO) a partir da versão 2.5. Para obter mais detalhes, consulte UDP RSC Offload (URO).
Palavras-chave INF para gerir o offload de RSC
NetAdapterCx verifica as palavras-chave do Registo e as honra ao ativar as capacidades de descarregamento ativas. O motorista não precisa tomar nenhuma outra medida.
As palavras-chave RSC especificadas em Palavras-chave INF padronizadas para RSC podem ser usadas para activar/desactivar a descarga do RSC com uma configuração de chave de registo.
Os valores das palavras-chave devem ser do tipo REG_SZ.
Configurando a descarga de RSC
Os drivers de cliente anunciam primeiro as capacidades RSC do hardware durante a inicialização do adaptador de rede. Isso pode ocorrer em seu EvtDevicePrepareHardware retorno de chamada antes de iniciar um adaptador de rede.
Para configurar os recursos RSC, o controlador do cliente:
Aloca uma estrutura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES.
Chama NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT para inicializar a estrutura.
Chama NetAdapterOffloadSetRscCapabilities para registar a estrutura com NetAdapterCx.
Durante a chamada para NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT, o driver do cliente fornece um ponteiro para o retorno de chamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC. O sistema invoca este callback posteriormente se a capacidade de descarregamento ativa for alterada.
Regras para indicar recursos RSC de hardware
- Os drivers de cliente NÃO devem executar RSC de software em qualquer tipo de tráfego sem suporte de hardware na NIC.
As seguintes regras aplicam-se à estrutura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES:
NetAdapterOffloadLayer3FlagIPv4NoOptionseNetAdapterOffloadLayer3FlagIPv6NoExtensionssão os únicos valores válidos para o campo Layer3Flags. Esses sinalizadores indicam suporte a IPv4 e IPv6, respectivamente.NetAdapterOffloadLayer4FlagTcpNoOptionseNetAdapterOffloadLayer4FlagUdpsão os únicos valores válidos para o campo Layer4Flags. Esses sinalizadores indicam suporte a TCP e UDP, respectivamente.Os sinalizadores de camada 3 devem ser definidos se o sinalizador
NetAdapterOffloadLayer4FlagTcpNoOptionsestiver definido.O campo TcpTimestampOption é opcional. Os drivers de cliente definem esse campo depois de chamar NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT e antes de chamar NetAdapterOffloadSetRscCapabilities para indicar se a NIC suporta a opção de carimbo de data/hora TCP.
O exemplo a seguir mostra como um driver de cliente pode configurar os seus recursos de descarga de hardware RSC.
VOID
MyAdapterSetRscOffloadCapabilities(
NETADAPTER NetAdapter
)
{
// Configure the hardware's RSC offload capabilities
NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES rscOffloadCapabilities;
NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT(
&rscOffloadCapabilities,
NetAdapterOffloadLayer3FlagIPv4NoOptions | NetAdapterOffloadLayer3FlagIPv6NoExtensions,
NetAdapterOffloadLayer4FlagTcpNoOptions,
MyEvtAdapterOffloadSetRsc);
rscOffloadCapabilities.TcpTimestampOption = FALSE;
// Set the current RSC offload capabilities and register the callback for future changes in active capabilities
NetAdapterOffloadSetRscCapabilities(NetAdapter, &rscOffloadCapabilities);
}
Atualizando descargas de hardware RSC
Se a pilha TCP/IP ou um driver de protocolo subjacente solicitar uma alteração nas capacidades RSC ativas do adaptador de rede, o NetAdapterCx invocará o retorno de chamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC do driver cliente que foi registrado em NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES. Neste retorno de chamada, o sistema fornece capacidades atualizadas no objeto NETOFFLOAD que o driver do cliente pode consultar para atualizar as suas capacidades de descarga.
Os drivers de cliente podem chamar as seguintes funções para determinar quais descarregamentos RSC estão habilitados:
- NetOffloadIsTcpRscIPv4Enabled
- NetOffloadIsTcpRscIPv6Ativado
- NetOffloadIsRscTcpTimestampOptionEnabled
O exemplo a seguir mostra como um controlador de cliente pode atualizar suas capacidades de offload RSC:
VOID
MyEvtAdapterOffloadSetRsc(
NETADAPTER NetAdapter,
NETOFFLOAD Offload
)
{
PMY_NET_ADAPTER_CONTEXT adapterContext = NetvAdapterGetContext(NetAdapter);
// Store the updated information in the context
adapterContext->IsRscIPv4Enabled = NetOffloadIsTcpRscIPv4Enabled(Offload);
adapterContext->IsRscIPv6Enabled = NetOffloadIsTcpRscIPv6Enabled(Offload);
adapterContext->IsRscTcpTimestampOptionEnabled = NetOffloadIsRscTcpTimestampOptionEnabled(Offload);
}
Descarga UDP RSC (URO)
O URO permite a aglutinação de segmentos UDP recebidos. As NICs podem combinar datagramas UDP do mesmo fluxo que correspondem a um conjunto de regras em um buffer logicamente contíguo. Esses datagramas combinados são então apresentados à pilha de rede do Windows como um único pacote grande. Para obter informações sobre regras URO, consulte Regras para aglutinar pacotes UDP .
A palavra-chave URO especificada na palavra-chave INF para controlar URO pode ser usada para habilitar/desabilitar a URO com uma configuração de Chave do Registro.
Os drivers de cliente NetAdapterCx podem usar as estruturas RSC existentes e a API RSC para URO. Para configurar o URO, os drivers de cliente devem definir o campo Layer4Flags na estrutura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES para NetAdapterOffloadLayer4FlagUdp.
O comportamento URO espelha o RSC com uma exceção. Quando o retorno de chamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC desativa a URO, o controlador deve indicar os segmentos agrupados existentes e aguardar até que todas as indicações pendentes de URO sejam concluídas. Essa abordagem garante que não haja indicações URO ativas quando o retorno de chamada for concluído.