xenserver pgu pass-through 구현하기

 

 
작성자 : 서진우 (alang@clunix.com)

 

 

XenServer 6.2 환경에서 Physical Graphic Board를 passthrough 하는 방법에 대해 알아보자

 

간단한 절차는 아래와 같다.

 

Xenserver 6.2 설치 > Hotfix XS62E004 적용 > Hotfix XS62ETP001 적용(GRID K 이용시) >

Nvidia-vgx-xenserver 설치 (GRID K 이용 시) > Windows 7 VM 생성 (생성 시 VM 자동 시작 안함) >

vGPU 생성 및 VM mapping > VM 에 Windows 7 운영체제 설치 > HP RGS설치 > NVIDIA GPU driver 설치

 

> Xentools 설치

 

Xenserver 6.2 에서 GPU Passthrough 하는 방법은 크게 2가지로 나눈다.

 

하나는 Quadro나 Kepler 와 같이 일반적인 pGPU를 passthrough 를 통해 VM에 직접 할당하는

방법이다. 다른 하나는 GRID K2, K1 같이 NVIDIA VGX 기술을 이용한 vGPU를 VM에 할당하는

방법이다.

 

우선 pGPU를 VM에 제공하는 방법이다.

 

먼저 서버의 BIOS상에서 Intel VT-d 기능을 활성화 시킨다.

 

XenServer 상에서 Intel VT-d 기능이 적용되었는지를 확인다.

 

# xl dmesg | grep VT

————————————————————————

(XEN) Intel VT-d iommu 0 supported page sizes: 4kB.

(XEN) Intel VT-d iommu 1 supported page sizes: 4kB.

(XEN) Intel VT-d Snoop Control enabled.

(XEN) Intel VT-d Dom0 DMA Passthrough enabled.

(XEN) Intel VT-d Queued Invalidation enabled.

(XEN) Intel VT-d Interrupt Remapping enabled.

(XEN) Intel VT-d Shared EPT tables not enabled.

 

————————————————————————

XenServer 상에 인식되어 있는 GPU 장치를 확인한다.

 

# lspci | grep VGA

————————————————————————

02:00.0 VGA compatible controller: NVIDIA Corporation GF110GL [Tesla C2050 / C2075] (rev a1)

03:00.0 VGA compatible controller: NVIDIA Corporation GF110GL [Tesla C2050 / C2075] (rev a1)

07:01.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 (rev 0a)

83:00.0 VGA compatible controller: NVIDIA Corporation GK104GL [Quadro K5000] (rev a1)

84:00.0 VGA compatible controller: NVIDIA Corporation GF110GL [Tesla C2050 / C2075] (rev a1)

————————————————————————

 

 

# xe pgpu-list

————————————————————————

uuid ( RO)              : 5c89f6b2-3921-d8b5-a847-d85e882ef22f

vendor-name ( RO): Matrox Electronics Systems Ltd.

device-name ( RO): MGA G200eW WPCM450

gpu-group-uuid ( RO): bc73dd4e-35aa-14ad-94a5-35c7b37b3253

 

 

uuid ( RO)              : db3dbbdd-dd90-7000-79f6-fc10d23b8859

vendor-name ( RO): NVIDIA Corporation

device-name ( RO): GF110GL [Tesla C2050 / C2075]

gpu-group-uuid ( RO): f7197a87-ea53-556c-274c-c12c09fb20b4

 

 

uuid ( RO)              : 14648feb-5603-7020-3ed1-5a866222d035

vendor-name ( RO): NVIDIA Corporation

device-name ( RO): GF110GL [Tesla C2050 / C2075]

gpu-group-uuid ( RO): f7197a87-ea53-556c-274c-c12c09fb20b4

 

 

uuid ( RO)              : 4dfacb43-d8a8-6aa1-382b-06b97be79fbf

vendor-name ( RO): NVIDIA Corporation

