VM 메모리 할당에 대한 권장 사항 일반/Hyper-V

VM 메모리 할당에 대한 권장 사항 일반/Hyper-V

VM 설정에 대한 기본적인 질문이 있습니다. 저는 Hyper-V를 사용하고 있지만 질문이 꽤 일반적인 것 같습니다. 이것은 홈 오피스용이므로 많은 작업 없이도 VM에서 합리적으로 좋은 성능을 얻고 싶습니다. 소프트웨어를 테스트/디버깅하기 위해 VM을 사용합니다. 이상적으로는 모든 OS를 시작하지만 한 번에 하나만(대부분의 경우 0)만 활발하게 사용하게 됩니다.

VM에 대한 메모리 할당에 대한 몇 가지 일반적인 지침이 있습니까? 극단적인 경우에는 총 메모리를 VM 수로 나눌 수 있습니다(총 4GB, VM 4개 -> 각각 1GB). 극단적인 경우에는 모든 VM에 전체 메모리를 제공하고 OS가 중재하도록 할 수 있습니다. 둘 다 틀린 것 같아요! 나는 합리적인 성능을 위한 "경험의 법칙"을 찾고 있습니다. VM 서버가 VM의 메모리를 어떻게 관리하는지 모르겠습니다.

[편집] 추가 메모리가 있는 경우 Hyper-V(2008 R2 버전)가 VM에 추가 메모리를 동적으로 제공할 수 있다고 잘못 가정했기 때문에 이 질문을 했습니다. 내 생각은 사용량이 한 번에 하나의 VM만 정점에 있는 한 메모리를 과도하게 할당할 수 있다는 것이었습니다. Hyper-V는 시작될 때 각 VM에 고정 메모리를 할당하려고 하기 때문에 일부 VM을 종료하고 필요한 것만 실행하거나 VM의 메모리 할당을 낮추고 실제 메모리가 제대로 작동하는지 확인해야 합니다. 모든 할당과 Hyper-V 프로세스 및 (아마도) 호스트 OS에 충분합니다.

제공된 답변에 명시된 바와 같이 VMWare에는 이러한 라인에 더 많은 옵션이 있는 것 같습니다. [/편집하다]

고마워요, 브렛

답변1

일반적으로 최악의 상황에서 모든 표준 기능이 RAM에서 안정적으로 작동할 수 있을 만큼 충분한 물리적 RAM이 있다는 것을 알고 싶습니다. 그 마법의 숫자는 OS마다 다르며 게스트 OS를 사용하는 용도에 따라 크게 달라집니다. 수백 메가 RAM이 있는 Windows 2003 Server, 30Meg 이하의 일부 Linux 컴팩트 배포판 등을 부팅할 수 있지만, 수 기가바이트 데이터베이스가 있는 게스트에서 SQL Server를 실행하려면 다음을 수행해야 합니다. 실제로 있다고 생각되는 RAM 몇 기가를 백업하는 실제 RAM이 있는지 확인하고 싶습니다.

하이퍼바이저가 RAM을 처리하는 방법은 공급업체와 제품에 따라 많이 다릅니다. Hyper-V는 메모리 오버커밋을 지원하지 않으므로 물리적으로 사용 가능한 용량에 따라 RAM을 할당하는 것으로 제한됩니다. VMware의 ESX는 VM이 ​​사용량이 많고 물리적 RAM의 총량이 로드를 충족하기에 부족할 때 발생하는 상황을 제어하기 위해 오버 커밋을 허용하고 경합 중재(공유)에 대한 규칙을 설정합니다. Hyper-V 환경에서는 이러한 수준의 제어가 불가능하므로 충분한 RAM을 미리 할당해야 합니다.

VMware에는 메모리 오버커밋을 해결하는 데 도움이 되는 몇 가지 다른 트릭이 있습니다. 투명한 페이지 공유 및 메모리 벌루닝.

투명한 페이지 공유는 기본적으로 RAM을 위한 단일 인스턴스 스토리지입니다. 하이퍼바이저는 각 VM에 할당된 RAM 블록을 모니터링하고 여러 VM에 공통 블록이 존재하는 것을 발견하면 단일 복사본만 유지하고 모든 VM을 해당 복사본으로 지정합니다. 이후에 VM이 있는 경우 해당 블록에 쓰기를 시도하면 나쁜 일이 발생하지 않도록 복사본이 분할됩니다. 동종 VM 환경에서는 성능에 영향을 주지 않고 상당한 양의 RAM을 절약할 수 있습니다.

