VMXNET3 수신 버퍼 크기 및 메모리 사용량


12

배경

Windows 장애 조치 클러스터가 중단 된 사고가있었습니다. 사후 검토 에서이 기사에서 설명한대로 노드가 "제거" 되었다고 표시 했습니다 .

최근에이 클러스터를 VMware 환경으로 완전히 마이그레이션했으며 위에서 설명한 이벤트가 중단의 원인 일 수 있습니다.

이에 대한 관련 VMware KB 기사에서는 설정 Small Rx BuffersRx Ring #1설정을 늘리는 방법에 대해 설명 하지만 너무 많이 늘리면 호스트의 메모리 오버 헤드가 크게 증가 할 수 있습니다.

Network Interface\Packets Received Discarded~ 150 개의 Windows VM에 대한 성능 카운터를 감사 한 후 16 개 게스트에서 22 개의 vNIC에 버려진 패킷이있었습니다.

추가 메모리 사용량으로 호스트에 부담을주지 않을 정도로 적은 양이지만 이러한 설정에 메모리가 사용되는 방식과 메모리의 출처를 이해하고 싶습니다.

질문

  1. 버퍼 수와 링 크기 사이의 관계는 무엇입니까?
  2. 이러한 설정 값에 사용 된 메모리 양을 어떻게 계산합니까?
  3. 이러한 설정은 게스트 OS 내의 NIC 자체에 있기 때문에 드라이버 설정이라고 가정합니다. 이것은 사용 된 RAM이 페이징되거나 비 페이징 풀이라고 생각합니다.
    1. 이 올바른지?
    2. 그렇다면 걱정해야합니까?
  4. 여기에서 고려하지 않은 문제가 있습니까?

VMware 호스트 메모리 사용량 이외의 영향을받는 VM에서이를 최대 값으로 설정하는 데 단점이 있는지 확인하려고합니다. 예를 들어 게스트에서 풀 메모리가 고갈 될 위험이 증가하면 소규모로 시작하는 경향이 더 큽니다.

이러한 질문 중 일부 (아마도 모두)는 VMware 또는 가상화에만 국한되지 않을 수 있습니다.


물리적 NIC의 TCP 오프로드 엔진이 잘못 작동하고 VM이 이상한 동작을 보이는 경우 실제로 결함이있는 것을 보았습니다. 후속 조치가 이어질 수 있습니다.
SpacemanSpiff

@SpacemanSpiff 검사 할 가치가 있지만 150 개 중 16 개 VM 만 동작을 보여줍니다. 이 16 개 노드는 12 개 노드 클러스터에 분산되어 있으며, 모두 KB 기사에 설명 된 증상을 유발하는 것으로 보이는 트래픽이 급증합니다. 이 중 일부는 Windows 클러스터이므로 DRS와 함께 이동하지 않습니다. 그렇지 않으면 영향을받는 모든 게스트가 vMotioned 전에 특정 호스트에있는 동안 손실 된 패킷을 표시했는지 여부를 조사 할 수 있습니다. 다시 확인하고 상관 관계를 찾을 수 있는지 확인하겠습니다. 감사.
briantist

아마도 마이크로 버스 팅, 이것은 어떤 하드웨어입니까?
SpacemanSpiff

@SpacemanSpiff IBM 서버, 몇 가지 다른 모델 및 개정판, 어떤 NIC도 확실하지 않으므로 내일의 세부 사항을 확인할 수 있습니다.
briantist

답변:


5

버퍼 수와 링 크기 사이의 관계는 무엇입니까?

그들은 관련이 있지만 독립적입니다. rx "링"은 들어오는 네트워크 패킷을 호스트 (하이퍼 바이저)에서 게스트 (Windows VM)로 전달하기 위해 큐로 사용되는 메모리의 버퍼 세트를 나타냅니다. 메모리는 네트워크 드라이버에 의해 게스트에 예약되어 호스트 메모리에 매핑됩니다.

