그외

하이퍼바이저 Hyper-V의 architecture

데굴데굴. 2018. 11. 6. 14:38

마이크로소프트 사의 hyper-v라는 하이퍼바이저의 아키텍쳐에 대해 설명하고자 한다.





Hyper-V_Architecture


hyper-v는 type 1 하이퍼바이저로, 호스트 OS 없이 돌아간다.


또한 전가상화와 반가상화를 모두 지원한다. (전가상화 시 Intel-VT, AMD-V 와 같은 가상화 기술 지원 CPU가 필수적이다.)






type 1답게 부모 파티션을 가지고 있는데, hyper-v에서 부모 파티션의 서버는 윈도우 서버이다.



더 자세하게 살펴보자.


그림에는 게스트 os가 실행되고 있는 자식 파티션이 세개가 있다.


첫번째 자식 파티션은 hyper-v가 지원하는 OS를 가진 가상머신이다.


이 가상머신은 VMBus를 통해 부모 파티션과 통신한다.


VSP와 VSC가 연결되는 통로가 바로 VMBus이다.


VSP : Virtualization Service Provider, 가상화 서비스 제공자

VSC : Virtualization Service Client, 가상화 서비스 클라이언트


VMBus를 통해서 하드웨어 제어 명령이 부모파티션에게 전달되고 부모 파티션이 이 명령을 하드웨어로 전달한다.


이것이 반가상화! 왜냐하면 기본적인 OS에는 없는 VMBus와 VSC가 존재하기 때문...


hyper-v는 마이크로소프트의 제품이기 때문에 마소의 OS들은 수정없이 호환될 수 있다.




그렇다면 타 OS는 어떨까?


리눅스 계열은 전가상화를 지원한다. 하지만 마소에서 제공하는 리눅스를 위한 (오픈소스) 드라이버 설치 시 반가상화도 가능하다.


그림 속 세번째 자식 파티션에는 젠 사용 가능한 리눅스가 들어있다.


이는 Xen의 하이퍼콜 API를 Hyper-V의 하이퍼콜 API로 변환시켜주는 hypercall adapter라는 얇은 계층을 통해 반가상화가 지원된다.


hypercall adapter나 리눅스를 위한 드라이버는 마소에서 제공하는 linux integration services에 들어있다고 한다.




두번째 자식 파티션을 보면 아예 Hyper-v와 호환이 안되는 OS이다. 안드로이드 등이 있다.


이 OS는 아예 에뮬레이션 된다고 나오는데.... 이것에 대해 더 찾아보았다.





일반적인 게스트 OS의 경우, 하이퍼바이저에 명령을 보내면 모종의 과정을 거쳐 하드웨어로 전달된다.


하지만 에뮬레이트되는 게스트 OS의 경우, 부모 파티션에서 유저 프로세스로 실행된다.


에뮬레이트란 하드웨어를 실제 하드웨어인 것처럼 소프트웨어로 구현하는 것이다.


에뮬레이트된 디바이스는 모든 디바이스에 적용가능한 통일된 형태이다.


Emulated Device driver를 사용하여 항상 부모 파티션과 통신하기 때문에 계산 비용이 많이 들고 작동 속도가 느리다.


따라서 해당 가상머신의 전반적인 성능이 저하된다.