Introdução ao dimensionamento lateral de recebimento
O RSS (dimensionamento lateral de recebimento) é uma tecnologia de driver de rede que permite a distribuição eficiente do processamento de recebimento de rede em várias CPUs em sistemas multiprocessadores.
Observação
Como as CPUs hiper-threaded no mesmo processador principal compartilham o mesmo mecanismo de execução, o efeito não é o mesmo que ter vários processadores principais. Por esse motivo, o RSS não usa processadores hiper-threaded.
Para processar dados recebidos com eficiência, a função de serviço de interrupção de recebimento de um driver de miniporta agenda uma DPC (chamada de procedimento adiada). Sem o RSS, um DPC típico indica todos os dados recebidos na chamada DPC. Portanto, todo o processamento de recebimento associado à interrupção é executado na CPU em que ocorre a interrupção de recebimento. Para obter uma visão geral do processamento de recebimento não RSS, consulte Processamento de recebimento não RSS.
O RSS permite que a NIC e o driver de miniporte agendem o recebimento de DPCs em outros processadores. O design RSS garante que o processamento associado a uma determinada conexão permaneça em uma CPU atribuída. A NIC implementa uma função de hash e o valor de hash resultante ajuda a selecionar uma CPU.
A figura a seguir ilustra o mecanismo RSS para determinar uma CPU.
Uma NIC usa uma função de hash para calcular um valor de hash em uma área definida (tipo hash) dentro dos dados de rede recebidos. A área definida pode ser não contígua.
Vários LSBs (bits menos significativos) do valor de hash são usados para indexar uma tabela de indireção. Os valores na tabela de indireção são usados para atribuir os dados recebidos a uma CPU.
Para obter informações mais detalhadas sobre como especificar tabelas de indireção, tipos de hash e funções de hash, consulte Configuração do RSS.
Com o suporte a MSI (interrupção sinalizada por mensagem), uma NIC também pode interromper a CPU associada. Para obter mais informações sobre o suporte do NDIS para MSIs, consulte NDIS MSI-X.
Suporte de hardware para RSS
A figura a seguir ilustra os níveis de suporte de hardware para RSS.
Há três níveis possíveis de suporte de hardware para RSS:
Cálculo de hash com uma única fila: a NIC calcula o valor de hash e o driver de miniporto atribui pacotes recebidos a filas associadas a CPUs.
Cálculo de hash com várias filas de recebimento: a NIC atribui os buffers de dados recebidos a filas associadas a CPUs.
MSIs (interrupções sinalizadas por mensagem): a NIC interrompe a CPU que deve lidar com os pacotes recebidos.
A NIC sempre passa o valor de hash de 32 bits.
Como o RSS melhora o desempenho do sistema
O RSS pode melhorar o desempenho do sistema de rede reduzindo:
Processando atrasos distribuindo o processamento de recebimento de uma NIC em várias CPUs.
Distribuir o processamento de recebimento ajuda a garantir que nenhuma CPU seja carregada fortemente enquanto outra CPU estiver ociosa.
Gire a sobrecarga de bloqueio aumentando a probabilidade de que algoritmos de software que compartilham dados sejam executados na mesma CPU.
A sobrecarga de bloqueio de rotação ocorre, por exemplo, quando uma função em execução em CPU0 possui um bloqueio de rotação nos dados que uma função em execução na CPU1 deve acessar. CPU1 gira (aguarda) até que o CPU0 libere o bloqueio.
Recarregamento de caches e outros recursos aumentando a probabilidade de que algoritmos de software que compartilham dados sejam executados na mesma CPU.
Esse recarregamento ocorre, por exemplo, quando uma função que está executando e acessando dados compartilhados em CPU0, é executada em CPU1 em uma interrupção subsequente.
Para obter essas melhorias de desempenho em um ambiente seguro, o RSS fornece os seguintes mecanismos:
Processamento distribuído
O RSS distribui o processamento de indicações de recebimento de uma determinada NIC em DPCs para várias CPUs.
Processamento em ordem
O RSS preserva a ordem de entrega de pacotes de dados recebidos. Para cada conexão de rede, os processos RSS recebem indicações em uma CPU associada. Para obter mais informações sobre o processamento de recebimento do RSS, consulte Indicando dados de recebimento do RSS.
Balanceamento de carga dinâmico
O RSS fornece um meio de reequilibrar a carga de processamento de rede entre CPUs, pois a carga do sistema host varia. Para reequilibrar a carga, os drivers overlying podem alterar a tabela de indireção. Para obter mais informações sobre como especificar tabelas de indireção, tipos de hash e funções de hash, consulte Configuração do RSS.
Dimensionamento do lado do envio
O RSS permite que as pilhas de driver processem dados de envio e recebimento para uma determinada conexão na mesma CPU. Normalmente, um driver sobreposto (por exemplo, TCP) envia parte de um bloco de dados e aguarda uma confirmação antes de enviar o saldo dos dados. Em seguida, a confirmação dispara solicitações de envio subsequentes. A tabela de indireção RSS identifica uma CPU específica para o processamento de dados de recebimento. Por padrão, o processamento de envio será executado na mesma CPU se for disparado pela confirmação de recebimento. Um driver também pode especificar a CPU (por exemplo, se um temporizador for usado).
Hash seguro
O RSS inclui uma assinatura que fornece segurança adicional. Essa assinatura protege o sistema contra hosts remotos mal-intencionados que podem tentar forçar o sistema a um estado desequilibrado.
Suporte a MSI-X
O RSS, com suporte para MSI-X, executa a ISR (rotina de serviço de interrupção) na mesma CPU que executa posteriormente o DPC. Isso reduz a sobrecarga de bloqueio de rotação e o recarregamento de caches.