Hyper-V 메모리 관리 (Memory management)

이번 포스트에서는 Hyper-V에서 부모 파티션(Parent Partition)과 자식 파티션(Child Partition, Guest 혹은 VM)에게 어떻게 메모리 리소스를 소스를 할당하는 지를 간단히 알아 보겠습니다.

기본적으로 윈도우는 각 프로세스가 물리메모리(Physical Memory)에 접근 하는 것이 아니라 가상 메모리(Virtual Memory)를 이용합니다. 프로세스가 가상메모리 공간의 특정 주소에 액세스 하려고 하면 페이징(Paging, 우리가 아는 페이징 파일과는 다른 의미)이라는 과정을 거쳐 실제 물리메모리에 접근합니다.

이와 같은 가상 메모리 공간의 개념을 확장하여 Hyper-V에서는 아래 그림과 같이 각 Guest들을 위한 메모리 공간 할당을 하게 됩니다.

image

각 Guest OS에서 가상메모리 역할을 하는 GVA(Guest Virtual Address) Space가 있고. 이것을 물리 메모리에 연결할 주소 테이블 정보를 담은 GPA(Guest Physical Address) Space 그리고 실제 물리 주소인 SPA(System Physical Address) Space가 있습니다.

그래서  Guest 머신은 자신의 가상메모리인 GVA를 통해 GPA를 실제 물리 메모리인 것처럼 액세스 하게 되고, GPA는 그것을 물리 메모리 주소(SPA)에 매핑(map)하게 됩니다. 또한 Guest 머신은 실제 물리 컴퓨터에서의 가상메모리와 마찬가지로 실제 물리 메모리와 페이징 파일(예. C:\pagefile.sys)에 메모리 정보를 저장할 수 있는데, 페이징 작업이 필요한 경우 그림에서와 같이 각 Guest OS의 페이징 파일(pagefile.sys)에 보낼 수도 있습니다.

이러한 구조는 각 Guest 파티션마다 각자의 물리 메모리 공간을 가리키게 되며 공유 하지 않는 것을 의미합니다, 이래서 Guest 간의 각 페이지를 분리해 보안을 높일 수 있고, 타 제품과 같이 별도의 Hashing 작업이 필요하지 않으므로 그로 인한 Cost를 절약 할 수 있게 됩니다.

image

추가로 Windows Server 2008 R2에서 적용된 SLAT(Second Level Address Translation) 라는 기술을 소개해 드리면, 위 그림과 같이 Hyper-V v1에서는 GPA 과정을 Hyper-V의 Hypervisor가 소프트웨어적으로 처리했습니다. 하지만 Windows server 2008 R2와 SLAT를 지원하는 CPU 기술(AMD는 NPT(Nested Page Tables), Intel에서는 EPT(Extended Page Tables)라고 칭함 )을 이용하면 위 그림의 Hyper-V v2에서와 같이 GPA과정을 소프트웨어 방식으로 처리하는 것이 아니라 CPU에서 직접 처리해 소프트웨어 레벨에서 처리하던 것 보다 높은 성능을 낼 수 있습니다. SLAT를 이용하면 CPU는 2~10%, 메모리는 VM당 1MB의 오버헤드를 줄일 수 있습니다.

올해는 어째 여름다운 여름도 못 느껴보고 지나는것 아닌가 싶네요, 더울 때 더워야 곡식도 잘 자라는데 말이죠.. 모두 건강하시고요 다음 포스팅에서 뵙겠습니다. 미소