Definindo afinidade para interrupções de rede no Windows Server 2012 R2

1

Temos um aplicativo que envia e recebe muito tráfego de rede, mas as interrupções fazem com que tenhamos um desempenho menor que o máximo. Na entrada de 20 Mbps e saída de 20 Mbps (em uma linha de 1 Gbps), as interrupções de rede usam 100% do núcleo 0 e o sistema operacional congela (verificado pelo Windows Performance Analyzer). O uso do recurso RSS na placa de rede (BroadCom) não melhorou a situação.

Eu entendo que você pode editar a afinidade de interrupções específicas através do registro - meu objetivo é usar um segundo núcleo para interrupções de rede como faria no Linux - mas não sei como encontrar a chave certa para editar . Qualquer outro conselho é muito bem-vindo.

    
por akonskarm 23.07.2015 / 19:43

1 resposta

1

Fornecerei uma resposta parcial com pistas sobre como e onde acredito que você pode encontrar uma resposta concreta específica para seu sistema.

A função está strongmente ligada à versão NDIS do sistema operacional.

Uma referência antecipada é o parâmetro ProcessorAffinityMask da chave HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters . Ele define quais processadores devem ser disponibilizados para manutenção das interrupções do driver do adaptador de rede no Windows 2000.

O subsistema Receive Side Scaling evoluiu em versões posteriores para mapear filas de processamento de rede para os processadores disponíveis, descritos aqui para o Windows 2008.

Aqui está a documentação para RSS no Windows 2012 R2 (NDIS 6.40 eu acredito) e uma pista é dada na frase inicial:

To process received data efficiently, a miniport driver's receive interrupt service function schedules a deferred procedure call (DPC). Without RSS, a typical DPC indicates all received data within the DPC call. Therefore, all of the receive processing that is associated with the interrupt runs on the CPU where the receive interrupt occurs.

No final de este link é um link para o material de referência para todas as versões 6.x NDIS . Acredito que você possa usar essas referências para elaborar uma resposta para seu sistema específico e identificar termos precisos para as ambiguidades do Google.

Apenas com base nas informações fornecidas pela pergunta (que não são muito detalhadas), o que eu vejo nos documentos?

O primeiro processador no conjunto de processadores a ser disponibilizado para RSS é definido usando o parâmetro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\Parameters\RssBaseCpu no Windows 2008, conforme descrito aqui . Espero que isso seja válido também para o Windows 2012 R2.

Da mesma forma, o número máximo de processadores a serem disponibilizados para RSS é definido usando o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ndis\Parameters\MaxNumRssCpus conforme descrito aqui .

Devido a isso, no Win2008 e também no Win2012, definir RssBaseCpu para 1 e MaxNumRssCpus para 1 deve bloquear RSS processamento para a segunda CPU lógica e nenhum outro, assumindo que RSS foi ativado com sucesso. RSS status pode ser verificado a partir do Windows por meio de um prompt de comando administrativo assim:

netsh int tcp show global

conforme documentado aqui .

Dado este contexto, é bem possível que o seu problema seja simplesmente devido a um driver de dispositivo NIC mal escrito também. Eu tive um pouco de dificuldade com os mecanismos de descarregamento da NIC (a categoria geral da qual o RSS pertence), especificamente com as NICs Broadcom integradas nos servidores da Dell e nos drivers associados. Gostaria de encorajá-lo a também buscar essa possibilidade se o sistema não agir como seria de esperar, baseado na configuração quadruplicada.

    
por 23.07.2015 / 23:29