메모리 벌루닝(Memory Ballooning)은 하이퍼바이저가 하나의 VM에 할당된 RAM을 "빌려" 해당 게스트 내에 (큰) 메모리 청크를 할당하는 전자의 게스트 OS 드라이버를 사용하여 더 중요한 VM에 제공할 수 있는 메커니즘입니다. 할당되면 하이퍼바이저는 벌룬 드라이버가 할당한 메모리를 지원하는 물리적 RAM을 안전하게 재할당할 수 있습니다. RAM을 재할당하기 위해 하이퍼바이저가 게스트 VM의 메모리를 디스크로 바꾸는 직접적인 접근 방식과 비교할 때 이 방법의 장점은 물리적 RAM을 잃은 게스트가 메모리가 무엇인가에 의해 사용되고 있다는 것을 인식한다는 것입니다. "빌린" RAM이 게스트 내의 중요한 시스템 기능에 할당될 위험이 크게 줄어듭니다.

다음을 추가하도록 편집되었습니다. 사용 가능한 실제 RAM 양을 초과하는 메모리 요구 사항을 사용하는 VM을 시작하려고 할 때 Hyper-V에서 어떤 일이 발생하는지 확인하려고 시도한 적이 없습니다. 내가 찾을 수 있는 모든 문서에는 VM이 ​​사용자가 가지고 있는 모든 RAM을 가져간다고 명시되어 있습니다. 그에 맞게 구성된 다음 하이퍼바이저와 호스트 OS에 남은 부분이 할당됩니다. Hyper-V에는 CPU 리소스에 대한 메커니즘을 제공하지만 최소 RAM 예약을 VM에 적용한 다음 풀에서 나머지를 할당하는 메커니즘이 없습니다. 이번에도 VMware의 ESX\ESXi는 이 옵션을 제공합니다.

하이퍼바이저와 호스트 OS 모두에 필요한 물리적 메모리에 대해서도 계획해야 한다는 점을 기억할 가치가 있습니다(베어메탈 Hyper-V 서버를 실행하는 경우 후자는 무시하세요). 마이크로소프트의Hyper-V에 대한 성능 조정 조언VM에 있는 XGig RAM 외에도 다음이 필요하다고 명시되어 있습니다.

  • 하이퍼바이저용 300MB
  • 각 가상 머신에 할당된 첫 번째 RAM의 경우 32MB 추가
  • 각 가상 머신에 RAM이 추가로 할당될 때마다 8MB가 추가됩니다.
  • 루트 파티션에서 실행되는 호스트 운영 체제용으로 512MB 추가

이를 위한 물리적 RAM이 충분하지 않으면 성능이 심각하게 영향을 받을 수 있으며 안정성에도 영향을 미칠 수 있습니다.

답변2

Windows Server 2008 R2의 Hyper-V하다동적 메모리 기능을 지원합니다(SP1을 실행 중입니다. RTM 버전인지는 확실하지 않습니다). 귀하의 질문은 꽤 오래되었으므로 귀하가 질문했을 때 그렇지 않았을 수도 있습니다.

각 게스트 VM에 정적 메모리를 할당하기 시작했지만 빠르게 서버를 최대화했습니다. 동적 메모리를 사용하면 VM당 초기(낮은) 양과 최대 양을 할당할 수 있습니다. 그런 다음 요청 시 메모리를 할당하고 사용되지 않은 메모리도 복구합니다. 이를 설정하려면 각 VM의 설정을 편집해야 합니다. 새 VM을 생성할 때는 사용할 수 없습니다. 방금 동적 메모리를 사용하도록 여러 VM을 재구성하고 전체 메모리 사용량을 거의 절반으로 줄였습니다.

할당된 메모리를 보여주는 Hyper-V 관리자 스크린샷

동적 메모리용으로 구성한 VM에는 현재 메모리 수요와 상태가 표시됩니다. 강조 표시된 VM은 초기 할당량인 1GB 내에서 계속 실행 중입니다. Exchange 서버(위에서 두 번째)는 크고 뚱뚱한 돼지로 초기 1GB를 날려버리고 몇 GB를 더 할당했습니다. 이 기능은 구성 가능한 버퍼(기본적으로 20%)를 허용하므로 Hyper-V는 Exchange에 필요한 양과 추가 금액을 제공했습니다.

답변3

Hyper-V는 VMWare처럼 메모리 페이지 공유를 수행할 수 없기 때문에 일반적인 질문은 아닙니다. 해당 기술은 VM 메모리 할당 방식을 엄청나게 바꿀 수 있습니다. Hyper-V가 이를 지원하는 경우 VM에 시작 양을 할당한 다음 시간 경과에 따른 VM당 실제 사용량을 살펴보고 해당 동작에 대해 더 많이 발견하면 할당을 변경하는 것이 좋습니다.

관련 정보