본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
I/O Virtualization; 입출력 가상화
디스크, 네트워크 카드 같은 입출력 장치를 여러 가상 머신이 나눠 쓰거나 가상 머신이 직접 쓸 수 있게 하는 기술. 에뮬레이션, 반가상화 드라이버, 직접 할당, SR-IOV 방식이 있다

가상 머신은 CPU와 메모리뿐 아니라 디스크·네트워크 같은 입출력 장치도 필요하다. 하지만 실제 장치는 서버에 몇 개밖에 없고, 여러 게스트 운영체제가 저마다 그 장치를 자기 것처럼 다루려 한다. 하이퍼바이저는 이 사이에서 요청을 받아 실제 장치에 전달하거나, 장치를 특정 가상 머신에 넘겨준다. 입출력은 요청 횟수가 많고 데이터 양이 커서, 어떤 방식을 쓰느냐에 따라 가상 머신 성능이 크게 달라진다.

ADP 교재 분류로는 CPU 가상화(전가상화·반가상화), 메모리 가상화와 함께 I/O 가상화가 클라우드 인프라 기술의 세 요소로 묶여 출제된다.

에뮬레이션(전가상화 방식)

편집 원본 편집

하이퍼바이저가 널리 쓰이는 실제 장치(예: 특정 모델의 네트워크 카드, IDE 디스크 컨트롤러)를 소프트웨어로 흉내 낸다. 게스트는 그 장치용 표준 드라이버를 그대로 쓰므로 게스트를 고칠 필요가 없다.

  • QEMU 문서는 시스템 에뮬레이션이 CPU, 메모리, 에뮬레이션된 장치로 이루어진 가상 머신 모델을 제공한다고 설명한다. Xen의 HVM 게스트도 BIOS, 디스크, 네트워크 장치를 에뮬레이션한다.
  • 게스트가 장치 레지스터에 접근할 때마다 하이퍼바이저로 제어가 넘어가야(VM exit) 하므로 느리다. VirtualBox 문서는 트랩이 매우 잦은 장치를 에뮬레이션하면 하드웨어 지원 가상화에서도 VM exit 비용이 문제가 된다고 지적한다.

반가상화 드라이버(virtio 등)

편집 원본 편집

게스트에 가상화 전용 드라이버(프런트엔드)를 넣고, 하이퍼바이저 쪽(백엔드)과 단순하고 효율적인 공유 메모리 인터페이스로 데이터를 주고받는다. 실제 장치를 흉내 내지 않으므로 레지스터 접근마다 트랩할 필요가 없다.

  • virtio: OASIS가 표준화한 가상 장치 명세로, 명세는 virtio의 목적을 환경이나 OS마다 따로 만든 방식 대신 단순하고, 효율적이며, 표준적이고, 확장 가능한 가상 장치 메커니즘을 제공하는 것이라고 밝힌다. 드라이버와 장치는 virtqueue라는 디스크립터 링으로 데이터를 주고받으며, 네트워크·블록(디스크)·콘솔·메모리 벌룬 등 여러 장치 유형이 정의되어 있다. KVM은 virtio를 입출력 가상화의 주 플랫폼으로 택했다.
  • Xen의 가상 장치: Xen 논문은 네트워크·디스크 같은 가상 장치를 단순한 인터페이스로 제공하고, 데이터를 비동기 I/O 링으로 전달하며 하드웨어 인터럽트 대신 이벤트로 알림을 준다고 설명한다.
  • 게스트에 전용 드라이버를 설치해야 하지만, 커널 전체를 고치는 것이 아니라 드라이버만 넣으면 되므로 전가상화 게스트에서도 널리 쓴다.

직접 할당(패스스루)

편집 원본 편집

