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 Buffers
e da Rx Ring #1
configuraçã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 Discarded
contadores 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
- Qual é a relação entre o número de buffers e o tamanho do anel?
- Como se calcula a quantidade de memória usada para determinados valores dessas configurações?
- 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.
- Isso está correto?
- Se sim, eu deveria estar preocupado com isso?
- 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.
fonte
Respostas:
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.
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.
Sim, é um pool não paginado. Se os buffers de anel fossem paginados, provavelmente resultaria em pacotes descartados enquanto os buffers estavam sendo retornados.
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.
fonte
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
fonte
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.
fonte