새로운 네트워크 패킷이 호스트에 들어 오면 링에서 사용 가능한 다음 버퍼에 배치됩니다. 그런 다음 호스트는 게스트에서 IRQ를 트리거합니다. 게스트 드라이버는 링에서 패킷을 가져와 게스트 OS의 네트워크 스택으로 디스패치하여 게스트 OS가 응답하도록 게스트 응용 프로그램으로 보냅니다. 패킷이 충분히 느려지고 게스트 드라이버가 충분히 빠르게 처리한다고 가정하면 항상 링에 여유 슬롯이 있어야합니다. 그러나 패킷이 너무 빨리 들어 오거나 게스트가 너무 느리게 처리하는 경우 링이 가득 찰 수 있으며 상황에 따라 패킷이 삭제 될 수 있습니다.

링 크기를 늘리면이 문제를 완화하는 데 도움이 될 수 있습니다. 늘리면 한 번에 더 많은 슬롯을 링에서 사용할 수 있습니다. 이것은 두 번째 설정 인 "Small Rx Buffers"로 이어지며, 링의 슬롯을 채우는 데 사용할 수있는 총 버퍼 양입니다. 링의 슬롯 수만큼 버퍼가 있어야합니다. 일반적으로 더 많이 원합니다. 게스트가 게스트 네트워크 스택에 제공하기 위해 링에서 버퍼를 꺼낼 때 항상 즉시 드라이버로 반환되는 것은 아닙니다. 이 경우 링을 채우는 여분의 버퍼가 있으면 패킷을 삭제하지 않고도 더 오래 갈 수 있습니다.

Rx Ring # 1 / Small Rx Buffers는 비 점보 프레임에 사용됩니다. 기본 NIC 구성이있는 경우 이것이 유일하게 사용되는 링입니다.

이러한 설정 값에 사용 된 메모리 양을 어떻게 계산합니까?

비 점보 프레임에 대해 이야기 할 때 각 버퍼는 전체 네트워크 패킷 (약 1.5kb)을 저장할 수있을만큼 커야합니다. 따라서 8192 개의 버퍼를 사용할 수 있으면 12MB를 사용합니다. 더 큰 링은 더 많은 메모리를 사용하지만 디스크립터는 작으므로 (바이트) 실제로 걱정해야 할 버퍼입니다.

이러한 설정은 게스트 OS 내의 NIC 자체에 있기 때문에 드라이버 설정이라고 가정합니다. 이것은 사용 된 RAM이 페이징되거나 비 페이징 풀이라고 생각합니다.

예, 비 페이징 풀입니다. 링 버퍼가 페이징 된 경우 버퍼가 다시 페이징되는 동안 패킷이 손실 될 수 있습니다.

여기에서 고려하지 않은 문제가 있습니까?

이것이 귀하의 상황과 관련이 있는지는 확실하지 않지만 더 큰 링은 네트워크 rx 경로의 캐시 풋 프린트를 증가시킬 것입니다. 마이크로 벤치 마크에서는 링이 클수록 일반적으로 성능이 저하된다는 것을 알 수 있습니다. 즉, 실제 응용 프로그램에서 패킷이 손실되면 속도 버스트의 작은 성능 향상보다 일반적으로 더 큽니다.

출처 : 저는 VMware에서 근무했습니다.


1
감사합니다 Roger, 첫 번째 답변입니다. 나는이 회사에 한동안 없었기 때문에이 문제는 내 레이더에서 벗어 났지만 완전성을 위해 메모리 사용량을 최대로 설정하는 데 관심이 있습니까? KB 기사는 그렇게 많은 메모리를 사용할 수있는 것처럼 들리지만 양은 아주 작은 것 같습니다. 시행 착오 이외의 값의 크기를 조정하는 방법이 확실하지 않기 때문에 이것을 묻습니다. 따라서 단점이 없거나 적을 경우 최대로 설정하는 것이 가장 쉬울 수 있습니다.
briantist

