가상화: Hyper-V 메모리 사용 최적화

동적 메모리는 유용한 기능이지만 가상 시스템과 호스트 서버를 구성할 때는 주의를 기울여야 합니다.

Brien M. Posey

가상 작업 부하 호스트와 관련하여 실제 메모리만큼 전반적인 성능에 가장 중요한 영향을 주는 하드웨어 리소스는 없을 것입니다. 각 VM(가상 컴퓨터)에서 프로세스에 메모리를 낭비하지 않고 필요한 메모리만 사용할 수 있도록 메모리를 할당하는 것이 중요합니다. Microsoft Hyper-V에서 사용할 메모리를 할당할 때 고려해야 할 몇 가지 중요한 사항은 다음과 같습니다.

NUMA 고려 사항

Hyper-V의 메모리 관리는 기술을 요하는 작업입니다. 각 VM을 적절한 크기의 메모리로 프로비저닝해야 합니다. 또한 실제 필요한 것보다 많은 메모리를 VM에 할당하지 않도록 해야 합니다.

그 이유는 분명합니다. VM에 과도한 메모리를 할당하면 동일한 서버의 다른 VM에 할당할 수 있는 메모리 크기가 제한됩니다. VM에 너무 많은 메모리를 할당해서 실제로 성능이 저하되는 경우도 있습니다.

대부분의 최신 서버는 NUMA(Non-Uniform Memory Access) 메모리를 사용합니다. NUMA 메모리는 프로세서별로 메모리를 할당하여 성능을 개선하도록 설계되었습니다. 전용 메모리의 각 블록을 NUMA 노드라고 합니다. CPU는 비로컬 NUMA 노드보다 로컬 NUMA 노드(해당 CPU에 직접적으로 할당된 메모리)에 더 빨리 액세스할 수 있습니다.

Windows Server 2008 및 2008 R2용 Hyper-V 버전은 NUMA 노드별 메모리 구성을 직접적으로 지원하지 않습니다. 즉, 특정 NUMA 노드를 사용하도록 VM을 직접적으로 구성할 수 없습니다. 보고 자료에 따르면 Windows Server 8 버전의 Hyper-V에는 이 기능이 있습니다. 그러나 비로컬 NUMA 노드를 사용하여 VM의 가능성을 낮추는 조치를 취할 수 있습니다.

그 방법은 각 NUMA 노드의 크기를 계산하는 것입니다. 예를 들어 서버에 옥타 코어 프로세서 2개와 128GB RAM이 장착된 경우를 가정해 보겠습니다. NUMA 노드 크기는 메모리 크기(128GB)를 CPU 코어 수(16)로 나누어 계산할 수 있습니다. 이 예에서 NUMA 노드의 크기는 8GB가 됩니다.

Hyper-V는 아직 특정 VM에 특정 NUMA 노드를 할당하도록 허용하지 않습니다. 그러나 이 예에서 서버의 NUMA 노드 크기가 8GB라는 것을 알았으므로 8GB 이상이 할당된 VM은 여러 NUMA 노드의 메모리를 사용하게 될 것임을 알 수 있습니다. VM에 할당된 메모리를 8GB 미만(이 예의 경우)으로 제한하면 VM이 단일 NUMA 노드를 사용하게 되어 성능이 개선될 가능성이 높아집니다.

Hyper-V 오버헤드

메모리 관리와 관련하여 고려할 사항이 NUMA 노드만은 아닙니다. 호스트 서버의 메모리 사용 방법을 계획할 때는 가상화 관련 오버헤드를 고려하는 것이 매우 중요합니다. 가상화 오버헤드와 관련한 주요 고려 사항으로는 두 가지가 있습니다. 첫째, 일부 메모리를 부모 파티션용으로 예약해야 합니다.

하이퍼바이저용으로 300MB 이상, 그리고 루트 파티션에서 실행되는 호스트 OS용으로 512MB 이상을 예약해야 합니다. 그러나 모범 사례 지침에 따르면 부모 파티션용으로 2GB를 예약하는 것이 좋습니다.

호스트 파티션을 Hyper-V가 아닌 다른 용도로 사용해서는 안 됩니다(그러나 관리 에이전트, 백업 에이전트 및 방화벽과 같은 보안 및 인프라 소프트웨어는 실행할 수 있음). 따라서 2GB로 권장하는 것은 부모 파티션에서 추가 응용 프로그램 또는 서버 역할을 실행하지 않을 것이라 가정했을 경우입니다.

Hyper-V는 호스트 파티션에 직접 메모리를 할당하도록 허용하지 않습니다. Hyper-V는 기본적으로 남은 메모리를 사용합니다. 따라서 호스트 서버의 메모리 중 2GB를 부모 파티션에 사용할 수 있도록 할당되지 않은 상태로 남겨 두어야 합니다.

