DevSecOps

11 jun, 2013

Ajuste de desempenho no Windows 2012: subsistema de redes – Parte 01

Publicidade

Neste artigo da série de ajustes de desempenho do Windows 2012, iremos focar no subsistema de redes. Abordaremos as várias opções de otimização nas diversas camadas, começando pelos drivers e o hardware. Cobriremos também a pilha de protocolos NDIS e os aplicativos do usuários. Vamos começar pela própria placa de rede e alguns dos recursos que placas de alta performance suportam e que você pode utilizar para otimizar cargas de tráfego intenso de dados. Se estiver executando qualquer aplicação que gere muito tráfego de dados, precisará de placas de alta performance. Nesta seção, exploraremos algumas considerações para selecionar uma placa de rede adequada.

Capacidades de offload

Tarefas do tipo offload podem reduzir o uso da CPU no servidor, melhorando o desempenho geral do sistema. A pilha de redes do Windows 2012 (e versões anteriores do SO) pode suportar uma ou mais tarefas offload em uma placa de rede. A tabela abaixo lista os detalhes de capacidades do recurso offload.

Checagem de soma (checksum) A pilha de redes pode aliviar a carga dos cálculos e da validação das somas (checksum) do Transmission Control Protocol (TCP) e do User Datagram Protocol (UDP) em operações de envio e recebimento. Ele pode realizar o mesmo tanto em operações de IPv4 quanto IPv6.
Criptografia e autenticação de segurança IP A camada de transporte TCP/IP pode aliviar a carga dos cálculos e da validação das checagens de soma para cabeçalhos de autenticação e EPSs (Encapsulating Security Payloads). A camada de transporte TCP/IP também pode aliviar a carga da codificação e decodificação dos EPSs.
Segmentação de pacotes TCP grandes O TCP/IP suporta LSOv2 (Large Send Offload v2). Com o LSOv2, o TCP/IP pode aliviar a carga da segmentação de grandes pacotes TCP para o hardware.
Receive Segment Coalescing (RSC) RSC é a habilidade de agrupar pacotes para minimizar o processamento de cabeçalhos que é necessário para a atividade do host. Um máximo de 64 KB de carga recebida pode ser agrupada em um único grande pacote para ser processado.

Receive-Side Scaling (RSS)

O Windows Server 2012 (assim como o Windows Server 2008 R2 e o Windows Server 2008) suportam Receive Side Scaling (RSS). O RSS direciona o processamento de rede para um processador lógico por núcleo. Por exemplo, dado um servidor com Intel Hyper-Threading e 4 núcleos (8 processadores lógicos), o RSS utilizará não mais do que 4 processadores lógicos para o processamento de rede. O RSS distribui os pacotes de I/O que chegam entre esses processadores para que os pacotes que pertencem à mesma conexão TCP sejam processados no mesmo processador lógico. O RSS também equilibra o tráfego UDP unicast e multicast do Windows Server 2012 e realiza o roteamento dos fluxos relacionados (conforme determinado pelo hash do destino e da origem) para o mesmo processador lógico, preservando a ordem relativa às chegadas. O Windows Server 2012 proporciona os seguintes métodos para ajustar o comportamento do RSS:

  • Windows PowerShell: Get-NetAdapterRSS, Set-NetAdapterRSS, Enable-NetAdapterRss, Disable-NetAdapterRss. Esses comandos permitem ver e modificar parâmetros RSS.
  • Perfis RSS: usados para determinar quais processadores lógicos serão atribuídos a quais placas de redes. Possíveis perfis são:

◦ Closest: processadores lógicos mais próximos da base da placa de rede do processador RSS são preferidos. O Windows pode rebalancear os processadores lógicos dinamicamente baseando-se na carga.

ClosestStatic: processadores lógicos mais próximos da base da placa de rede do processador RSS são preferidos.. O Windows não vai rebalancear dinamicamente os processadores com base na carga.

NUMA: os processadores lógicos tenderão a ser selecionados em diferentes nós do tipo NUMA para distribuir a carga. O rebalanceamento pode ser feito pelo Windows de acordo com a carga.

NUMAStatic: este é o perfil padrão. Processadores lógicos tenderão a ser selecionados em diferentes nós do tipo NUMA para distribuir a carga. O Windows não realizará rebalanceamento.

Conservative: o RSS utiliza o menor número de processadores possível para sustentar a carga. Essa opção ajuda a diminuir o número de interrupções.

Você pode utilizar o comando set-netadapterRSS para escolher quantos processadores serão utilizados para o RSS para cada placa de rede, o mínimo de processadores utilizados e a partir de qual nó a placa de rede aloca memória:

MaxProcessor: define o número máximo de processadores para serem utilizados pelo RSS, certificando-se de que o tráfego do aplicativo está atrelado a um número máximo de processadores para uma interface.

set-netadapterRSS –Name “Ethernet” –MaxProcessors <value>

BaseProcessorGroup: ajusta o grupo de processadores base em um nó NUMA, afetando o conjunto de processadores utilizado pelo RSS.

set-netadapterRSS –Name “Ethernet” –BaseProcessorGroup <value>

MaxProcessorGroup: ajusta o grupo máximo de processadores de um nó NUMA, afetando conjunto de processadores utilizado pelo RSS.

set-netadapterRSS –Name “Ethernet” –MaxProcessorGroup <value>

BaseProcessorNumber: ajusta o número de processadores base em um nó NUMA, permitindo partilhar processadores pelas interfaces de rede e especificar o primeiro processador lógico em um determinado conjunto de processadores RSS que são atribuídos a cada placa.

set-netadapterRSS –Name “Ethernet” –BaseProcessorNumber <Byte Value>

