Shadow Page Table
현대 운영체제들은 메모리 관리를 하기 위해 두 가지 주소 체계를 사용하고 있는데, 하나는 물리적 주소(Physical Address)이며 다른 하나는 가상 주소(Virtual Address)이다. 물리적 주소는 실제 호스트 시스템에 장착된 물리적인 메모리의 크기에 해당하지만, 가상 주소는 운영체제에서 실행되는 모든 프로세스들에게 할당되는 주소이다. 32비트 운영체제의 경우 각 프로세스들은 약 4GB까지, 64비트 운영체제의 경우 이론적으로 약 16TB까지의 가상 주소를 사용할 수 있게 된다.
이렇게 각 프로세스들은 전부 자신만의 가상 주소 값을 가지게 되므로 물리적 주소의 실제 크기에 상관없이 운영체제에서 제공하는 크기만큼 소유하게 된다.
이러한 프로세스들이 포인터를 통해 가리키는 메모리 주소 위치는 실제 물리적인 메모리 주소가 아닌 가상 메모리 주소의 위치이므로, 누군가 이러한 가상 메모리 주소의 위치를 실제 물리적인 메모리 주소의 위치로 연결시켜 주는 역할을 담당해야 하며, 이것을 PTE(Page Table Entery)라 부르는 테이블에 인덱스화해서 저장하여 사용한다. 또한 이러한 연산 작업에 대한 부하를 줄이고자 CPU에 포함된 MMU(Memory Management Unit)와 TLB(Translation Lookaside Buffer)의 도움을 받는다.
여기까지는 전통적인 시스템 환경, 즉 가상화가 아닌 시스템에서의 이야기이지만, ESXi 서버가 실행되는 시스템에서는 조금 틀려진다. 예를 들어, 2GB 메모리를 지닌 가상 머신이 있다고 하자.
이 가상 머신을 실행하게 되면 VMkernel은 가상머신에게 2GB의 연속된 물리적인 메모리가 존재하는 것처럼 인식시켜 주며, 가상 머신은 자신에게 물리적인 2GB 메모리가 존재하는 것으로 착각하게 된다. 이렇게 VMkernel 위에서 초기 생성 시 설정된 메모리 크기만큼을 전부 실제 자신의 물리적인 메모리라며 착각하고 실행되는 가상 머신들이 한두 개가 아니다.
VMkernel은 모든 가상 머신들이 실제로 자신은 연속된 물리적인 메모리를 가지고 있다는 환상을 심어주어야 한다. 또한 게스트 가상 메모리 주소의 위치가 최종적으로 호스트 물리 메모리의 어떤 위치에 해당하는지에 대한 주소 매핑 작업을 해야만 하기 때문에, 결국 또 다른 주소 매핑을 도울 테이블이 필요하다. ESXi 서버에서는 그것을 Shadow Page Table이라고 부른다. Shadow Page Table을 통해 게스트 가상 메모리와 게스트 물리 메모리 간, 그리고 게스트 물리 메모리와 호스트 물리 메모리 간의 매핑이 이루어지게 된다. TLB 캐시는 직접 Shadow Page Table을 뒤져서 게스트 가상 메모리에서 호스트 물리 메모리까지의 매핑 주소 값을 직접 읽게 되어 일반적인 가상화의 메모리 주소 매핑에 따른 어려움을 해결하 수 있게 되었다.
Shadow Page Table을 통해 실제 게스트 가상 메모리와 호스트 물리 메모리 간의 매핑에 대한 숙제가 해결되었으나, 수많은 가상 머신들이 제한된 호스트 시스템의 물리적인 메모리를 좀 더 효과적으로 사용하고자 하는 노력은 오히려 메모리 오버커밋먼트와 같은 기술로 빛을 발한다. 메모리 오버컷먼트(Over-commitment)가 의미하는 기능은 매우 단순하다.
물리적으로 메모리 크기가 제한된 시스템 위에 전체 가상 머신의 메모리 합이 더 초과되더라도 정상적으로 운영할 수 있게끔 해주는 것이다.
간단하게 예를 들어, 4GB 물리적 메모리가 장착된 호스트 시스템 위에 2GB의 메모리를 지닌 가상 머신이 세 개가 실행되더라도 정상 작동되게끔 지원해 주는 것이 메모리 오버커밋먼트 기능이다.
ESXi 서버는 이러한 메모리 오버커밋먼트 기능을 크게 다음과 같은 세 가지 방법으로 지원하고 있다.
• Transparent Page Sharing
• Memory Ballooning
• 하이퍼바이저 Swapping(스와핑)
이 세 가지 기술에 대해서는 다음글에 기술하도록 하겠다.
'⫸VMware' 카테고리의 다른 글
VMware 리소스 가상화 - 네트워킹 가상화 (0) | 2022.10.04 |
---|---|
VMware 리소스 가상화 - 메모리 가상화 구현 기술 (0) | 2022.10.04 |
VMware 리소스 가상화 - CPU 가상화 (0) | 2022.10.03 |
VMware ESXi 서버구조 - VMkernel (0) | 2022.10.02 |
VMware의 기능 소개(HA, Fault Tolerance, 기타 기능) - ② (0) | 2022.10.02 |