메모리 리소스를 관리하려면 먼저 ESXi에서 어떻게 메모리 리소스를 가상화하고 사용하는지 이해해야 합니다.

VMkernel은 호스트의 모든 물리적 RAM을 관리합니다. VMkernel에서는 이 관리되는 물리적 RAM의 일부를 VMkernel 전용으로 지정합니다. 나머지 메모리는 가상 시스템에서 사용할 수 있습니다.

가상 및 물리적 메모리 공간은 페이지라는 블록으로 나뉩니다. 물리적 메모리가 가득 차면 물리적 메모리에 있지 않은 가상 페이지의 데이터가 디스크에 저장됩니다. 프로세서 아키텍처에 따라 페이지는 일반적으로 4KB나 2MB입니다. 고급 메모리 특성의 내용을 참조하십시오.

가상 시스템 메모리

각 가상 시스템은 구성된 크기와 가상화를 위한 추가 오버헤드 메모리를 더한 크기만큼 메모리를 사용합니다.

구성된 크기는 게스트 운영 체제에 표시되는 메모리의 양입니다. 이 양은 가상 시스템에 할당된 물리적 RAM의 양과 다릅니다. 후자는 호스트의 메모리 부담 수준 및 리소스 설정(공유, 예약, 제한)에 따라 다릅니다.

예를 들어, 구성된 크기가 1GB인 가상 시스템을 가정해 볼 수 있습니다. 게스트 운영 체제가 부팅되면 이 운영 체제는 1GB의 물리적 메모리를 가진 전용 시스템에서 실행되고 있다고 감지합니다. 어떤 경우에는 가상 시스템이 1GB 전체에 할당될 수도 있고, 때에 따라서는 더 적은 할당을 받을 수도 있습니다. 실제 할당량에 상관없이 게스트 운영 체제는 1GB의 물리적 메모리를 가진 전용 시스템에서 실행되는 것처럼 동작합니다.

공유
예약보다 많은 경우 가상 시스템에 상대적인 우선 순위를 지정합니다.
예약
메모리가 오버 커밋되더라도 호스트가 가상 시스템을 위해 예약하는 물리적 RAM 양의 보장되는 하한 값입니다. 가상 시스템이 과도한 페이징 없이 효율적으로 실행될 수 있을 만큼 충분한 메모리를 갖도록 예약을 설정하십시오.

가상 시스템이 해당 예약 내의 모든 메모리를 사용한 후에는 해당 양만큼의 메모리를 보유할 수 있으며 이 메모리는 가상 시스템이 유휴 상태인 경우에도 회수되지 않습니다. 일부 게스트 운영 체제(예: Linux)는 부팅 후 곧바로 구성된 모든 메모리에 액세스하지 않을 수 있습니다. 가상 시스템이 해당 예약 내의 모든 메모리를 사용하기 전까지 VMkernel이 해당 예약에서 사용되지 않은 부분을 다른 가상 시스템에 할당할 수 있습니다. 하지만 게스트의 워크로드가 증가하고 가상 시스템이 전체 예약을 사용한 후에는 이 메모리를 유지할 수 있습니다.

제한
호스트가 가상 시스템에 할당할 수 있는 물리적 RAM 양의 상한 값입니다. 가상 시스템의 메모리 할당은 구성된 크기에 의해서도 암시적으로 제한됩니다.

메모리 오버 커밋

실행 중인 각 가상 시스템에 대해 시스템은 가상 시스템의 예약(있는 경우) 및 가상화 오버헤드용으로 물리적 RAM을 예약합니다.

모든 가상 시스템의 구성된 총 메모리 크기가 호스트에서 사용 가능한 물리적 메모리 양을 초과할 수 있습니다. 하지만 이 상황이 메모리가 오버 커밋되었음을 의미하는 것만은 아닙니다. 모든 가상 시스템의 결합된 작업 메모리 공간이 호스트 메모리 크기의 결합된 작업 메모리 공간을 초과할 때 메모리가 오버 커밋됩니다.

ESXi 호스트가 사용하는 메모리 관리 기술 때문에 가상 시스템은 호스트에서 사용 가능한 물리적 RAM보다 많은 가상 RAM을 사용할 수 있습니다. 예를 들어 메모리가 2GB인 호스트가 있는 경우 메모리가 각각 1GB인 4개의 가상 시스템을 실행할 수 있습니다. 이 경우 메모리가 오버 커밋됩니다. 예를 들어 4개의 가상 시스템 모두가 유휴 상태인 경우 결합된 메모리 소비량은 2GB가 되지 않을 수 있습니다. 하지만 4GB 가상 시스템 모두가 활발하게 메모리를 사용 중이라면 메모리 공간이 2GB를 초과하여 ESXi 호스트가 오버 커밋될 수 있습니다.

일반적으로 가상 시스템에 따라 로드가 적기도 하고 많기도 해서 시간에 따라 상대적인 활동 수준이 달라질 수 있기 때문에 오버 커밋이 가능합니다.

