VMXNET3 recebe dimensionamento de buffer e uso de memória


12

fundo

Tivemos um incidente em que um cluster de failover do Windows sofreu uma interrupção. Um post-mortem mostrou que o nó foi "removido", conforme descrito neste artigo .

Apenas recentemente migramos esse cluster totalmente para o nosso ambiente VMware, e parece que o evento descrito acima pode ter sido a causa da falha.

O artigo associado da VMware KB sobre isso fala sobre o aumento da configuração Small Rx Bufferse da Rx Ring #1configuração, mas adverte que aumentar muito isso pode aumentar drasticamente a sobrecarga de memória no host.

Após uma auditoria dos Network Interface\Packets Received Discardedcontadores de desempenho para nossas ~ 150 VMs do Windows, 22 vNICs em 16 convidados tiveram alguns pacotes descartados.

Uma quantidade pequena o suficiente para não me preocupar em taxar os hosts com uso de memória adicional, mas quero entender como a memória é usada para essas configurações e de onde vem a memória.

Questões

  1. Qual é a relação entre o número de buffers e o tamanho do anel?
  2. Como se calcula a quantidade de memória usada para determinados valores dessas configurações?
  3. Como essas configurações estão na própria NIC no sistema operacional convidado, presumo que sejam configurações de driver. Isso me faz pensar que a RAM usada pode ser um pool paginável ou não paginável.
    1. Isso está correto?
    2. Se sim, eu deveria estar preocupado com isso?
  4. Há preocupações que não estou levando em consideração aqui?

Estamos tentando determinar se há uma desvantagem em defini-los ao máximo nas VMs afetadas, além do uso da memória do host VMware. Se estamos aumentando o risco de a memória do pool ser esgotada no convidado, por exemplo, estamos mais inclinados a começar pequeno.

Algumas (talvez todas) dessas perguntas podem não ser específicas para VMware ou virtualização.


Eu vi coisas realmente esquisitas quando o mecanismo de descarregamento TCP da NIC física estava se comportando mal e as VMs exibiam um comportamento estranho, pode ser uma pista que você pode seguir.
SpaceManSpiff

Vale a pena conferir no @SpacemanSpiff, mas apenas 16 em mais de 150 estão exibindo o comportamento. Esses 16 estão espalhados pelo cluster de 12 nós e todos recebem ocasionais altas rajadas de tráfego, o que parece ser o que desencadeia os sintomas descritos no artigo da KB. Alguns desses são clusters do Windows para que eles não se movam com o DRS; caso contrário, eu poderia verificar se todos os convidados afetados exibiram pacotes descartados enquanto estavam em um host específico antes de serem removidos do vMotion. Vou verificar novamente e ver se encontro alguma correlação. Obrigado.
Briantist

Microbursting, talvez, que hardware é esse?
precisa

@SpacemanSpiff Servidores IBM, alguns modelos e revisões diferentes, também não têm certeza de quais placas de rede, posso verificar detalhes amanhã.
Briantist 19/08/2015

Respostas:


5

Qual é a relação entre o número de buffers e o tamanho do anel?

Eles são parentes, mas independentes. O "anel" rx refere-se a um conjunto de buffers na memória que são usados ​​como uma fila para passar pacotes de rede recebidos do host (hypervisor) para o convidado (Windows VM). A memória é reservada no convidado pelo driver de rede e é mapeada na memória do host.

À medida que novos pacotes de rede chegam ao host, eles são colocados no próximo buffer disponível no ringue. Em seguida, o host aciona um IRQ no convidado, ao qual o driver convidado responde retirando o pacote do anel e enviando-o para a pilha de rede do SO convidado, que provavelmente o envia para o aplicativo convidado que deseja recebê-lo. Supondo que os pacotes estejam chegando devagar o suficiente, e o driver convidado os processe com rapidez suficiente, sempre deve haver um slot livre no anel. No entanto, se os pacotes chegarem muito rápido ou o hóspede os processar muito lentamente, o anel poderá ficar cheio e os pacotes poderão cair (como você viu na sua situação).

Aumentar o tamanho do anel pode ajudar a atenuar esse problema. Se você aumentar, mais slots estarão disponíveis no anel por vez. Isso segue para a segunda configuração, "Small Rx Buffers", que é a quantidade total de buffers disponíveis que podem ser usados ​​para preencher os slots no anel. É preciso haver pelo menos tantos buffers quanto slots no anel. Normalmente você quer mais. Quando o convidado retira um buffer do anel para dar à pilha de rede do convidado, ele nem sempre pode ser imediatamente retornado ao driver. Se isso acontecer, ter buffers sobressalentes para preencher o anel significa que você pode ficar mais tempo sem soltar pacotes.

O Rx Ring # 1 / Small Rx Buffers é usado para quadros não jumbo. Se você tiver uma configuração de NIC padrão, esse é o único toque que será usado.

Como se calcula a quantidade de memória usada para determinados valores dessas configurações?

