Transparent Page Sharing
호스트 시스템 위에 작동 중인 다수의 가상 머신들 대부분이 동일한 게스트 운영체제를 실행하는 조건이라면, 이를테면 Windows 운영체제에서 동일한 버전일 경우 그 안에서 필수적으로 항상 실행되는 기본적인 DLL이나 EXE 등과 같은 내용들은 동일하다. 따라서 이러한 내용들을 함께 공유할 수만 있다면 물리적 메모리 공간을 좀 더 효율적으로 사용할 수 있지 않을까 하는 것이 바로 Transparent 페이지 공유 기술(이하 TPS)의 배경이다.
우선 작동 중인 가상 머신 중에서 몇몇 후보군을 선택한 다음, 게스트 물리 메모리의 내용을 기반으로 한 해시(Hash) 값을 뽑아내어 그것을 기준으로 혹시 동일한 내용이 담겨 있는지 호스트 물리 메모리 페이지와 비교한다. 이때 해시 값과 동일한 엔트리 내용이 발견된다면 매우 정밀하게 페이지 전체를 스캔하여 그 내용이 완전하게 똑같은지 확인하게 된다.
만약 같을 경우 VMkernel은 해당 가상 머신이 공유 메모리 페이지를 바라보게끔 게스트 물리 메모리와 호스트 물리 메모리 간의 매핑 주소를 바꾸게 되며, 원래 자리를 차지하고 있었던 호스트 물리 메모리 페이지는 비워버리고 그만큼 공간을 확보하게 된다.
문제는 이렇게 가상 머신들이 동일한 공유 메모리 페이지를 바라보고 있다가 어느 한쪽의 가상 머신 중에서 갑자기 실제 해당 메모리 페이지 내용에 변경이 생겨 업데이트가 발생할 경우이다.
이러한 경우 VMkernel은 업데이트가 발생한 해당 가상 머신을 위한 메모리 페이지를 새롭게 생성해 주고 올바른 메모리 페이지 주소를 바라볼 수 있도록 다시 매핑 주소 값을 변경해 준다.
Memory Ballooning
메모리 풍선효과라 부르는 이 기술을 설명하기에 앞서 가상 머신과 하이퍼바이저 간의 메모리 인식에 관한 서로 간의 입장을 다시 살펴볼 필요가 있다. 가상 머신 안에서 작동 중인 게스트 운영체제는 자신이 인식하고 있는 메모리가 그저 실제 물리적 메모리인 것으로 이해하고 있으며, ESX 서버 내의 모든 가상 머신들은 그렇게 착각하고 있을 뿐이다. 하지만 ESXi 서버는 어떻게든지 최대한 더 많은 가상 머신들을 작동시켜 주기 위해 발버둥을 칠 뿐이며, 물리적인 메모리 크기가 턱없이 부족해지고 줄어들지언정 그렇다고 해서 가상 머신들이 그러한 어려움을 이해하고 자발적으로 메모리를 반납하는 일은 결코 없을 것이다.
메모리 풍선효과 기술은 바로 이러한 점을 노린다. ESXi 서버 내에 작동되는 가상 머신에는 각종 유틸리티 및 드라이버가 담겨 있는 VMware tools를 설치하게 되는데, 이 안에는 vmmemctl이라 불리는 메모리 컨트롤러 드라이버가 같이 설치된다. 이 드라이버는 VMkernel과 Private 채널을 생성하여 통신을 하며, 서로 간의 메모리 상태를 파악하고 각종 정보를 주고받게 된다. 호스트의 전체 물리적인 메모리 크기가 부족할 경우 VMkernel은 가상 머신들 안에 설치된 메모리 컨트롤러 드라이버에게 명령을 내려 게스트 운영체제 내부의 메모리를 팽창시키도록 한다. 게스트 운영체제는 영문도 모른 채 늘어만 가는 메모리 점유율을 줄이고자 자신이 가지고 있는 고유한 가상 메모리 스와핑(Swapping) 알고리즘을 이용하여-이를테면 windows의 pagefile.sys에-착실하게 메모리의 내용들을 가상 메모리 쪽으로 페이지 아웃시킨다. 메모리 컨트롤러 드라이버는 이렇게 비워져 버린 메모리 페이지 위치를 친절하게 VMkernel에게 알려주고, VMkernel은 그 위치에 해당하는 호스트 물리 메모리의 주소를 비우게 되어 최종적으로 물리 메모리의 공간을 확보하게 된다. 메모리 공간이 확보된 이후 호스트의 물리적인 메모리에 어느 정도 다시 여유가 생겼다면 VMkernel은 다시 메모리 컨트롤러 드라이버에게 팽창시킨 메모리를 수축시킬 것을 지시하고, 자연스럽게 게스트 운영체제의 메모리 알고리즘에 의해 스왑 메모리에 페이지 아웃되었던 메모리 내용들이 다시 원 위치로 돌아오게 된다.
하이퍼바이저 스와핑
TPS와 메모리 풍선효과 기술을 통해서도 호스트 물리 메모리의 공간 부족 압박이 해결되지 않을 경우, 최종적으로 ESXi 서버는 하이퍼바이저 스와핑 기술을 사용한다. 기본적으로 가상 머신이 시작될 때 ESXi 서버는 각 가상 머신에게 할당된 메모리 크기만큼 동일한 스왑 파일을 생성한다.
호스트 물리 메모리 공간 부족 압박이 심해질 경우 ESXi 서버는 가상 머신의 게스트 물리 메모리를 직접 스와핑 하면서 전체적으로 다른 가상 머신들을 위해서 호스트 물리 메모리의 공간을 확보하게 된다. TPS나 메모리 풍선효과 기술에 의해 호스트의 물리 메모리 공간이 최종적으로 확보되기 위해서는 나름대로 최적의 알고리즘에 의해 계산되기 때문에 어느 정도의 시간도 필요하며 즉각적이지는 않지만 성능에 크게 영향을 주지 않는 반면, 하이퍼바이저 스와핑은 확보할 수 있는 호스트 물리 메모리 공간은 확실히 눈에 띌 정도이며 즉각적이지만 그만큼 전체 가상 머신의 성능에는 커다란 영향을 끼친다. 가장 좋은 최선의 메모리 대처 방법은 애초 호스트 물리 메모리가 부족하지 않도록 적당한 수준에서 가상 머신의 메모리들을 사이지(sizing)하는 것이며, 가능한 하이퍼바이저 스와핑까지 일어나지 않도록 하는 것이다.
'⫸VMware' 카테고리의 다른 글
VMware 리소스 가상화 - 스토리지 가상화 (0) | 2022.10.05 |
---|---|
VMware 리소스 가상화 - 네트워킹 가상화 (0) | 2022.10.04 |
VMware 리소스 가상화 - 메모리 가상화 (0) | 2022.10.03 |
VMware 리소스 가상화 - CPU 가상화 (0) | 2022.10.03 |
VMware ESXi 서버구조 - VMkernel (0) | 2022.10.02 |