메모리 사용률을 높이기 위해 ESXi 호스트는 유휴 가상 시스템의 메모리를 메모리가 더 필요한 가상 시스템으로 넘겨줍니다. 예약 또는 공유 매개 변수를 사용하면 중요한 가상 시스템에 메모리를 우선적으로 할당할 수 있습니다. 이러한 메모리는 사용되지 않을 경우 다른 가상 시스템에 계속 제공됩니다. ESXi는 호스트가 크게 메모리 오버 커밋되지 않은 경우라도 적절한 성능을 제공하기 위해 벌루닝, 메모리 공유, 메모리 압축 및 스와핑 등의 여러 메커니즘을 구현합니다.

메모리 오버 커밋된 환경에서 가상 시스템이 예약된 메모리를 모두 소비하면 ESXi 호스트에 메모리가 부족할 수 있습니다. 전원이 켜진 가상 시스템에는 영향이 없지만 메모리 부족 때문에 새 가상 시스템의 전원을 켜지 못할 수 있습니다.
참고: 모든 가상 시스템 메모리 오버헤드 역시 예약된 것으로 간주됩니다.

또한 ESXi 호스트에서는 메모리 압축에 설명된 것처럼 메모리 압축이 기본적으로 사용되어 메모리가 오버 커밋될 경우 가상 시스템의 성능을 향상시킵니다.

메모리 공유

메모리 공유는 호스트에서 메모리 밀도를 높이는 데 도움이 되는 독점적인 ESXi 기술입니다.

메모리 공유는 몇몇 가상 시스템이 동일한 게스트 운영 체제의 인스턴스를 실행할 수 있다는 관찰에 의존합니다. 이러한 가상 시스템에는 동일한 애플리케이션 또는 구성 요소가 로드되어 있거나 공통 데이터가 포함되어 있을 수 있습니다. 이러한 경우 호스트는 독점적인 TPS(투명 페이지 공유) 기술을 사용하여 메모리 페이지의 중복되는 사본을 제거합니다. 메모리 공유를 사용할 경우, 가상 시스템에서 실행 중인 워크로드는 일반적으로 물리적 시스템에서 실행 중인 워크로드보다 소비하는 메모리 양이 적습니다. 결과적으로 높은 수준의 오버 커밋을 효율적으로 지원할 수 있습니다. 메모리 공유를 통해 절약되는 메모리의 양은 워크로드가 거의 동일한 시스템으로 구성되어 있는지 여부에 따라 달라집니다. 워크로드가 거의 동일한 시스템으로 구성되어 있는 경우에는 더 많은 메모리를 확보할 수 있습니다. 워크로드가 다양한 경우에는 메모리 절약 비율이 낮아질 수 있습니다.

참고:

보안 문제로 인해 가상 시스템 간 투명 페이지 공유는 기본적으로 비활성화되고 페이지 공유는 가상 시스템 내 메모리 공유로 제한됩니다. 페이지 공유는 가상 시스템 간에는 발생하지 않고 가상 시스템 내에서만 발생합니다. 자세한 내용은 가상 시스템 사이에 메모리 공유의 내용을 참조하십시오.

메모리 가상화

가상화를 통해 추가적인 수준의 메모리 매핑이 적용되기 때문에 ESXi는 모든 가상 시스템에 대해 효과적으로 메모리를 관리할 수 있습니다.

가상 시스템의 물리적 메모리 일부는 매핑되지 않거나 스왑되지 않은 페이지로 매핑되거나 공유 페이지로 매핑될 수 있습니다.

호스트는 게스트 운영 체제를 인식하지 않으며 게스트 운영 체제의 자체 메모리 관리 하위 시스템을 방해하지 않고 가상 메모리 관리를 수행합니다.

각 가상 시스템의 VMM은 게스트 운영 체제의 물리적 메모리 페이지와 기반 시스템의 물리적 메모리 페이지 간 매핑을 유지합니다. (VMware에서는 기반 호스트의 물리적 페이지를 “시스템” 페이지라고 하고 게스트 운영 체제의 물리적 페이지를 “물리적” 페이지라고 표현합니다.)

각 가상 시스템에게는 0부터 시작하는 연속적 주소 지정이 가능한 물리적 메모리 공간이 보입니다. 하지만 각 가상 시스템에서 사용하는 서버의 기반 시스템 메모리는 연속적일 필요가 없습니다.

게스트 가상 대 게스트 물리적 주소는 게스트 운영 체제에서 관리됩니다. 하이퍼바이저는 게스트 물리적 주소를 시스템 주소로 변환하는 일만 담당합니다. 하드웨어 지원 메모리 가상화는 하드웨어 기능을 활용하여 게스트의 페이지 테이블과 하이퍼바이저가 유지하는 중첩된 페이지 테이블이 포함된 결합된 매핑을 생성합니다.

이 그림에서는 메모리 가상화의 ESXi 구현을 보여 줍니다.

그림 1. ESXi 메모리 매핑

