1. 개요
3. 특징 : VGA
Passthrough 호스트는 CPU에 내장된 GPU를 쓰거나 아예 또다른 그래픽 카드를 달아서 사용하고 게스트 윈도우에 PCI Passthrough를 이용하여 가상 머신 내 운영체제에 실제 그래픽 카드 한 개를 붙여준다.[5] VMware Workstation 등에서도 그래픽 카드는 어디까지나 일부만 하드웨어와 직접 연관돼 있는데, QEMU에서 PCI Passthrough로 직접 가상 머신에 붙여주는 방법으로 옛날부터 지원이 부실하였던 '가상머신으로 게임'[6]로 을 할 수 있게 해 주었다.(덕분에 수십개의 웹페이지를 습관적으로 열어놓는 헤비 웹서퍼들은 게임과 인터넷뱅킹을 포기하지 않고서도 리눅스 + 파이어폭스의 매우 안정적인 웹서핑을 즐길 수 있게 되었다.) 이 방천으로 돌리는 게임 성능은 윈도우를 네이티브로 돌릴 때와 거의 비슷하다. 요즘의 VGA 카드는 UEFI 펌웨어에서만 VGA 패스쓰루가 정상적으로 작동한다. 이 경우 BIOS 모드를 사용해야 하는 구형 운영체제에서는 IRQ자원 관련 문제로 비디오카드를 정상적으로 사용할 수 없다. 따라서 UEFI를 지원하지 않는 XP 이하의 운영체제에서 VGA 패스쓰루를 하고싶다면 구형 VGA를 장착하거나 qemu-kvm 말고 xen을 사용하는 것이 좋다. 그러니까 윈도우 9x 이하 고전게임용이면 OpenGL로 3dfx Glide 에뮬레이션이 가능한 커스텀된 DOSBOX를, xp 용 고전게임이라면 하드웨어가속으로 dx3d를 지원하는 VirtualBox가 더 낫다. Looking Glass라는 프로그램을 사용하면 윈도우에 내장된 DXGI(MS DirectX Graphics Infrastructure)를 이용하여 패스쓰루 VGA의 화면을 호스트의 모니터에서 볼 수 있다. 즉, 가상머신에 패스쓰루된 비디오카드 모니터를 물리적으로 연결하지 않아도 된다. 3.1. 설정 방법 1. vt-d를 지원하는 CPU와 메인보드를 준비한다. 2. 메인보드에서 vt-d를 활성화한다(BIOS 설정). 3. 커널에서 vt-d를 활성화한다(iommu 커널옵션 설정). 4. 게스트OS에 연결하려는 장치를 호스트 OS에서 분리한다(사용하는 커널 버전에 따라 vfio-pci 또는 pci-stub 설정. 3.x 대 커널은 vfio-pci를 지원하지 않고 4.x 대 커널에서 pci-stub를 사용하면 성능이 크게 하락한다.). 5. qemu의 가상머신 설정에서 해당장치를 게스트에 연결한다(실행옵션 또는 xml 행추가. virt-manager를 사용하면 간편하다). 1. VGA를 세컨더리 PCI-E 포트(노스브릿지에 연결된 PCIE 레인이 아닌 사우스브릿지에 연결된 PCIE 레인)에 장착하면 해당 슬롯의 대역폭과는 별도로 아키텍처 때문에 발생하는 대역폭 부족으로 성능 저하가 상당하게 발생하므로 조금 불편하더라도 프라이머리 포트에 장착해야 한다. 2. NVIDIA의 VGA 드라이버에는 락이 걸려 있어 가상 머신 안에서는 그래픽 드라이버가 작동을 중단한다(K1, K2 등 vGPU 시장 잠식을 우려한듯). 대응책으로 게스트 운영체제에게 가상머신환경을 알리지 않도록 하는 실행 옵션 설정('-cpu host,km=off', '--features kvm_hidden=on' 등)이나 VGA 바이오스 덤프 등의 방법이 알려져 있지만 드라이버가 업데이트되면서 지속적으로 차단되고 있으므로 속편하게 AMD를 사용하는 것이 좋다.
3. 전통적인 IBM PC 구조상 롬을 읽어올 때 VGA 장치는 일반 PCI 장치와 달리 부팅시 메모리에 읽어들인 롬을 쉐도우 카피하여 접근한다. 이때문에 패스쓰루로 VGA를 연결할 경우 ROM 정보가 쉐도우카피된 가상머신의 VGA ROM 과 섞여 시스템 안정성이 훼손될 수 있다. 따라서 바로 위 항목처럼 VGA롬을 파일로 덤프하여 사용하는 것을 권장한다. 일반적으로 <ROM Parser> 를 이용하여 추출하는데 입출력 에러가 발생하는 경우, 메모리 맵(/proc/iomem)에서 해당 VGA의 PCI 장치번호(lspci)로 VGA 주소를 찾아 메모리(/dev/mem)의 해당구간을 직접 접근(dd)하여 덤프한다.참고 그냥 여기서 다운로드하자. [9] 윈도우PE USB를 만들어서 윈도우로 부팅한 다음 GPU 제조사의 롬 업데이터로 현재 롬을 백업받는게 제일 편하다. 문제가 없으면 불필요한 작업. 4. 사운드와 키보드 마우스 등 입출력 인터페이스에 의한 버벅임이 꽤 있으므로 어지간하면 모두 패스쓰루로 연결해서 사용하는 것이 좋다. USB연결은 TCP/IP 를 이용한 리다이렉트(usbredirserver)를 이용하면 더 안정적으로 사용할 수 있다. 5. 리눅스 VGA 패스쓰루 구성 가운데 가장 골룸한 부분은 호스트 VGA 구성이다. 우선 듀얼VGA 카드 장착시 메인보드 하드웨어 호환성 문제로 부팅조차 되지 않는 경우가 많다. 그리고 구형 VGA라 드라이버 릴리즈가 오래된 경우에는 Xorg에서 듀얼VGA를 자동으로 잡지 못해 여러가지 삽질을 해가며 수동으로 설정 해야한다.
6. virt-manager 를 사용할 경우 최초 VM 프로필 생성시에는 패스쓰루 장치를 안붙여야 한다. 특히 VGA. 프로필 생성시에 패스쓰루를 적용하면 패스쓰루된 VGA가 프라이머리로 설정되어 초기 부팅 화면이 패스쓰루된 VGA에서 출력된다. 이렇게 되면 윈도우가 제대로 부팅되지 않는 것은 물론, 부팅되어도 대부분의 경우는 오류를 일으킨다. 패스쓰루 장치는 윈도우 설치를 완료한 뒤에 붙이자. 7. 게스트 윈도우에서 계속해서 VGA와 관련된 문제가 발생한다면 제조사의 최신드라이버를 제거하고 보다 안정적인 윈도우 업데이트에서 제공하는 WHQL 드라이버를 사용해 본다. 문제가 없으면 불필요한 작업. 8. 패스쓰루 시 프로그램에서 계속 오류가 발생하는 경우가 있다. 클린프로필 생성, BIOS덤프, WHQL드라이버 사용 등을 모두 했는데도 계속해서 프로그램이 한 번씩 오류를 내면서 중단된다면 아마도 VGA 펌웨어의 문제일 것이다.(호스트 윈도우에서는 잘 돌아갈테지만 VM에서는 반드시 오류를 내뿜는다.) 해결책은 펌웨어 업데이트.(굳이 위험하게 업데이트 하지 않고 VM부팅시 롬파일을 읽어오도록 설정해도 된다.) 그러나 VGA는 메인보드와 달리 펌웨어를 업데이트해주는 제조사가가 거의 없다. 다른 회사 제품으로 카드 교체.
9. 노스브릿지에 PCIE 레인이 여렷 달려있는 서버용 메인보드의 경우 대부분 부트업 디스플레이 아답터 선택이 불가능하다. 우선순위가 높은 슬롯에 호스트에서 사용할 VGA를 장착해서 부트업 디스플레이로 만들어 주지 않으면 부팅 진행중 패스쓰루가 작동하는 순간 먹통이 된다. 10. 패스쓰루한 vga의 hdmi 오디오 프로세서를 사용하면 지글거림 없는 사운드를 경험할 수 있다 |