Supondo que você esteja falando de quadros não jumbo, cada buffer precisa ser grande o suficiente para armazenar um pacote de rede inteiro, aproximadamente 1,5kb. Portanto, se você tiver 8192 buffers disponíveis, isso usaria 12MB. Um anel maior também usará mais memória, mas os descritores são pequenos (bytes), então são realmente os buffers com os quais você deve se preocupar.

Como essas configurações estão na própria NIC no sistema operacional convidado, presumo que sejam configurações de driver. Isso me faz pensar que a RAM usada pode ser um pool paginável ou não paginável.

Sim, é um pool não paginado. Se os buffers de anel fossem paginados, provavelmente resultaria em pacotes descartados enquanto os buffers estavam sendo retornados.

Há preocupações que não estou levando em consideração aqui?

Não sei se isso é relevante para sua situação, mas pode ser interessante notar que um anel maior aumentará a área de cobertura do cache do caminho da rede rx. Nas marcas de micropigmentação, você verá que um anel maior geralmente prejudica o desempenho. Dito isto, em aplicativos da vida real, se um pacote é descartado, geralmente é um negócio maior do que um pequeno ganho de desempenho em explosões de velocidade.

Fonte: Eu trabalhei na VMware.


1
Obrigado Roger, excelente primeira resposta. Eu não estou nessa empresa há algum tempo, então esse problema está fora do meu radar, mas, para ser completo, existe um problema de uso de memória para definir esses valores ao máximo? O artigo da KB faz parecer que você pode usar muita memória dessa maneira, mas parece que a quantidade seria bem pequena. Eu pergunto isso porque também não está claro como dimensionar esses valores além de tentativa e erro, portanto, pode ser mais fácil configurá-los para o máximo, se não houver pouca ou nenhuma desvantagem.
precisa saber é o seguinte

1
Re: uso de memória, duas coisas que eu observaria: 1) Se você não estiver usando quadros jumbo, eu concordo, a quantidade de memória na configuração máxima ainda é muito pequena. Se você estiver usando quadros jumbo, o tamanho do buffer é de cerca de 9kb e, portanto, você está usando mais memória. 2) A quantidade de memória disponível em um pool não paginado é menor que a quantidade total de memória no host. Eu não sou um especialista aqui, mas este link tem um resumo muito abrangente sobre como calcular a memória disponível: blogs.technet.microsoft.com/markrussinovich/2009/03/10/...
Roger Jacobson

Muito obrigado. Espero que esta resposta ajude alguém no futuro (talvez ele vai mesmo ser-me se eu me deparo com isso de novo!)
briantist

0

Não tenho uma resposta para o ponto 1-2-3, mas você pode verificar com o seu engenheiro virtual sobre a configuração do host Vmware. Se ele é VCP, ele vai entender as coisas :)

Você realmente precisa verificar seu host, pois os problemas do Windows podem estar no host e não no convidado.

Há muitos recursos de hardware que podem explicar seus problemas, directpath io, rss, vcpu, esquema de gerenciamento de energia ...

Posso lhe dar um link que ajude sua equipe virtual ou você :)

Este link é sobre o ajuste do host http://buildvirtual.net/tuning-esxi-host-networking-configuration/

E esse gordo pdf:

http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf

E este é sobre rss:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925


Obrigado pela resposta, mas sou um VCP. Isso não é realmente sobre a configuração do host. O artigo da Microsoft ao qual vinculei explica que o contador de desempenho em questão não deve ser maior que 0 e está em várias VMs. Estou tentando entender as configurações da vNIC além do explicado no artigo da VMware KB.
Briantist 14/08/2015

-1

Não estou em condições de pesquisar e apontar totalmente para as páginas certas: por isso, estou pedindo para você procurar os detalhes por conta própria ... (desculpe)

No Cluster de Failover, existem 4 configurações que podem ser alteradas; e eles não afetarão buffers ou paginados ou não paginados ... Isso muda a maneira como o Failover Cluster toma a decisão de considerar um nó "removido". Essas configurações são:

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

Eles podem não resolver o seu problema, mas ajustá-los pode tirá-lo de problemas no momento ...

Quando voltar na segunda-feira, voltarei a este post se tiver mais perguntas

HTH, Edwin.


PS: você pode nos informar a versão do Windows que está executando?
Edwin van Mierlo 29/01

Era o Windows 2008. Recebi uma resposta da VMware (depois de todos esses meses), mas nem estou na empresa em que estava quando isso aconteceu. A resposta não é direta e eu pretendo ler a resposta e postar alguma coisa, mas ainda não tive tempo. Agradeço suas dicas sobre o cluster, mas não posso testá-las no momento.
Briantist

Percebo apenas que a postagem original tem alguns meses, o que não ficou muito claro no aplicativo Android ... Vou dar uma olhada mais de perto na próxima vez ... enquanto isso, minha resposta ainda é válida para outros usuários que podem pesquisar para experiências semelhantes.
Edwin van Mierlo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.