device-name ( RO): GK104GL [Quadro K5000]

gpu-group-uuid ( RO): 74aa44ad-ac92-d451-c490-9c89bb5c0c59

 

 

uuid ( RO)              : dda1942f-7edd-90fb-0b6d-4bb612ad1836

vendor-name ( RO): NVIDIA Corporation

device-name ( RO): GF110GL [Tesla C2050 / C2075]

gpu-group-uuid ( RO): f7197a87-ea53-556c-274c-c12c09fb20b4

————————————————————————

 

다음으로는 Xenserver 상에서 인식하고 있는 GPU group 정보를 확인하다.

Citrix Xenserver 는 open Xen 가는 달라 동일한 사양의 GPU가 여러개 있는 경우 이를 하나의

그룹으로 인식을 하고, GPU 그룹을 여러 VM에 할당하면, 그룹내에 존재하는 GPU를 자동으로

개별 VM에 할당하도록 되어 있다. 즉 GPU 별로 pci id 를 일일이 파악하여 VM별로 개별 지정

할 필요가 없다.

 

# xe gpu-group-list

————————————————————————

uuid ( RO)                : f7197a87-ea53-556c-274c-c12c09fb20b4

name-label ( RW): Group of NVIDIA Corporation GF110GL [Tesla C2050 / C2075] GPUs

name-description ( RW):

 

 

uuid ( RO)                : 74aa44ad-ac92-d451-c490-9c89bb5c0c59

name-label ( RW): Group of NVIDIA Corporation GK104GL [Quadro K5000] GPUs

name-description ( RW):

 

 

uuid ( RO)                : bc73dd4e-35aa-14ad-94a5-35c7b37b3253

name-label ( RW): Group of Matrox Electronics Systems Ltd. MGA G200eW WPCM450 GPUs

name-description ( RW):

————————————————————————

 

일단 XenCenter 에서 GPU를 할당할 Windows 7 VM의 Metadata만 생성해 둔다. 기본적으로

VM Metadata 생성 시 자동으로 VM을 시작하여 운영체제 설치가 바로 진행되는데, 바로 시작하지

않은 상태에서 Meta정보만 생성한다.

 

이제 생성된 VM 정보를 확인한다.

 

# xe vm-list

————————————————————————

uuid ( RO)           : 755b8431-066d-b42d-260e-3f7e8a38c132

name-label ( RW): win7-01

power-state ( RO): halted

 

 

uuid ( RO)           : 41072988-71d3-7f20-b781-47235fff93fc

name-label ( RW): win7-02

power-state ( RO): halted

 

 

uuid ( RO)           : 1828ec5a-42bf-48ca-ab85-382288282df1

name-label ( RW): Control domain on host: xen-alang

power-state ( RO): running

 

 

uuid ( RO)           : b627fb12-ef0e-4347-8588-48353d961c33

name-label ( RW): win7-01s

power-state ( RO): halted

 

 

uuid ( RO)           : ea006743-5185-6130-4dc7-85d2535a3c4e

name-label ( RW): win7-03

power-state ( RO): halted

 

 

# xe vm-list name-label=win7-01

uuid ( RO)           : 755b8431-066d-b42d-260e-3f7e8a38c132

name-label ( RW): win7-01

power-state ( RO): halted

————————————————————————

 

이제 xe gpu-group-list 에서 확인된 GPU group을 특정 win7-03 VM에 할당해 보도록 하자

 

우선 기존에 할당된 gpu_group이 없는지 확인한다.

 

# xe vgpu-list vm-uuid=ea006743-5185-6130-4dc7-85d2535a3c4e

 

그럼 아무런 정보가 출력되지 않아야 한다. 만일 기존에 할당된 GPU가 있다면 아래와 같이

할당된 gpu-group-uuid 가 출력이 될것이다.

 

# xe vgpu-list vm-uuid=755b8431-066d-b42d-260e-3f7e8a38c132

