Xen - I/O 가상화


2.1 디바이스 에뮬레이션

- I/O를 가상화하는 가장 직관적인 방법은 디바이스의 기능을 소프트웨어적으로 똑같이 구현하는 에뮬레이션 방식. 하이퍼바이저는 게스트 도메인에 실제로 디바이스가 존재하는 것처럼 설정하고, 게스트 도메인은 실제 디바이스에서 동작하는 것과 똑같이 동작.

- 에뮬레이션 방식의 장점은 가상의 디바이스를 제공함으로써 게스트 도메인의 드라이버를 수정없이 그대로 쓸 수 있음. 잘 알려진 디바이스를 에뮬레이션하면 게스트 운영체제 대부분이 해당 디바이스의 드라이버를 사용할 수 있으므로 다양한 게스트 운영체제를 지원할 수 있음.


2.2 반가상화 인터페이스

- 게스트 운영체제를 수정할 수 있다면 , 좀 더 효율적으로 I/O 가상화를 구현할 수 있다. 게스트와 하이퍼바이저 사이에 I/O 디바잉스에 대한 새로운 상위 수준 인터페이스를 정의해 게스트가 직접 하이퍼바이저에 I/O요청할 수 있음.

- 네트워크 디바이스의 경우 디바이스 에뮬레이션은 모든 저 수준 I/O 명령어를 있는 그대로 에뮬레이션해야 함. 패킷 하나를 네트워크 카드를 통해 전송하려면 저 수준 I/O 명령어를 요구. 이는 에뮬레이션을 실행할 때의 오버헤드 뿐만 아니라 게스트와 하이퍼바이저 사이에 많은 수의 컨택스트 스위칭을 일으키며 발생하는 오버헤드도 많음. 반가상화를 통해 게스트와 하이퍼바이저 사이의 인터페이스를 정의할 때는 좀더 상위 수준의 인터페이스로 정의. 이렇게하면 사용자의 저 수준 I/O 명령을 send_packet과 같은 한 번의 요청으로 처리할 수 있음. 게스트와 하이퍼바이저의 컨텍스트 스위치는 한 번으로 충분하고, 디바이스 에뮬레이션을 실행할 필요도 없으므로 높은 성능의 I/O 가상화를 구현.


2.3 분리 드라이버 모델(Split Driver Model)

- I/O 가상화 구현 시 논의하는 것은 디바이스 드라이버에 대한 관점. 일반적으로 디바이스 드라이버는 운영체제를 이루는 핵심 요소이며 현존하는 많은 디바이스를 운영체제가 지원해야 하므로, 실제로 리눅스 커널에서도 디바이스 드라이버의 소스 코드가 커널의 대부분을 차지.디바이스 제어를 하이퍼바이저가 하도록 설계한다면, 디바이스 드라이버의 모든 코드를 하이퍼바이저가 유지해야 하므로 상당히 비효율적. 이미 운영체제가 가진 소스코드를 소유해야 하는 중복성 측면의 문제와 하이퍼바이저를 유지 보수하는 과정에서 대용량의 소스 코드를 허용하기 쉽지 않음. 또한 하이퍼바이저가 디바이스 드라이버를 유지하면, 디바이스 드라이버의 오동작 때문에 에러가 발생하면 시스템 전체에 영향

- 이러한 이유로 디바이스 드라이버를 하이퍼바이저와 별도로 관리하자는 분리 드라이버 모델이 등장. 디바이스 드라이버로 실제로 디바이스를 제어하는 별도의 특수한 도메인을 두도록 함.

- Xen 하이퍼바이저에서는 도메인0(DOM0)을 디바이스 드라이버를 전담하는 도메인으로 할당했고, 도메인0에서 리눅스를 구동시켜 리눅스 커널에 존재하는 모든 디바이스 드라이버를 사용할 수 있음.

- 디바이스 드라이버는 하이퍼바이저가 아닌 특정 도메인에 존재하고 하이퍼바이저가 소유한 드라이버를 사용해 직접 하드웨어 디바이스에 접근. 게스트가 반가상화 인터페이스를 사용했다면 드라이버 도메인의 반가상화 인터페이스가 게스트로부터 I/O 요청을 받아서 디바이스 드라이버로 전달. 반가상화 인터페이스를 사용하지 않았다면, 드라이버 도메인에서 디바이스를 에뮬레이션해 I/O요청을 실제 디바이스 드라이버에게 보냄.

4. 직접 접근 I/O (Direct Access I/O)

- 가상화 환경은 디바이스 하나를 여러 게스트 도메인이 공유하므로 하이퍼바이저의 적절한 중재가 필요.그러므로 게스트가 직접 디바이스에 접근하는 것은 허용할 수 없음.

- 그러나 특정 디바이스를 게스트 도메인 하나만 사용하도록 허용한다면 게스트는 하이퍼바이저의 중재 없이 직접 디바이스와 통신할 수 있을 것. 이렇게 게스트 운영체제가 직접 디바이스에 접근해 I/O를 요청하는 것을 직접 접근 I/O라고 부르며, 하이퍼바이저를 통해 직접 디바이스에 접근한다고 하여 Paththrough I/O라고도 부름.

- 직접 접근 I/O는 성능이 우수하며 실제로 가상화되지 않은 환경과 동일한 성능을 보장하기도 함. 일단 디바이스를 게스트 도메인에 할당하면 하이퍼바이저의 중재 없이도 바로 I/O를 실행하기 때문.

- 직접 접근 I/O의 단점

1) 메모리 보호: 디바이스 I/O를 직접 실행한다는 것은 직접 DMA(Direct Memory Access)연산을 실행한다는 것을 의미. 디바이스는 DMA연산으로 직접 시스템 메모리의 데이터를 읽고 쓸 수 있음. 이때 어떤 게스트에 디바이스를 할당했는데, DMA를 통해 악의적인 게스트가 임의로 다른 게스트의 메모리 영역에 쓰기 연산을 실행하면 해당 게스트는 오작동일 일어날 것.

2) 전가상화 지원: DMA 명령을 내리려면 게스트 운영체제가 머신 주솔르 알아야 함다. DMA는 직접 시스템 메모리에 접근할 때 머신 주소를 입력으로 받아 DMA를 실행하기 때문. 그러나 전가상화 게스트 운영체제는 머신 주소를 알지 못하므로 올바른  DMA요청을 실행할 수 없음.

3) 디바이스 공유: 



'IT > Virtualization' 카테고리의 다른 글

Xen - 메모리 가상화  (0) 2015.01.14
Xen - CPU 가상화  (0) 2015.01.13
Posted by jk.jeong
,