이 그림에서는 메모리 가상화의 구현을 보여 줍니다.
  • 상자는 페이지를 나타내며 화살표는 여러 메모리 매핑을 보여 줍니다.
  • 게스트 가상 메모리에서 게스트 물리적 메모리로의 화살표는 게스트 운영 체제에서 페이지 테이블에 유지되는 매핑을 보여 줍니다. x86 아키텍처 프로세서에 대한 가상 메모리에서 선형 메모리로의 매핑은 표시되어 있지 않습니다.
  • 게스트 물리적 메모리에서 시스템 메모리로의 화살표는 VMM에서 유지하는 매핑을 보여 줍니다.
  • 점선 화살표는 마찬가지로 VMM에서 유지하는 섀도우 페이지 테이블에서 게스트 가상 메모리로부터 시스템 메모리로의 매핑을 보여 줍니다. 가상 시스템을 실행하는 기본 프로세서는 섀도우 페이지 테이블 매핑을 사용합니다.

하드웨어 지원 메모리 가상화

AMD SVM-V 및 Intel Xeon 5500 시리즈와 같은 일부 CPU는 두 계층의 페이지 테이블을 사용하여 메모리 가상화에 대한 하드웨어 지원을 제공합니다.

참고: 이 항목에서 "메모리"는 물리적 RAM 또는 영구 메모리를 나타낼 수 있습니다.

첫 번째 페이지 테이블 계층에는 게스트 V2P(가상에서 물리로) 변환이 저장되며 두 번째 페이지 테이블 계층에는 게스트 P2M(물리에서 시스템으로) 변환이 저장됩니다. TLB(Translation Look-aside Buffer)는 프로세서의 MMU(메모리 관리 유닛) 하드웨어가 유지하는 변환의 캐시입니다. TLB 누락은 이 캐시의 누락이며 하드웨어는 필요한 변환을 찾기 위해 메모리로 이동해야 할 경우가 많습니다. 특정 게스트 가상 주소에 대한 TLB 누락의 경우 하드웨어는 게스트 가상 주소를 시스템 주소로 변환하기 위해 두 페이지 테이블을 모두 확인합니다. 페이지 테이블의 첫 번째 계층은 게스트 운영 체제에 의해 유지됩니다. VMM은 페이지 테이블의 두 번째 계층만 유지합니다.

성능 고려 사항

하드웨어 지원을 사용하면 소프트웨어 메모리 가상화의 오버헤드가 제거됩니다. 특히 하드웨어 지원은 섀도우 페이지 테이블과 게스트 페이지 테이블의 동기화 상태 유지에 필요한 오버헤드를 제거합니다. 하지만 하드웨어 지원을 사용할 때는 TLB 누락 지연 시간이 조금 더 높습니다. 기본적으로 하이퍼바이저는 TLB 누락의 비용을 줄이기 위해 하드웨어 지원 모드에서 큰 페이지를 사용합니다. 이로 인해 하드웨어 지원을 사용할 때 워크로드에 이점이 있는지 여부는 소프트웨어 메모리 가상화를 사용할 때 메모리 가상화가 초래하는 오버헤드에 따라 달라집니다. 프로세스 생성, 메모리 매핑 또는 컨텍스트 전환 등과 같이 페이지 테이블 작업의 양이 적은 워크로드의 경우에는 소프트웨어 가상화로 인해 발생하는 오버헤드가 크지 않습니다. 이와 반대로 페이지 테이블 작업의 양이 많은 워크로드의 경우 하드웨어 지원을 사용하면 이점을 얻을 수 있습니다.

기본적으로 하이퍼바이저는 TLB 누락의 비용을 줄이기 위해 하드웨어 지원 모드에서 큰 페이지를 사용합니다. 게스트 가상 대 게스트 물리 및 게스트 물리 대 시스템 주소 변환 모두에 큰 페이지를 사용하면 가장 높은 성능이 구현됩니다.

LPage.LPageAlwaysTryForNPT 옵션은 게스트 물리 대 시스템 주소 변환에 큰 페이지를 사용하기 위한 정책을 변경할 수 있습니다. 자세한 내용은 고급 메모리 특성 항목을 참조하십시오.

큰 페이지 크기 지원

ESXi는 큰 페이지 크기를 제한적으로 지원합니다.

x86 아키텍처에서는 시스템 소프트웨어가 4KB, 2MB 및 1GB 페이지를 사용할 수 있습니다. 4KB 페이지는 작은 페이지라고 하며, 2MB 및 1GB 페이지는 큰 페이지라고 합니다. 큰 페이지는 TLB(Translation Lookaside Buffer) 부담을 줄이고 페이지 테이블 처리 비용을 줄여 워크로드 성능을 향상시킵니다.

가상화된 환경에서 큰 페이지는 하이퍼바이저와 게스트 운영 체제가 독립적으로 사용할 수 있습니다. 게스트와 하이퍼바이저에서 모두 큰 페이지를 사용할 경우 성능 향상 효과가 가장 크지만, 대부분의 경우 하이퍼바이저 수준에서만 큰 페이지를 사용하는 경우에도 성능 향상이 나타날 수 있습니다.

ESXi 하이퍼바이저는 기본적으로 게스트 vRAM에 2MB 페이지를 사용합니다. vSphere ESXi는 게스트 vRAM에 1GB 페이지를 사용하는 것을 제한적으로 지원합니다. 자세한 내용은 "게스트 vRAM에 1GB 페이지 사용" 을 참조하십시오.