게스트 컴퓨터 메모리 할당

VM이 통합 서비스와 기타 가상화 관련 프로세스에 적은 양의 메모리를 사용한다는 점도 가상화 오버헤드와 관련하여 고려해야 할 사항입니다. 메모리 크기가 작으므로 각 VM에 최소 메모리만 제공할 계획이 있지 않는 한 일반적으로 추가 메모리 할당에 대해 염려하지 않아도 됩니다.

RAM이 1GB 미만인 VM은 가상화 관련 오버헤드에 약 32MB의 메모리만 사용합니다. 추가 RAM의 1기가바이트당 8MB를 추가해야 합니다. 예를 들어 RAM이 2GB인 VM은 가상화 관련 오버헤드에 40MB(32MB + 8MB)의 메모리만 사용합니다. 마찬가지로 4GB의 메모리가 있는 VM은 오버헤드로 64MB의 메모리를 사용합니다.

동적 메모리

Windows Server 2008 R2 SP1은 VM이 현재 작업 부하에 따라 동적으로 메모리를 사용하도록 지원하는 새로운 동적 메모리 기능을 도입했습니다. 이 기능을 사용하면 서버의 실제 메모리를 오버 커밋하여 가능한 것보다 더 많은 VM을 실행할 수도 있습니다. 동적 메모리에는 수많은 이점이 있지만 몇 가지 모범 사례 지침을 따라 메모리의 VM이 부족해지지 않도록 해야 합니다.

먼저 동적 메모리를 사용하는 것이 항상 최선의 옵션은 아닙니다. VM별로 동적 메모리를 사용하거나 사용하지 않도록 설정할 수 있습니다. 동적 메모리를 사용하는 것이 정말로 유용한 VM에서만 동적 메모리를 사용하도록 설정해야 합니다.

VM의 작업 부하도 가장 중요한 고려 사항 중 하나입니다. VM의 응용 프로그램이 고정된 크기의 메모리를 사용하도록 설계된 경우 동적 메모리를 사용하는 대신 VM에 정확히 필요한 크기의 메모리만 제공하는 것이 좋습니다.

메모리를 많이 사용하는 응용 프로그램의 경우도 마찬가지입니다. 사용 가능한 최대 메모리를 사용하도록 설계된 응용 프로그램도 있습니다. 이러한 응용 프로그램은 동적 메모리를 사용하도록 허용하면 서버의 실제 메모리를 순식간에 고갈시킬 수 있습니다. 이 경우 이러한 유형의 응용 프로그램을 실행 중인 VM에 고정된 크기의 메모리를 할당하는 것이 좋습니다.

마지막으로 VM이 여러 NUMA 노드의 메모리를 사용하려고 할 경우 서버의 성능이 저하될 수 있습니다. 따라서 서버가 NUMA 메모리를 사용하고 있고 성능이 중요한 문제일 경우 동적 메모리를 사용하지 않는 것이 좋습니다.

시작 RAM

동적 메모리와 관련하여 알고 있어야 할 가장 중요한 개념 중 하나는 시작 RAM입니다. 동적 메모리를 사용할 때는 각 VM에 시작 RAM에 대한 값을 할당해야 합니다. 이 값은 VM이 부팅될 때 처음 사용하게 될 실제 메모리의 크기를 나타냅니다. 더 중요한 사실은 시작 RAM이 VM에서 항상 사용하는 실제 메모리의 최소 크기도 나타낸다는 점입니다. VM의 메모리 사용은 시작 RAM 값 아래로 떨어질 수 없습니다.

이에 따라 Microsoft는 VM에 시작 RAM을 대량으로 할당하지 않을 것을 권장합니다. 시작 RAM은 VM이 실행 중인 OS에 따라 결정하는 것이 가장 좋습니다. Microsoft는 Windows 7, Windows Vista, Windows Server 2008 및 Windows Server 2008 R2를 실행 중인 VM의 시작 RAM으로 512MB를 권장합니다. VM이 Windows Server 2003 또는 Windows Server 2003 R2를 실행하게 될 경우 128MB의 시작 RAM을 권장합니다.

VM이 동적 메모리를 사용하려면 해당 VM에서 실행 중인 OS에서 동적 메모리를 지원해야 합니다. Windows XP는 동적 메모리를 지원하지 않습니다. 동적 메모리를 사용하도록 구성된 VM에서 Windows XP를 실행하려고 하면 OS만 시작 RAM에 액세스할 수 있게 됩니다.

