Inside Virtualization... It's Time to excite

지금까지의 Virtualization는 운영 체제가 하드웨어에 대한 모든 교신을 담당하고 있고, 여기에 Virtualization Software가 백그라운드 서비스로 동작하는 형태였습니다. 이 서비스에서 가상 머신, 가상 머신에 대한 장치, 가상 머신에 대한 관리를 담당했고, 가상 머신들은 Virtualization 소프트웨어가 제공해주는 장치 드라이버를 로드해서 사용했습니다.

이 경우 Virtualization에서 제공하지 않는 장치에 대한 사용은 불가능하게 되며, VM간에 클러스터링은 현재 ISCSI 방식이나 Virtualization Software에서 제공하는 방식이 아니라면, 불가능했었습니다. 다시 말해, Fibre Channel을 사용하는 현업 방식으로는 구현 자체가 안되었다는 것입니다.

앞선 포스팅에서 Virtualization은 여러가지 문제점에 직면했었다는 글을 보셨을 것입니다. Windows, Linux와 같은 현재의 운영 체제는 로우 레벨의 커널과 장치 드라이버가 하드웨어와 교신을 하게 되며, 권한이 없는 사용자 영역에서 대부분의 운영체제의 서비스와 응용 프로그램이 동작하게 됩니다. CPU 하드웨어에서 사용자 모드에서 동작하는 프로세스가 직접 커널 레벨 프로세스나 메모리에 직접 접근하는 것은 하지 못하게 합니다.

Intel CPU의 경우, 4종류의 다른 권한 레벨을 제공합니다. 가장 높은 권한을 가진 링(Ring) 0와 가장 낮은 권한을 가진 링(Ring) 3이 있습니다. 각각의 링에서 동작하는 프로세스들은 낮은 레벨의 링에서 동작하는 프로세스에 제한된 방법론을 이용하지 않고는 전혀 영향을 줄 수 없습니다.

Windows의 경우, 커널이 링 0에서 동작하도록 만들어져 있으며, 사용자 영역이 링 3에서 동작합니다. (링 1,2의 경우 x86에서는 사용하지 않음)

이러한 디자이닝이 Virtualization Software에 문제를 유발하게 됩니다. Virtualization Software는 Guest VM OS의 커널보다 높은 레벨(다시 말해 Ring 레벨 숫자로는 더 낮은)에서 동작해야 합니다. Host 운영 체제와 Virtualization Software는 Guest VM OS에서 이용하는 하드웨어에 접근할 수 있어야 하며, Guest VM간, Host OS와 상호 간섭이 없도록 해야 합니다.

OS에 대한 변경없이 이를 처리하기 위해 Virtualization Software는 Guest VM이 링 0에서 동작하는 것처럼 속여 처리하고, 실제로는 링 3 레벨에서 동작시키는 것이죠. 지금까지의 모든 Virtualization Software(Microsoft, Non-Microsoft)는 이러한 방식으로 가상화를 작동시켜 왔습니다.  이러한 방식이 결국 성능상의 문제(대부분 10%~40%)를 야기하였고, 이를 해결하기 위해서 하드웨어, 즉 CPU 프로세스 처리에 대한 링레벨의 변화가 필요했었다고 봅니다.