uuid ( RO)              : 3dab6b01-c202-f723-8474-4529e030a00e

vm-uuid ( RO): 755b8431-066d-b42d-260e-3f7e8a38c132

gpu-group-uuid ( RO): f7197a87-ea53-556c-274c-c12c09fb20b4

 

만일 새롭게 gpu-group을 할당하고자 하면 아래와 같은 방법으로 기존 할당된 gpu-group

을 제거한다.

 

# xe vgpu-destroy uuid=3dab6b01-c202-f723-8474-4529e030a00e

# xe vgpu-list vm-uuid=755b8431-066d-b42d-260e-3f7e8a38c132

 

이제 win7-03 VM 에 Quadro K5000 의 pGPU를 할당한다.

 

pGPU를 할당하기 위해서는 win7-01의 uuid 와 Quadro K5000 GPU가 포함된 gpu_group의 uuid

정보가 필요하다. xe vm-list, xe gpu-group-list 명령으로 확인이 가능하다.

 

pGPU 할당은 xe vgpu-create 명령으로 가능하다.

 

# xe vgpu-create vm-uuid=ea006743-5185-6130-4dc7-85d2535a3c4e gpu-group-uuid=74aa44ad-ac92-d451-c490-9c89bb5c0c59

————————————————————————

7bdd7660-28da-31b2-b538-53c8bea68ec5

————————————————————————

 

xe vgpu-create 명령으로 VM 에 PGPU를 정상적으로  할당하면 XenServer레벨에서 인식하는

vgpu uuid 가 출력된다.

 

이제 win7-03 VM에 GPU가 정상적으로 할당되었는지 확인한다.

 

# xe vgpu-list vm-uuid=ea006743-5185-6130-4dc7-85d2535a3c4e

————————————————————————-

uuid ( RO)              : 7bdd7660-28da-31b2-b538-53c8bea68ec5

vm-uuid ( RO): ea006743-5185-6130-4dc7-85d2535a3c4e

gpu-group-uuid ( RO): 74aa44ad-ac92-d451-c490-9c89bb5c0c59

————————————————————————-

 

정상 할당이 되어지면 위와 같이 vgpu uuid 가 출력되어야 한다.

 

XenCenter 프로그램에서 해당 VM의 속성으로 들어가서 GPU 정보를 보면 Quadro K5000 GPUs 그룹이

할당되어 있는 것을 확인할 수 있다.

 

이제 위에서 설명한 바와 같이 Windows 7 운영체제를 설치하고, 원격접속툴(RGS, VNC)설치 ,

K5000에 대한 Nvidia Driver를 설치 한다.

 

Nvidia Driver 설치 완료 후 reboot 하면 다음 부터는 K5000 GPU 를 가상머신에서 기본 VGA로

인식하게 된다. 이때 XenCenter 프로그램의 VNC console 에도 화면이 나타날 수 있는데,

이는 Nvidia GPU를 인식하기 전까지 그래픽 화면을 표현할때 사용되는 가상 VGA장치를 생성

하기 때문에다. GPU passthrough 되면 가상 console 에 대한 VGA는 제거하는 것이 좋다.

 

아래는 기본 가상 VGA를 제거하는 방법이다.

 

# xe vm-param-set uuid=755b8431-066d-b42d-260e-3f7e8a38c132 platform:vgpu_vnc_enabled=false

 

OpenXen 에서는 hvm config 에 gfx_passthru=1 에 해당하는 명령이라 볼수 있다.

 

이제 정상적으로 GPU가 VM에 할당되어 동작하면 XenCenter의 console 화면에는 Black Screen

만 나타나게 된다.

 

VM 에는 원격 3D 그래픽 전송이 가능한 프로토콜(Citrix HDX3Dpro, HP RGS, TightVNC+DF Mirage,

RealVNC)을 이용하여 원격에서 고속의 3D 환경을 구현할 수 있다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...