xenserver vgpu pass-through 구현하기 – nvidia vgx – grid k1 – grid k2
작성자 : 서진우 (alang@clunix.com)
Nvidia 에서 Kepler pGPU를 vGPU 형태로 여러 VM에서 공유할 수 있도록 하는 VGX 기술을 만들었다.
해당 GPU Board 가 GRID K 시리즈이다. 현재 고급 3D 그래픽 사용자를 대상으로 하는 k2 시리즈와
일반 그래픽 사용자를 대상으로 하는 K1 시리즈가 출시 되었다.
Grid K1 board
pGPG : 4
vGPU Type : K140Q(파워유저, 1GB), K100(일반유저, 256MB)
K140Q : 16개 생성 가능, (pGPU 당 4개)
K100 : 32개 생성 가능, (pGPU 당 8개)
Grid K2 board (8GB)
pGPU : 2 (K5000급, 4GB)
vGPU Type : K260Q(전문가, 2GB), K240Q(파워유저, 1GB), K200(일반유저, 256MB)
K260Q : 4개 생성 (K2000급,2GB)
K240Q : 8개 생성 (K600급,1GB)
K200 : 16개 생성 (GT급,256MB)
GPU Passthrough 작업 전, 후는 pGPU와 거의 동일하다. 다른 점은 XenServer설치 후
Hotfix XS62ETP001 적용하고, XenServer 에 Nvidia vgx driver를 설치해야 하는 점이다.
그리고 VM에 GPU 할당 시 vgpu-type 이란 새로운 개념이 추가 된다는 점이다.
이제 vGPU Passthrough 적용 가능에 대해 알아보자.
우선 XenServer 6.2 설치하고, XS62ETP001 Hotfix 를 적용한다.
reboot
Nvidia 사에서 제공하는 NVIDIA-vgx-xenserer driver 를 Xenserver Host 에 설치한다.
# rpm -Uvh NVIDIA-vgx-xenserver-6.2-312.53.i386.rpm
reboot
우선 vgx driver 가 잘 인식되었는지 확인한다.
# lsmod | grep nvidia
nvidia 8524886 666
i2c_core 20294 2 nvidia,i2c_i801
# nvidia-smi
Fri Oct 25 16:47:44 2013
+——————————————————+
| NVIDIA-SMI 4.312.53 Driver Version: 312.53 |
|——————————-+———————-+———————-+
| GPU Name | Bus-Id Disp. | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GRID K2 | 0000:85:00.0 Off | Off |
| N/A 31C P8 27W / 117W | 95% 3910MB / 4095MB | 0% Default |
+——————————-+———————-+———————-+
| 1 GRID K2 | 0000:86:00.0 Off | Off |
| N/A 31C P8 27W / 117W | 96% 3915MB / 4095MB | 0% Default |
+——————————-+———————-+———————-+
+—————————————————————————–+
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| No running compute processes found |
+—————————————————————————–+
이제 pGPU를 확인한다.
# xe pgpu-list
———————————————————————————
uuid ( RO) : 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
vendor-name ( RO): NVIDIA Corporation
device-name ( RO): GK104GL [GRID K2]
gpu-group-uuid ( RW): 56a9d370-df44-64ab-31c3-b3649cc03247
uuid ( RO) : 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6
vendor-name ( RO): NVIDIA Corporation
device-name ( RO): GK104GL [GRID K2]
gpu-group-uuid ( RW): 56a9d370-df44-64ab-31c3-b3649cc03247
———————————————————————————
2개의 GRID K2 pGPU를 확인할 수 있다.
pGPU 의 세부 정보를 확인한다.
# xe pgpu-param-list uuid=7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
———————————————————————————
uuid ( RO) : 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
vendor-name ( RO): NVIDIA Corporation
device-name ( RO): GK104GL [GRID K2]
gpu-group-uuid ( RW): 56a9d370-df44-64ab-31c3-b3649cc03247
gpu-group-name-label ( RO): Group of NVIDIA Corporation GK104GL [GRID K2] GPUs
host-uuid ( RO): 63ffb0d6-cfea-405f-84ec-9feedacfbdc1
host-name-label ( RO): xen-alang2
pci-id ( RO): 0000:85:00.0
dependencies (SRO):
other-config (MRW):
supported-VGPU-types ( RO): b6d016bf-7475-f064-45e8-6bbc3c2f61fe; c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676
enabled-VGPU-types (SRW): b6d016bf-7475-f064-45e8-6bbc3c2f61fe; c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676
resident-VGPUs ( RO):
———————————————————————————
# xe pgpu-param-list uuid=62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6
———————————————————————————
uuid ( RO) : 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6
vendor-name ( RO): NVIDIA Corporation
device-name ( RO): GK104GL [GRID K2]
gpu-group-uuid ( RW): 56a9d370-df44-64ab-31c3-b3649cc03247
gpu-group-name-label ( RO): Group of NVIDIA Corporation GK104GL [GRID K2] GPUs
host-uuid ( RO): 63ffb0d6-cfea-405f-84ec-9feedacfbdc1
host-name-label ( RO): xen-alang2
pci-id ( RO): 0000:86:00.0
dependencies (SRO):
other-config (MRW):
supported-VGPU-types ( RO): b6d016bf-7475-f064-45e8-6bbc3c2f61fe; c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676
enabled-VGPU-types (SRW): b6d016bf-7475-f064-45e8-6bbc3c2f61fe; c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676
resident-VGPUs ( RO):
———————————————————————————
이제 XenServer Host에 존재하는 GPU Group 에 대해 확인한다.
# xe gpu-group-list
———————————————————————————
uuid ( RO) : 56a9d370-df44-64ab-31c3-b3649cc03247
name-label ( RW): Group of NVIDIA Corporation GK104GL [GRID K2] GPUs
name-description ( RW):
uuid ( RO) : 1f677c02-c0b6-ded5-2606-0bbaa91ff409
name-label ( RW): Group of Matrox Electronics Systems Ltd. G200eR2 GPUs
name-description ( RW):
———————————————————————————
지원되는 vGPU Type 를 확인한다
.
vGPU Type을 확인하기 위해서는 아래 명령을 수행해야 한다.
# xe-toolstack-restart
# xe vgpu-type-list
———————————————————————————
uuid ( RO) : b6d016bf-7475-f064-45e8-6bbc3c2f61fe
vendor-name ( RO):
model-name ( RO): passthrough
framebuffer-size ( RO): 0
uuid ( RO) : 217b6cc8-8470-6e43-6038-98adf2497676
vendor-name ( RO): NVIDIA Corporation
model-name ( RO): GRID K240Q
framebuffer-size ( RO): 1006632960
uuid ( RO) : 06b6d0dc-70d9-3134-b569-f521c4967617
vendor-name ( RO): NVIDIA Corporation
model-name ( RO): GRID K200
framebuffer-size ( RO): 268435456
uuid ( RO) : c8a09c89-e48c-cbfd-c76d-e493fbc2f98d
vendor-name ( RO): NVIDIA Corporation
model-name ( RO): GRID K260Q
framebuffer-size ( RO): 2013265920
———————————————————————————
Grid K2 는 총 4가지 형태의 GPU를 제공한다.
pGPU (K5000), vGPU-K260Q (K2000), vGPU-K240Q (K600), vGPU-K200 (GT)
vgpu-type 중 passthrough는 pGPU 를 직접 할당시키는 type이다.
vgpu-type 의 세부 정보를 확인해 보자. 아래는 K240Q type 의 세부정보이다.
# xe vgpu-type-list uuid=217b6cc8-8470-6e43-6038-98adf2497676 params=all
———————————————————————————
uuid ( RO) : 217b6cc8-8470-6e43-6038-98adf2497676
vendor-name ( RO): NVIDIA Corporation
model-name ( RO): GRID K240Q
framebuffer-size ( RO): 1006632960
max-heads ( RO): 2
supported-on-PGPUs ( RO): 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6; 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
enabled-on-PGPUs ( RO): 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6; 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
VGPU-uuids ( RO):
# xe gpu-group-param-list uuid=56a9d370-df44-64ab-31c3-b3649cc03247
uuid ( RO) : 56a9d370-df44-64ab-31c3-b3649cc03247
name-label ( RW): Group of NVIDIA Corporation GK104GL [GRID K2] GPUs
name-description ( RW):
VGPU-uuids (SRO):
PGPU-uuids (SRO): 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6; 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
other-config (MRW):
enabled-VGPU-types ( RO): c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676; b6d016bf-7475-f064-45e8-6bbc3c2f61fe
supported-VGPU-types ( RO): c8a09c89-e48c-cbfd-c76d-e493fbc2f98d; 06b6d0dc-70d9-3134-b569-f521c4967617; 217b6cc8-8470-6e43-6038-98adf2497676; b6d016bf-7475-f064-45e8-6bbc3c2f61fe
allocation-algorithm ( RW): depth-first
———————————————————————————
이제 VM에 GRID K2 에서 지원하는 vGPU를 할당한다.
vGPU 할당에 필요한 정보는 아래와 같다.
vm-uuid : VM의 uuid -> xm vm-list
gpu-group-uuid : pGPU가 소속된 GPU Group 의 uuid -> xe gpu-group-list
vgpu-type-uuid : VM에 할당한 vGPU 등급(passthrough, K260Q, K240Q, K200) -> xe vgpu-type-list
아래는 VM에 K240Q vGPU를 할당하는 명령이다.
# xe vgpu-create vm-uuid=a623c349-6b7f-709e-4e05-38dffc1c5bb8 gpu-group-uuid=56a9d370-df44-64ab-31c3-b3649cc03247 vgpu-type-uuid=217b6cc8-8470-6e43-6038-98adf2497676
ae8d116b-0d2c-07c3-af43-3f35fe1fdedf
할당이 완료된 후, vgpu-type-list 를 확인하면 할당된 VGPU-uuids 에 할당된 vgpu의 정보가 포함
되어 있다.
# xe vgpu-type-list uuid=217b6cc8-8470-6e43-6038-98adf2497676 params=all
uuid ( RO) : 217b6cc8-8470-6e43-6038-98adf2497676
vendor-name ( RO): NVIDIA Corporation
model-name ( RO): GRID K240Q
framebuffer-size ( RO): 1006632960
max-heads ( RO): 2
supported-on-PGPUs ( RO): 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6; 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
enabled-on-PGPUs ( RO): 62ce0ffc-aa26-9f03-ac95-406ee9a4e8f6; 7bd8ebb9-9f69-e9ef-9e68-2be71bddd172
VGPU-uuids ( RO): 7af519ba-bf7c-ac73-2032-56c93dd7770b; 78458e7a-6c21-69cd-e192-da71c8a4313c; 7dfe501e-cd1f-9998-4d3e-cbc5f30f36fb; ae8d116b-0d2c-07c3-af43-3f35fe1fdedf
마지막으로 VM 의 운영체제 설치 및 기본 작업을 완료한 후, VM 가상 console 을 제거한다.
# xe vm-param-set platform:vgpu_vnc_enabled=false uuid=755b8431-066d-b42d-260e-3f7e8a38c132
# xe vm-param-set uuid=826ac06c-4bee-1c9b-0ef3-b70a68853991 platform:vgpu_extra_args=”disable_vnc=1″ -> VM hang when booting
참고로 vGPU가 할당된 VM에서도 Nvidia Graphic driver를 설치해야 하는데, 반드시 GRID vGPU driver를
설치해야 한다. (312.56-grid-win7-64bit-english-whql.exe)