Mapping the GPU to a Virtual Machine


Instructions

Mapping the GPU to a Virtual Machine

Mapping of XenServer 6.0 Virtual Machine with GPU can either be done from CLI or from GUI. It is preferred to use CLI, since it gives exact GPU cards data as compared to XenCenter GUI.Notes:

  • Citrix XenServer Platinum Licensing is required to enable GPU-Pass through in XenServer.
  • Snapshot does not work with GPU Cards. It is highly recommended to create/delete/revert snapshot of VM when GPU card is not assigned to VM or else you may have garbage entries in XenServer and VM will not start properly.
  • You should not take default console using XenCenter after assigning GPU Card and Installing NVIDIA Driver. Either take VNC console or take remote console.

Mapping GPU to Virtual Machine using CLI1

  1. Attach Graphics cards to XenServer and get their list by running lspci | grep VGA, for example for ATI and nVIDIA attached cards run command, as displayed in the screen shot:
User-added image

Note: If cards are not listed properly then they are not attached properly to the server, reattach them and again list using lspci.

  1. If Xenserver is not licensed with Platinum Edition License then get it Licensed.
  2. Now check which all groups are created on XenServer. Note down GPU Groups UUID, for example, for ATI and nVIDIA attached cards run command, as displayed in the following screen shot:
User-added image
  1. Now check which all cards are there in XenServer. For Example for ATI and nVIDIA attached cards run command, as displayed in the following screen shot:
User-added image
  1. Assign GPU card to Virtual Machine. For this, you must note down UUID of the Virtual Machine, as displayed in the following screen shot:
User-added image
  1. Now check if any GPU is already assigned to it. If yes, then shut down the Virtual Machine and destroy that assignment.
User-added image
  1. You can notice in XenCenter that the GPU is unassigned:
User-added image
  1. Assign GPU to the Virtual Machine. You will get vgpu uuid as output:
User-added image

You can see same assignment is XenCenter, as displayed in the following screen shot:

User-added image
  1. Now you can start the Virtual Machine. Install latest nVidia Driver and take VNC console to install HDX3DPro Setup.

Mapping GPU to Virtual Machine using XenCenter GUI (prone to errors)

Note: You must be very careful while performing operations with XenCenter GUI, since removed cards entries can be there in XenCenter.
In Xencenter, you must access the Virtual Machine Properties and in GPU section select the GPU type. Once this is done, you will have GPU assigned to the Virtual Machine.

 

Xen

Xen에서는 다음과 같은 절차로 진행한다. (4.4 기준 – 다른 문서들은 과거의 것을 다루는 게 많아서 기록함)

  1. lspci -k 명령으로 대상으로 할 장치의 장치번호와 현재 연결된 드라이버 확인
  2. xen-pciback이 각 장치를 가로채서 물리적인 장치에서 사용하지 않도록 함
    1. /etc/modprobe.d/xen-pciback.conf 파일 생성
    2. install i915 /sbin/modprobe xen-pciback ; /sbin/modprobe –first-time –ignore-install i915 추가
    3. install radeon /sbin/modprobe xen-pciback ; /sbin/modprobe –first-time –ignore-install radeon 추가
    4. 단, USB 허브는 xhci_hcd, ehci-pci에 연결되어 있는데 모듈이 아니라 커널에 포함되어 있어서, 커널 설정을 모듈로 바꾸고 재컴파일해서 쓰지 않는 이상은 처리가 안 된다. 그냥 /etc/init.d/xendomains의 …_auto() 안에서 xl pci-assignable-add 00:00.0 식으로 각각 호출해서 쓴다. (/etc/rc.local에서 실행하는 것은 이미 /etc/xen/auto 디렉토리 안에 있는 가상머신이 호출된 다음이므로 의미가 없다)
    5. options xen-pciback hide=(xx:yy.z)(xx:yy.z) 식으로 lspci에서 확인한 장치번호를 모듈에 할당
    6. options xen-pciback passthrough=1
  3. /etc/initramfs-tools/modules 파일에 xen-pciback 추가
  4. update-initramfs -u -k all 명령으로 위에서 바꾼 modules 파일이 부팅시에 적용되도록 준비
  5. reboot
  6. xl pci-assignable-list 명령으로 부팅 직후에 장치가 준비된 것 확인

위 와 같이 했을 때 외장 AMD 그래픽 카드는 동작하는 것을 확인했으나 인텔 내장 그래픽(IGD)은 인식까지만 되고 동작을 하지 않는다. 리소스가 부족하다(not enough free resource, code 12)는 오류가 나온다.

Xen에서는 gfx_passthru = 1 옵션을 지정해야 동작하는 것으로 보인다. 위의 code 12 오류가 이 옵션이 없어서가 아닐까 의심된다. qemu-xen-traditional에서만 지원하는 옵션이라고 한다. Xen 4.3부터 traditional이 기본이 아니게 바뀌었으므로 직접 변경해야 한다.

  1. /etc/xen/xxx.cfg 설정 파일을 수정
  2. device_model_version = ‘qemu-xen-traditional’ 추가
  3. gfx_passthru = 1 추가
  4. pci = [ … ] 안에 위에서 준비해둔 PCI 장치를 쉼표(,)로 구분하여 나열
  5. xen_platform_pci = 1 추가 (없으면 윈도우 로고 화면에서 진행되지 않음)

여기까지 하고 xl create xxx.cfg 파일로 가상머신을 실행하였을 때, 부팅 직후 꺼졌던 내장 그래픽에 연결된 모니터가 다시 켜지는 것을 확인할 수 있다. 해당 OS에서 적절한 드라이버를 잡아주면 정확히 장치를 인식한다.

2 개의 OS를 그래픽 없이 따로 두고 AMD 외장 그래픽을 pci-detach, pci-attach 명령으로 번갈아가며 쓰는 구성은 gfx_passthru=1 설정이 없는 상태에서는 code 12 오류가 나오고, gfx_passthru=1 설정이 있는 상태에서는 그래픽이 있어야 부팅이 진행된다. 따라서, 어느 쪽이든 원활하게 쓰기는 어렵다.


답글 남기기

이메일 주소는 공개되지 않습니다.