실제 장치 하나를 통째로 특정 가상 머신에 넘겨준다(device assignment, PCI passthrough). 게스트는 실제 장치의 드라이버로 장치를 직접 다루고, 하이퍼바이저는 데이터 경로에 끼지 않는다.

  • 장치가 DMA로 메모리에 직접 쓰기 때문에, 장치가 자기에게 허용된 가상 머신의 메모리만 건드리도록 막는 IOMMU(Intel VT-d, AMD-Vi)가 필요하다.
  • 리눅스 커널 문서는 VFIO를 IOMMU로 보호되는 환경에서 장치에 직접 접근하게 해 주는 프레임워크로 소개하며, 가상 머신이 최고 입출력 성능을 원할 때 장치 직접 할당을 쓰고, 이때 지연이 크게 줄고 대역폭이 늘며 원래 장치 드라이버를 그대로 쓸 수 있다고 설명한다.
  • 장치 하나를 가상 머신 하나가 독점하므로 여러 가상 머신이 나눠 쓸 수 없다. 또 장치 상태가 하이퍼바이저 밖에 있어 가상 머신을 다른 서버로 옮기는 작업(라이브 마이그레이션)이 어려워진다.

SR-IOV(Single Root I/O Virtualization)는 장치 하나가 하드웨어 차원에서 여러 개의 장치로 보이게 하는 PCI Express 확장 기능이다.

  • 리눅스 커널 문서에 따르면 실제 물리 장치를 PF(Physical Function), 그로부터 만들어진 가상 장치를 VF(Virtual Function)라 부른다. 각 VF는 자기만의 PCI 구성 공간과 메모리 공간을 가지므로 실제 PCI 장치처럼 동작한다.
  • VF 하나하나를 각 가상 머신에 직접 할당하면, 직접 할당의 성능을 얻으면서도 장치 하나를 여러 가상 머신이 나눠 쓸 수 있다.
  • 장치(주로 고성능 네트워크 카드)가 SR-IOV를 지원해야 하고, 직접 할당처럼 IOMMU가 필요하다.
항목 에뮬레이션 반가상화 드라이버(virtio) 직접 할당(패스스루) SR-IOV
게스트 수정 불필요(표준 드라이버) 전용 드라이버 설치 불필요(실제 장치 드라이버) VF용 드라이버 필요
하이퍼바이저 개입 장치 접근마다 개입 공유 메모리 링으로 묶어서 처리 데이터 경로에 개입 안 함 데이터 경로에 개입 안 함
성능 낮음 중간~높음 실제 장치에 가까움 실제 장치에 가까움
장치 공유 여러 가상 머신이 공유 여러 가상 머신이 공유 한 가상 머신이 독점 VF 단위로 여러 가상 머신이 공유
하드웨어 요구 없음 없음 IOMMU IOMMU, SR-IOV 지원 장치
라이브 마이그레이션 쉬움 쉬움 어려움 어려움
예 QEMU 에뮬레이션 장치, Xen HVM KVM virtio, Xen PV 가상 장치 VFIO 장치 할당 SR-IOV 네트워크 카드의 VF 할당

호환성과 유연성(에뮬레이션)에서 성능(직접 할당·SR-IOV)으로 갈수록 하이퍼바이저의 개입이 줄고 하드웨어 요구가 늘어난다. 실제 클라우드 환경에서는 일반 가상 머신에 반가상화 드라이버를 쓰고, 지연에 민감한 고성능 네트워크가 필요한 경우 SR-IOV를 쓰는 식으로 섞어 쓴다.

  • I/O 가상화 방식을 에뮬레이션, 반가상화 드라이버, 직접 할당, SR-IOV로 나누고, 성능과 장치 공유 가능 여부를 비교할 수 있어야 한다.
  • SR-IOV는 장치 하나를 여러 VF로 나눠 각 가상 머신이 직접 쓰게 하는 PCIe 기능이며, PF와 VF의 뜻을 구분한다.
  • 직접 할당과 SR-IOV에는 IOMMU(Intel VT-d, AMD-Vi)가 필요하다.
  • ADP 교재 분류로는 CPU 가상화·메모리 가상화와 함께 클라우드 인프라 기술의 세 요소로 묶여 출제된다.