VMXNET3 recebe tamanho de buffer e uso de memória

11

Antecedentes

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 .

Nós migramos recentemente esse cluster totalmente para o ambiente VMware, e parece que o evento descrito acima pode ter sido a causa da interrupção.

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

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

Uma quantidade pequena o suficiente para que eu não esteja preocupado 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.

Perguntas

  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 no próprio NIC no sistema operacional convidado, presumo que sejam configurações do driver. Isso me faz pensar que a RAM usada pode ser um pool paginado ou não paginado.
    1. Isso está correto?
    2. Se sim, eu deveria estar preocupado com isso?
  4. Há preocupações que não estou levando em conta aqui?

Estamos tentando determinar se há uma desvantagem em configurá-los para seus máximos nas VMs afetadas, além do uso de memória do host VMware. Se estivermos aumentando o risco de perda de memória do pool no guest, 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.

    
por briantist 07.08.2015 / 23:25

3 respostas

4

What is the relationship between number of buffers and ring size?

Eles são relacionados, mas independentes. O rx "ring" refere-se a um conjunto de buffers na memória que são usados como uma fila para passar pacotes de rede de entrada do host (hipervisor) para o guest (VM do Windows). 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 anel. Em seguida, o host aciona um IRQ no convidado, para o qual o driver convidado responde retirando o pacote do pacote e enviando-o para a pilha de rede do sistema operacional convidado, que presumivelmente o envia ao aplicativo convidado para recebê-lo. Assumindo que os pacotes estão chegando devagar o suficiente, e o driver convidado está processando-os com rapidez suficiente, sempre deve haver um slot livre no anel. No entanto, se os pacotes estão chegando muito rápido, ou o convidado está processando-os muito lentamente, o anel pode ficar cheio e os pacotes podem ser descartados (como você viu na sua situação).

Aumentar o tamanho do anel pode ajudar a atenuar esse problema. Se você aumentá-lo, mais slots estarão disponíveis no ringue 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 pode nem sempre ser imediatamente devolvido ao motorista. Se isso acontecer, ter buffers de reposição para preencher o anel significa que você pode ir mais longe sem perder pacotes.

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

How does one calculate the amount of memory used for given values of these settings?

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. Então, se você tem 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 que você precisa se preocupar.

Because these settings are on the NIC itself within the guest OS, I assume they are driver settings. This makes me think that the RAM used might be paged or non-paged pool.

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

Are there concerns I'm not taking into account here?

Não tenho certeza se isso é relevante para sua situação, mas pode ser interessante notar que um anel maior aumentará o espaço ocupado pelo cache do caminho de rede rx. Em microbenchmarks, você verá que um anel maior geralmente prejudica o desempenho. Dito isso, em aplicativos da vida real, se um pacote for descartado, isso geralmente é maior do que um pequeno ganho de desempenho em rajadas de velocidade.

Fonte: Eu trabalhei na VMware.

    
por 01.06.2017 / 01:19
0

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

Você realmente precisa verificar seu host porque 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 ...

Eu posso te dar um link que ajude sua equipe virtual, ou você:)

Este link é sobre como ajustar o host link

E esta gordura em pdf:

link

E esse aqui é sobre rss:

link

    
por 14.08.2015 / 15:30
-1

Não estou em posição de pesquisar e direcionar você para as páginas certas: por isso, peço que você procure os detalhes por si mesmo ... (desculpe)

No Failover Cluster existem 4 configurações que podem ser modificadas; e eles não afetarão buffers ou paginados ou não paginados ... Ele altera 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 tirar você de problemas no momento ...

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

HTH, Edwin.

    
por 29.01.2016 / 21:48