다른 구성 작업으로 넘어가기 전에 모든 VM의 총 시작 RAM이 서버에 설치된 실제 RAM을 초과하지 않는지 확인해야 합니다. 초과할 경우 일부 VM을 제거하거나 메모리를 추가해야 합니다.

또한 최대 RAM 값을 조정해야 합니다. 이 값은 VM이 사용할 수 있는 최대 실제 메모리를 나타냅니다. 기본적으로 Hyper-V는 각 VM의 최대 RAM을 64GB로 설정합니다. 일부 VM에서 실제 메모리가 이보다 적게 필요한 경우 최대 RAM을 더 작은 값으로 설정하는 것이 좋습니다.

메모리 가중치

동적 메모리를 사용하는 가장 중요한 이유는 메모리를 오버 커밋할 수 있기 때문입니다. 이렇게 하면 VM이 필요할 때 필요한 메모리에 액세스할 수 있습니다. 하드웨어 리소스를 오버 커밋할 경우의 가장 큰 단점은 리소스가 고갈될 수 있다는 점입니다. 동적 메모리의 경우 VM이 사용 가능한 실제 메모리를 모두 소비하고도 더 많은 메모리를 필요로 할 가능성이 충분합니다.

이 문제에 대한 장기적인 해결책은 서버에 VM의 요구 사항을 충족할 수 있는 충분한 메모리를 장착하는 것입니다. 한편 단기적인 해결책은 메모리 사용 우선 순위를 설정하는 것입니다.

거의 모든 호스트 서버에는 다른 VM보다 중요한 VM이 몇 가지 있습니다. Hyper-V는 실제 메모리가 부족할 경우 우선 순위가 높은 VM에 메모리가 먼저 할당되도록 우선 순위 설정을 지원합니다. 메모리 가중치를 조정하여 VM의 동적 메모리 요구 사항 우선 순위를 조정할 수 있습니다. 메모리 가중치가 높은 VN은 메모리 가중치가 낮은 VM보다 우선합니다.

동적 메모리를 사용하는 각 VM에 대해 구성해야 하는 또 다른 설정은 메모리 버퍼입니다. 메모리 버퍼 설정은 각 VM이 버퍼로 예약해야 하는 메모리의 양을 제어합니다. 이 값은 백분율로 표현됩니다. 예를 들어 VM이 4GB의 커밋된 메모리를 사용 중이고 메모리 버퍼가 50%로 설정된 경우 VM이 최대 소비할 수 있는 메모리는 6GB입니다.

메모리 버퍼는 VM에서 버퍼 메모리를 사용할 수 있도록 보장하지 않습니다. VM이 요청해야 하는 메모리의 크기를 제어하는 역할만 합니다. 메모리 버퍼는 백분율로 표현되므로 버퍼링된 메모리의 크기는 VM이 현재 시점에 사용하고 있는 메모리의 크기에 따라 변경됩니다. 동적 메모리를 사용하는 모든 VM은 최소 크기의 메모리를 사용하기 시작합니다. 작업 부하가 메모리에 가하는 압박에 따라 메모리 사용을 동적으로 조정합니다.

메모리 구성

VM 메모리 사용을 실제로 구성하는 프로세스는 간단합니다. Hyper-V Manager를 열고 VM에서 마우스 오른쪽 단추를 클릭합니다(각 VM의 메모리가 개별적으로 관리되므로). 바로 가기 메뉴에서 설정 명령을 선택합니다. 설정 대화 상자가 표시되면 메모리를 클릭합니다.

Hyper-V는 VM에 정적 메모리를 할당하거나 동적 메모리를 사용하는 옵션을 제공합니다(그림 1 참조). 동적 옵션을 선택할 경우 설정 대화 상자를 통해 직접 시작 RAM, 최대 RAM, 메모리 버퍼 및 메모리 가중치를 조정할 수 있습니다.

You can adjust the memory allocation for a virtual machine through the Settings dialog box

그림 1 설정 대화 상자를 통해 가상 컴퓨터의 메모리 할당을 조정할 수 있습니다.

호스트 서버의 실제 메모리 리소스가 제한적인 경우 일반적으로 정적 메모리와 동적 메모리가 적절히 절충됩니다. 정적 메모리가 일반적으로 더 나은 성능을 제공합니다(적절한 메모리가 할당되었다고 가정할 경우). 동적 메모리는 까다로울 수 있지만 일반적으로 더 높은 VM 밀도가 허용됩니다.

Brien Posey

Brien Posey는 Microsoft MVP이며 수천 개의 기사와 수십 개의 서적을 집필한 기술 관련 프리랜서 작가입니다. 문의 사항이 있으면 Posey의 웹 사이트인 brienposey.com을 방문해 보십시오.

관련 콘텐츠