Compartilhar via


RSS com interrupções sinalizadas por mensagem

Os drivers de miniport podem dar suporte a MSIs (interrupções sinalizadas por mensagem) para melhorar o desempenho do RSS. As MSIs permitem que a NIC solicite uma interrupção na CPU que processará os dados recebidos. Para obter mais informações sobre o suporte do NDIS para MSI, consulte NDIS MSI-X.

A figura a seguir ilustra o RSS com MSI-X.

Diagrama ilustrando o RSS com MSI-X em uma pilha de rede.

Na figura, as setas tracejadas representam o processamento em uma conexão diferente. O RSS com MSI-X permite que a NIC interrompa a CPU correta para uma conexão.

O seguinte processo se repete para cada interrupção:

  1. A NIC:

    1. Usa o DMA para preencher buffers com dados recebidos.

      O driver de miniporte alocou os buffers de recebimento na memória compartilhada durante a inicialização.

    2. Calcula um valor de hash.

    3. Enfileira o buffer para uma CPU e fornece as atribuições de fila para o driver de miniporto. Por exemplo, a NIC pode executar um loop das etapas 1 a 3 e DMA uma lista de atribuições de CPU depois que alguns pacotes forem recebidos. O mecanismo específico é deixado para o design nic.

    4. Usando MSI-X, interrompe a CPU associada a uma fila não vazia.

  2. A NIC pode preencher buffers de recebimento adicionais e adicioná-los à fila a qualquer momento, mas não interrompe essa CPU novamente até que o driver de miniporte habilite as interrupções para essa CPU.

  3. O NDIS chama o ISR do driver de miniporto ( MiniportInterrupt) na CPU atual.

  4. O ISR desabilita interrupções na CPU atual e enfileira um DPC na CPU atual.

    As interrupções ainda podem ocorrer nas outras CPUs enquanto o DPC está em execução na CPU atual.

  5. O NDIS chama a função MiniportInterruptDPC para cada DPC enfileirado. Cada DPC:

    1. Os builds recebem descritores para todos os buffers recebidos em sua fila e indica os dados na pilha do driver. Para obter mais informações, consulte Indicando que o RSS recebe dados.
    2. Habilita interrupções para a CPU atual. Essa interrupção foi concluída e o processo será iniciado novamente. Observe que nenhuma operação atômica é necessária para acompanhar o progresso de outros DPCs.