1
다시 : 메모리 사용, 내가 주목해야 할 두 가지 : 1) 점보 프레임을 사용하지 않는 경우 최대 설정에서의 메모리 양은 여전히 ​​작습니다. 점보 프레임을 사용하는 경우 버퍼 크기는 약 9kb이므로 더 많은 메모리를 사용하고 있습니다. 2) 비 페이징 풀에서 사용 가능한 메모리 양이 호스트의 총 메모리 양보다 적습니다. 여기 전문가 모르지만,이 링크는 사용 가능한 메모리 계산하는 방법에 대한 매우 포괄적 인 개요가 있습니다 blogs.technet.microsoft.com/markrussinovich/2009/03/10/...
로저 자콥 슨

정말 고마워 이 답변이 미래에 누군가를 도울 수 있기를 바랍니다. (이 문제가 다시 발생하면 나에게도 해당 될 것입니다!)
briantist

0

1-2-3 점에 대한 답변이 없지만 가상 enginner에게 Vmware 호스트 구성에 대해 확인할 수 있습니다. 그가 VCP라면 그는 물건을 이해할 것입니다 :)

Windows 문제가 게스트가 아닌 호스트에있을 수 있으므로 호스트를 확인해야합니다.

당신의 문제, directpath io, rss, vcpu, 전원 관리 체계를 설명 할 수있는 많은 하드웨어 기능이 있습니다 ...

나는 당신에게 당신의 가상 팀 또는 당신을 도울 수있는 링크를 줄 수 있습니다 :)

이 링크는 http://buildvirtual.net/tuning-esxi-host-networking-configuration/ 호스트 조정에 관한 것입니다.

그리고이 지방 pdf :

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

그리고 이것은 rss에 관한 것입니다.

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


답장을 보내 주셔서 감사하지만 VCP입니다. 이것은 실제로 호스트 구성에 관한 것이 아닙니다. 링크 된 Microsoft 기사는 문제의 성능 카운터가 0보다 높으면 안되며 여러 VM에 있다고 설명합니다. VMware KB 기사에 설명 된 것 이외의 vNIC 설정에 대한 이해를 얻으려고합니다.
briantist

-1

나는 완전한 페이지를 찾고 당신을 올바른 페이지로 안내 할 수있는 입장에 있지 않습니다 : 그래서 나는 당신에게 세부 사항을 스스로 찾아 보라고 요구합니다 ... (죄송합니다)

Fail over Cluster에는 tweeked 될 수있는 4 가지 설정이 있습니다. 버퍼 또는 페이징 또는 비 페이징에 영향을 미치지 않습니다. 클러스터 장애 조치 (Fail over Cluster)가 노드를 "제거"한 것으로 간주하는 방식을 변경합니다. 이러한 설정은 다음과 같습니다.

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay 교차 서브넷 임계 값

그들은 당신의 문제를 해결하지 못할 수도 있지만, 이것을 조정하면 현재 문제에서 벗어날 수 있습니다 ...

월요일에 돌아 오면 추가 질문이 있으면이 게시물을 다시 확인하겠습니다.

에드윈.


PS : 실행중인 Windows 버전을 알려주시겠습니까?
Edwin van Mierlo

이것은 Windows 2008입니다.이 두 달이 지난 후 VMware에서 답장을 받았지만이 일이 있었을 때조차 회사에 없었습니다. 대답은 간단하지 않으며 답변을 읽고 무언가를 게시하는 것을 의미했지만 시간이 없었습니다. 클러스터에 대한 팁을 주셔서 감사하지만 현재 시도해 볼 수 없습니다.
briantist

원래 게시물이 두 달 전에 Android 앱에서 명확하지 않은 것으로 나타났습니다. 다음에 더 자세히 볼 것입니다 ... 한편 내 답변은 여전히 ​​검색 할 수있는 다른 사용자에게 유효합니다 비슷한 경험을 위해.
Edwin van Mierlo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.