NumaNode: o nó NUMA a partir do qual cada adaptador de rede pode alocar memória.

set-netadapterRSS –Name “Ethernet” –NumaNodeID <value>

NumberofReceiveQueues: se o seu processador parecer subutilizado para receber tráfego, você pode tentar aumentar o número de filas RSS do valor padrão (2) para o número máximo suportado.

set-netadapterRSS –Name “Ethernet” –NumberOfReceiveQueues <value>

O RSS não fornece nenhuma interação com máquinas virtuais; em vez disso, você pode configurar uma VMQ (Virtual Machine Queue). O RSS pode ser habilitado para máquinas virtuais nos casos de SR-IOV, porque o driver da função virtual suporta o RSS. Nesse caso, o guest e o host terão o benefício do RSS. O host, entretanto, não terá capacidades RSS porque o switch virtual está habilitado com o SR-IOV.

Receive-Segment Coalescing (RSC)

O RSC (ou União de Segmentos Recebidos) pode melhorar o desempenho ao reduzir o número de cabeçalhos IP que são processados para uma determinada quantidade de dados recebidos. Você deve utilizar o RSC para ajustar o desempenho de dados recebidos ao agrupar (ou unir) pacotes menores em unidades maiores. Isso pode reduzir a latência e aumentar o throughput para cargas mais pesadas. Em placas de rede com suporte RSC, certifique-se de que ele está habilitado, a menos que você tenha uma baixa latência, e necessidade de um baixo throughput que se beneficiam com o RSC desabilitado.

No Windows Server 2012, é possível utilizar os comandos do PowerShell para configurar placas capazes de realizar RSC: Enable-NetAdapterRsc, Disable-NetRsc, Get-NetAdapterAdvancedProperty e Set-NetAdapterAdvancedProperty. RSC pode ser examinado utilizando os comandos Get-NetAdapterRSC e Get-NetAdapterStatistics. O comando Get mostra se o RSC está habilitado e se o TCP permite que o RSC fique operacional. No exemplo acima, RSC IPv4 está habilitado. Para entender as falhas, você pode ver os bytes unidos ou as exceções causadas  ao digitar o seguinte comando:

PS C:\Users\Administrator> $x = Get-NetAdapterStatistics “myAdapter”

PS C:\Users\Administrator> $x.rscstatistics

CoalescedBytes       : 0

CoalescedPackets     : 0

CoalescingEvents     : 0

CoalescingExceptions : 0

RSC e virtualização

Se a placa de rede não estiver atrelada ao switch virtual, o RSC é suportado na máquina física. Se a placa estiver ligada ao switch virtual, o Windows 2012 irá desabilitar o RSC na máquina física. O RSC pode ser habilitado na máquina virtual quando o SR-IOV está habilitado. Nesse caso, funções virtuais irão suportar o RSC; por consequência, máquinas virtuais se beneficiarão do RSC.

Recursos de placas de rede

Algumas placas de rede gerenciam ativamente seus recursos para atingir um desempenho ideal. Várias placas permitem que os administradores configurem manualmente os recursos ao utilizar a aba Avançada para a placa. Em tais dispositivos, você pode ajustar os valores para diversos parâmetros, incluindo o número de buffers de recebimento e envio. No Windows Server 2012, você pode definir as configurações avançadas de rede utilizando os seguintes comandos do PowerShell:

  • Get-NetAdapterAdvancedProperty
  • SetNetAdapterAdvancedProperty
  • Enable-NetAdapter
  • Enable-NetAdapterBinding
  • Enable-NetAdapterChecksumOffload
  • Enable-NetAdapterLso
  • Enable-NetAdapterIPSecOffload
  • Enable-NetAdapterPowerManagemetn
  • Enable-NetAdapterQos
  • Enable-NetAdapterRDMA
  • Enable-NetAdapter
  • Enable-NetAdapterSriov

Message-Signaled Interrupts (MSI/MSI-X)

Placas de rede compatíveis com MSI/MSI-X podem utilizar processadores lógicos específicos. Se a sua placa de rede suporta RSS, então um processador lógico pode ficar dedicado a servir interrupções e a deferir interrupções de chamadas de procedimentos (procedure calls ou DPCs) para uma determinada conexão TCP. Isso irá melhorar bastante o desempenho ao preservar o cache TCP.

Moderação de interrupções

Por último, discutiremos a moderação de interrupções. Algumas placas de rede expõem diferentes níveis de moderação de interrupções ou parâmetros de agregação de buffers (buffer coalescing), ou ambos. Você definitivamente deveria considerar a agregação de buffers quando a placa de rede não realiza moderação de interrupções. Moderação de interrupções reduz a utilização de CPU porque minimiza o custo de processamento por buffer, mas tenha em mente de que moderação de interrupções e agregação de buffers têm um impacto negativo em situações sensíveis à latência. A tabela abaixo lista os recursos sugeridos para as placas de rede em uso em várias aplicações de servidores.

Aplicação Checksum offload Large Send Offload Receive-side scaling (RSS) Receive Segment Coalescing (RSC)
Servidor de arquivos X X X X
Servidor Web X X X
Servidor de e-mails (conexões curtas) X X
Base de dados X X X
Servidor FTP X X X
Servidor de Mídia X X X

Essas configurações servem apenas como referência. Dependendo do trabalho, a(s) sua(s) placa(s) de rede e sua situação específica podem ser diferentes. Em nosso próximo artigo discutiremos mais a fundo como ajustar a placa de rede e utilizar alguns dos recursos que discutimos.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Texto original da equipe Monitis, liderada por Hovhannes Avoyan, disponível em http://blog.monitis.com/index.php/2013/01/11/performance-tuning-windows-2012-network-subsystempart-1/?attest=true&opt=vers