문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: 가상화]] ==개요== I/O Virtualization은 I/O 스택을 어떻게 가상화 할 수 있을지에 대해서 전반적인 내용을 다룬다. I/O스택은 굉장히 복잡하며 깊은 콜 스택을 가지고 있는데 이러한 소프트웨어 스택을 줄이는 것이 I/O가상화의 큰 목표이다. I/O가상화에서 필요한 조건은 다음과 같다. *Performance: I/O성능 [[Throughput and latency]]가 포함된다. *Safety: 안정성. 하드웨어 인터페이스를 가상머신으로부터 숨기고, 호스트나 다른 가상머신으로부터 보호해야 한다. *Multiplexing (Sharing or Interposition): 하드웨어 인터페이스를 다른 가상머신끼리 공유해야 한다. {| class="wikitable" |+I/O가상화 기술 비교 |- ! !Performance!!Safety!!Multiplexing !Example |- |Direct access | ++||+||-- |[[PCIe passthrough]] |- |Device emulation | --||++||++ |[[PIO]] |- |Paravirtualization | +||++||++ |[[Virtio]] |- |Hardware assisted | +||++||++ | [[SR-IOV]] |} ==종류== ===Direction Access=== I/O가상화에서 제일 단순하지만 제일 빠른 성능을 보이는 것으로, 별다른 호스트의 콜 스택없이 하드웨어를 직접 가상머신에 전달하는 것이다. Multiplexing측면에서, Guest와 하드웨어가 1대1매핑 되어야 함으로 단점이 있다. 그러나 호스트 콜 스택을 타지 않기 때문에 Native에 해당하는 성능이 나온다는 점에서 장점이 있다. [[PCIe passthrough]]와 같은 기술이 대표적이다. ===Device Emulation=== 디바이스를 [[Trap and emulate]]를 통해서 가상화 시키는 방식이다. Safety와 Multiplexing측면에서 이점이 있지만, 매 요청마다 트랩이 발생하기 때문에 속도 면에서 단점이 있다. 이는 Guest -> (Hardware interrupt) -> Hypervisor -> Kernel stack -> Device -> Inject interrupt to Gest -> Guest의 총 3개의 User-kernel world swtich가 일어나기 때문이다. 대표적인 예로 [[PIO]]를 에뮬레이트하는 경우가 있다. ===[[Paravirtualization]]=== 반가상화 기법을 사용하여서 I/O스택을 최적화 시키는 방법도 존재한다. 이 방식에서는 Device driver에 수정을 가해서 최적화된 디바이스 드라이버와 호스트 드라이버가 서로 통신하도록 하여서, 풀필요한 콜스택과 에뮬레이션 비용을 줄여 성능면에서 큰 이점이 있다. 반가상화 기법을 사용하면, 성능, 안정성, 그리고 공유의 측면에서 모두 좋은 결과를 얻을 수 있다. (SR-IOV와 같은 Direct access보다는 느리다.) 대표적인 방식으로 [[Virtio]]가 존재한다. ===Hardware assisted=== 하드웨어 기법을 사용하여서 I/O스택을 구현하는 방법이 있다. 이를 이용하면 성능, 안정성 그리고 공유성 측면에서 장점을 가져올 수 있다. I/O Virtualization 문서로 돌아갑니다.