WS08-R2_h_rgb

Windows Server 2008 R2, 특히 Hyper-V R2에 대한 개선 사항 중에 한가지로 빠지지 않고 나오는 이야기가 있습니다. Second Level Address Translation(SLAT)라는 기술입니다. 조금은 기술적 아키텍쳐 이야기이지만, 알아두시면 가상화의 아키텍쳐를 이해하시는데 많은 도움이 되실 수 있지 않을까 싶습니다.

SLAT의 경우에는 메모리 관리에 대한 부분입니다. 먼저 실제 물리적인 운영 체제의 경우, 메모리에 대한 사용은 실제 메모리를 사용하는 것이 아니라, Windows에서 제공하는 가상 메모리(Virtual Memory)를 사용하고, 이에 대한 실제 물리적인 메모리(Physical Memory) 맵핑은 CPU를 통해서 일어나게 됩니다. 이를 주소 변환(Address Translation)이라고 하고 있습니다.

그러나, 가상화 환경이 되면 조금 생각을 달리해야 합니다. 실제 물리적인 머신이 있지만, 가상 머신도 존재를 하게 되겠죠? 가상 머신내에도 운영 체제가 설치되게 되고, 가상 머신내에 설치되는 운영 체제도 가상 메모리를 실제 메모리로 맵핑해주는 일을 해줘야 합니다. 쉽게 정리해보면 다음과 같습니다.

image   image

가상 머신내 운영 체제의 가상 메모리 주소(Guest Virtual Memory Address - GVA)가 가상 물리적인 메모리 주소(Guest Physical Memory Address - GPA), 그리고 이 실제 GPA가 시스템의 물리적인 메모리 주소(System Physical Memory Address – SPA)로 맵핑되어야 합니다. 위에 실제 머신 환경에서 생각해보시면, VA가 바로 PA로 맵핑되는 구조였지만, 가상화 환경이 되면서, 가상화 환경내 메모리 관리가 별도로 필요해진다는 의미입니다. GPA를 SPA로 맵핑하는 일을 지금까지는 Hypervisor가 담당하고 있었으며, Hypervisor에서는 Shadow Page Table(SPT)을 통하여, GVA가 바로 SPA로 맵핑될 수 있도록 처리하고 있었습니다.

이유는 단 한가지.. CPU가 Address Translation을 한번에 처리를 해줘야(One-Level) 했기 때문입니다. 만약 CPU가 GVA를 GPA로 GPA를 SPA로 2단계 주소 변경이 가능했다면, 구지 Hypervisor가 SPT을 통해 어떤 가상 머신내 GVA가 실제 메모리의 SPA와 연결되는지 일일히 관리하지 않았어도 된다는 의미입니다. (조금 헷갈리시죠? 찬찬히 읽어보시면 이해가 되실것 같은데.. ㅠㅠ)

Windows Server 2008 Hyper-V내 Hypervisor가 이러한 메모리에 대해서 했던 일을 정리하면 아래와 같습니다.

  • 단일 페이지 테이블에서 두 영역(가상 머신과 실제 물리적인 메모리)에 대한 주소 변경을 처리
  • 가상 머신 운영 체제에서 페이지를 요청했을 경우에, 해당 물리적인 메모리 페이지를 채워서 처리(Demand-Fill)
  • 가상 머신 운영 체제에서 페이지 테이블을 수정했을 경우에, 이를 항상 처리(Flush)

앞서 언급드렸지만, CPU 프로세서에서 메모리에서 대한 주소 변환이 한번의 레벨(One-Level)로 처리할 수밖에 없었기 때문에, Hypervisor가 이러한 SPT을 관리했고, 결국엔 이러한 변환 오버헤드는 고스란히 Hypervisor의 부하로 이어졌다는 것을 느끼실 수 있을 것입니다. 대략 이러한 부하가 CPU에서는 10%정도의 부하, 메모리에는 추가적으로 10~30MB 정도가 필요했다고 합니다.

이제 무슨 이야기가 나올까요? SLAT에 대한 이야기입니다. 하드웨어에서 드디어 SLAT를 지원하기 시작했고(두번의 주소 변환이 된다는 의미죠), 이제 소프트웨어적으로 주소 변환을 해주던 Hypervisor의 부담을 덜수 있게 되었습니다.

Intel 프로세서에서는 EPT(Extended Page Tables), AMD에서는 NPT(Nested Page Tables) 또는 RVI(Rapid Virtualization Indexing)이라고 부릅니다. 이 기술을 Windows Server 2008 R2내 Hyper-V R2에서 활용하게 됩니다. 프로세서가 아래와 같은 두번의 레벨(Two-Level) 주소 전환을 처리합니다.

  • 가상 머신 운영 체제에서 테이블을 프로세서와 직접 처리
  • Shadow Page Table을 Hypervisor가 관리할 필요가 없음
  • Hypervisor가 메모리를 채우거나, 수정해주는 처리를 할 필요가 없음

이 기술을 사용함으로서, Hypervisor의 CPU 사용률이 줄어들게 되고, 앞서 언급한 메모리 사용량도 줄어들게 되겠죠.

가상화 기술의 발전을 가속화시키는 것은 소프트웨어뿐만 아니라, 하드웨어가 점점 가상화 환경에 대한 이해가 필요합니다. 다양한 파티션(가상 머신)에서 요청하는 하드웨어 처리를 적절하고 공정하게 나누어서 하드웨어에서 처리해준다면, 소프트웨어가 이를 처리하는 부담(이유는 간단합니다. 하드웨어가 가상화를 지원하지 않으면, 하드웨어를 한대의 운영 체제에서만 사용한다고 생각하기 때문입니다. 이런 하드웨어가 가상화를 지원한다면, 여러 파티션에서 오는 신호를 적절히 입력받고, 해당 파티션에 되돌려줄 수 있습니다.)이 감소하겠죠. 더 많은 리소스를 가상화 환경에… 이것이 IT 엔지니어들이 원하는 모습 아닐까요? 그리고 이미 Microsoft의 Hyper-V는 이러한 하드웨어의 발전에 적절히 대응할 수 있도록 설계되어져 있고, 하드웨어 변경에 발빠르게 대응할 수 있습니다.