|
|
1. CentOS7.x-8.x系列为虚拟机配置GPU直通
! \" C8 ]7 b8 U8 e+ N复制代码, x1 `0 e& f3 | l& b4 n* ^' U
1. 编辑文件vim /etc/modules, 添加以下内容:
" u8 d, ^- d0 ?8 d7 g/ ]8 K6 h) mpci_stub
# n. f* j% O5 Uvfio& C8 o6 g) H) c2 D, t$ O% h( k
vfio_iommu_type1& ?/ b) J/ x8 F$ |% p
vfio_pci% r# O, N' {( H4 {1 b' [# ]
kvm
# `2 Z6 v% J, @8 F) |, kkvm_intel! k& K9 M8 D1 W# W& e9 ~
5 q/ _* ? `2 o7 T2. 在KVM主机上启用IOMMU
, F$ g8 W, k e5 I1 x, ^' X! H+ {* ^#对于Intel芯片:
7 ]6 p4 `) K5 [GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"5 [7 u8 v0 N% {: Y
#对于AMD芯片:
1 z; z; s; e+ HGRUB_CMDLINE_LINUX_DEFAULT="iommu=pt iommu=1"
0 A9 @7 h4 |" G8 g) b% T | ]1 S' r$ w* t* v# D \2 D
vim /etc/default/grub* K( b N+ E. S, E5 B- r
2 [! A2 S8 v& B( A1 WGRUB_TIMEOUT=5. ?7 F. d W: R
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)", ^) M1 q" A3 _& v$ \5 f4 n# n) ^5 l
GRUB_DEFAULT=saved
# b" t; X" O) b7 a6 _2 a4 CGRUB_DISABLE_SUBMENU=true
0 P4 T2 Y% ^/ d) b3 W% tGRUB_TERMINAL_OUTPUT="console"* m6 d, K, [ Q3 u# m* R* V
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet intel_iommu=on"
7 u: V7 M/ x9 b9 |GRUB_DISABLE_RECOVERY="true", U) T2 k) R. G' K4 F0 {0 u
, c |; w/ p8 o6 q; P8 t6 s; N
3. 重新生成grub
. Q/ b) V; v9 j* g% x/ w$ m8 [( A EFI
% a; ~. N) C. v0 ?' F9 r4 n7 V grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
) W2 P6 j: |5 P9 Q: U 非EFI
% l' C9 S, Y3 V2 } grub2-mkconfig -o /boot/grub2/grub.cfg
4 }0 l Q' n2 z$ K* }5 V4 h4. 将下列内容加入到blacklist中以避免被宿主机占用,编辑文件! @* F4 ^0 \! Q( N! o
vim /etc/modprobe.d/blacklist.conf
$ L8 e- B' {, U# x6 U( Z" S5 vblacklist snd_hda_intel/ p! m3 N& c( |# u# e; m& h
blacklist amd76x_edac
# B. ?. N f# f1 A$ c# D; hblacklist vga16fb0 r( R& E1 b& [
blacklist nouveau
- e( n: Z3 x( j0 a6 t6 ?blacklist rivafb7 G* r0 x4 s; V" m7 R
blacklist nvidiafb
% @5 K k: l) G7 ~ ~blacklist rivatv9 }$ r, Y- D" a) P, F- P
blacklist nvidia& c# P0 k5 l. `9 Z0 w) e( k
# t/ H4 R# R' h. P1 M3 W
5. 查找显卡的Product ID 以及 Vendor ID:
* G4 y+ F3 B5 u% |% d. Gyum install pciutils -y9 ^2 M( [! P& j# V. t2 }9 G
lspci -nn | grep NVIDIA7 y8 d$ F2 i" j
如下:
s5 W; o Q8 X8 G! c& f, b0 b[root@stein-a ~]# . x! t8 g( Q# y4 i; L& I" g& ]; h9 u
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)/ R% X2 o( E! z) L1 I8 D
03:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)
. v' R4 i* ]5 m4 p+ f, ^; w% J" z: G+ w5 M2 l) B
6. 编辑) \% E& X% i: s Y3 V
vim /etc/modprobe.d/vfio.conf
7 R1 b$ c5 C: H, u: ]% a& w# create new: for [ids=***], specify [vendor-ID:device-ID]- ]& d: {( T R, p$ z
options vfio-pci ids=10de:1bb1,10de:10f0
@& N9 g1 X7 K6 L/ A/ w* x$ i9 y2 a0 r
7. 写入到系统启动项
M. U+ H/ b/ d8 o ~( `3 Hecho 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf ) j* U1 S$ \ O8 C
, M, I( T6 L; U* `
8. 重新生成initramfs5 Z& ]2 h4 `6 ]' U# Z
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak0 U- v8 X, L& e, T4 { o
dracut -v /boot/initramfs-$(uname -r).img $(uname -r); \+ ^7 y5 A# f5 c
: O6 C' N* q3 b& P& w5 ?+ t& @9. 重启系统
# d# I: _* I1 Q0 p4 preboot! m1 P0 M) b3 x+ B2 K. P" c/ @5 f
7 S0 _4 R9 |/ g9 f0 D5 C; {# }5 n7 l
10. 验证) f# v" ^/ z) U q
lspci -nnk -d 10de:1bb1- O. q$ [1 Z3 P$ d+ N, g+ g
dmesg | grep -i vfio% V( y0 z, f3 a, C+ u
[root@stein-a ~]# lspci -nnk -d 10de:1bb1
5 i& O' }5 y; T1 J" `! z03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)0 J7 K, z; ]& U; t7 n6 Q8 p! l" ]
Subsystem: NVIDIA Corporation Device [10de:11a3]
! Q' e. l% O g/ _8 [ Kernel driver in use: vfio-pci
, p: n- ~8 A# K8 E. Y$ A& r Kernel modules: nouveau* K/ X) r e7 R# J
[root@stein-a ~]# dmesg | grep -i vfio. G4 E3 P8 K9 Q! {
[ 2.503115] VFIO - User Level meta-driver version: 0.3
) g+ Z9 Z( c8 g4 h% C) ~. x[ 2.515645] vfio_pci: add [10de:1bb1[ffff:ffff]] class 0x000000/00000000
& `! m" a6 q$ p4 I[ 2.515752] vfio_pci: add [10de:10f0[ffff:ffff]] class 0x000000/00000000- k& ~+ C- C0 O4 M! e2 T* S# B4 _+ q
[root@stein-a ~]#
$ r: ~+ O7 v6 h* x; ]复制代码
8 b$ J! u& N' t8 J
# O8 y+ |) q% L6 N2. Ubuntu18.04系列为虚拟机配置GPU直通
' R" H9 K. d! ^$ P0 Y. g+ _( E+ E复制代码
, s' T- s' y: f8 I2 V% {1. 编辑文件vim /etc/modules, 添加以下内容:
0 w" i3 i. m* i$ fpci_stub
" z2 C9 C) I" B; s8 Avfio' {# b$ E8 O \7 {: d4 x
vfio_iommu_type1# ]6 V; a/ r' T/ h2 ^- ]7 V
vfio_pci$ k8 W P/ l( L; _
kvm* u ^9 H! j/ C- N
kvm_intel
7 T3 L/ Y6 q3 R4 m5 _; k
+ f, `1 g1 A- m& Q" a2. 在KVM主机上启用IOMMU
$ b9 v5 V( p6 z* Q% l#对于Intel芯片:& u: D) H H# c, u
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"
7 V7 U9 D# j+ w c4 A! f/ w& M#对于AMD芯片:- _ k% @' t; r2 f
GRUB_CMDLINE_LINUX_DEFAULT="iommu=pt iommu=1"3 r% z% t( q) ]' k/ D' f
* {( I6 ^3 Z/ R- w# w4 H# c4 `
vim /etc/default/grub
! }( p1 [3 T# b9 e
& }8 v( g" X7 xGRUB_DEFAULT=0; t" J1 c8 r6 m* `
GRUB_TIMEOUT_STYLE=hidden
* T& M# b t* j: x4 jGRUB_TIMEOUT=0! {) q1 d5 R2 g- ^8 N
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
$ |7 p* k6 F$ h" `$ {% gGRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"% K0 @% M: V9 n7 J6 V
GRUB_CMDLINE_LINUX=""
/ c9 G1 G2 f& L; `6 z2 W0 o' e( |- q4 y7 G
3. 重新生成grub
: \; Z' H, R3 { H EFI
0 t0 V: X4 b D# ^) L grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
: U$ e! f" ` e4 f4 q5 T* y. [* i 非EFI * s/ v' D D0 v) }$ P
grub2-mkconfig -o /boot/grub2/grub.cfg& g$ l+ h U- ~6 e
4. 将下列内容加入到blacklist中以避免被宿主机占用,编辑文件) A i2 h( n! x+ q! p- z8 O7 j
vim /etc/modprobe.d/blacklist.conf
9 J" ~6 V( r( ?9 k- `& A- xblacklist snd_hda_intel
- @8 ^* a9 ]; [& ablacklist amd76x_edac9 |( I$ h5 x* w6 [& U
blacklist vga16fb
- z# |2 c0 p% m6 Ablacklist nouveau3 p' [& T& n) H- N' i
blacklist rivafb/ B s2 R1 g" z8 h, M
blacklist nvidiafb
' b/ F! E* l, O5 }8 cblacklist rivatv+ S. ^. r' [6 q
blacklist nvidia% m0 m, r" u+ A+ m: f" ?! d
( @% c* P8 {( r1 O
5. 查找显卡的Product ID 以及 Vendor ID:9 e l" [/ o/ n8 C) c
apt install pciutils -y
: f- ]6 p F5 K( Flspci -nn | grep NVIDIA
* K+ G6 Z5 T7 R5 X6 X d+ ?1 x/ {如下:
( N& t& K3 O6 |) q[root@stein-a ~]# lspci -nn | grep NVIDIA
# E+ U( I; N7 {) V, [03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)
; b" P; e- r% [# C4 r( n; Q, d03:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)$ y4 a9 E/ g* k4 ]! G; w+ e
s" ]( `0 T; ]. E# X6. 编辑, a% S1 {- w5 T4 o' O& s3 G) t
vim /etc/modprobe.d/vfio.conf
3 `# D! Z+ c& A4 w# create new: for [ids=***], specify [vendor-ID:device-ID]& ], r/ x4 H* z# K4 y; j5 d
options vfio-pci ids=10de:1bb1,10de:10f0! c; C2 P8 T$ Q0 b
! ]+ g7 P4 y& {( F1 n+ ^
7. 写入到系统启动项
$ {2 W( H @" Z+ e0 ]( G% ^$ Xecho 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf # H1 v# B9 v) M7 g1 a& r
7 g+ ~- C7 k( X5 l$ U& C. k' w1 k8. 重新生成initramfs
1 D1 c4 D; p; H) sdracut -v /boot/initramfs-$(uname -r).img $(uname -r)7 [3 t$ m; J. j; w* f* r, I1 u
4 G3 G# E! Q) s/ D9. 重启系统8 l5 y0 K- d' r( C) Y0 ~2 `8 v
reboot) x6 T e: R1 S+ I
2 @( S. J U& `/ F' \10. 验证* ]/ Z/ n3 Y3 u% R& y& O, Y l3 o
lspci -nnk -d 10de:1bb1
2 T c3 g5 D* m- h% e4 t; admesg | grep -i vfio
6 |* _+ h" |' b1 c# e; Iroot@kvm:~# lspci -nnk -d 10de:1bb12 s/ R8 J) |: t' j w) Y \
dmesg | grep -i vfio# Q, I, M7 D( z
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)* K) R4 g5 T" M. n0 Z W7 F- t. r4 p
Subsystem: NVIDIA Corporation GP104GL [Quadro P4000] [10de:11a3]0 ]6 j* h# g. t$ M: X5 {& f i8 T
Kernel driver in use: vfio-pci; r/ w, m- q" u! S0 R3 T
Kernel modules: nvidiafb, nouveau
6 \4 `+ x- L- b" O) y4 l2 Oroot@kvm:~# dmesg | grep -i vfio
& ~% a# c$ t7 E7 |* _[ 3.838714] VFIO - User Level meta-driver version: 0.3
d, j2 b0 G5 K0 X[ 3.846238] vfio-pci 0000:03:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
0 k- n6 ?" I1 K$ [' L: }1 @" Y[ 3.866370] vfio_pci: add [10de:1bb1[ffffffff:ffffffff]] class 0x000000/00000000; \6 X. \- h" P% l* W, o. [! E
[ 3.886375] vfio_pci: add [10de:10f0[ffffffff:ffffffff]] class 0x000000/000000009 J3 [/ Q" w2 J6 F* m9 U @
复制代码
, r" f% F, T1 i) [
, I& K/ z ^% i2 R: e3 D复制代码
% }: ]! K6 c- I/ e* n#如果你单机部署的,在单机下配置。* o- l6 `6 ]* b, h2 L; F8 U6 P
#如果你是高可用部署的,在三台控制节点配置. O5 F4 x% y# X) ?& V: ]' q
1. 添加pci* F6 P: G7 }# B0 A
vim /etc/kolla/config/nova/nova-compute.conf, ?* j/ m$ |$ u: R" E) G
[libvirt]7 @3 ]4 E% t. }( {, V9 x$ M) W& n
inject_password=true
. q7 P9 A6 }0 K4 ncpu_mode=host-passthrough
5 S* v O; E* D* q9 Q; Gvirt_type = kvm. w9 y2 i9 J" B! F, ^
[pci]
" C8 F* a: @' G* l2 }passthrough_whitelist: { "vendor_id": "10de", "product_id": "1bb1" }
+ S$ T! j! O! i% u. e' ^) z
* c! z. H! ~% ~" t; A2. 修改nova.conf
$ ` C4 G# P" ]) M% O3 A4 E' t# uvim /etc/kolla/config/nova.conf) P3 O( i5 t8 g9 t h! F# g% N
[DEFAULT]
' N+ T, S9 V3 t1 B& Yservice_down_time = 1203 o- Q0 [) y& @7 @
cpu_allocation_ratio = 4.0
5 E; m/ v0 D* ]0 Idisk_allocation_ratio=1.0
; k1 |1 F# h! V# r% B+ mram_allocation_ratio = 1.0
$ J7 ^' o9 h$ ?8 P1 Nreserved_host_disk_mb = 4096
4 O3 m8 X$ S* A3 hreserved_host_memory_mb = 4096 . D( D% |# Y1 \: Z$ C7 F1 S
allow_resize_to_same_host = True ' [+ w, N4 Q( _+ b3 t2 l3 ~& S
remove_unused_base_images = False
6 P S7 @0 W9 nimage_cache_manager_interval = 0
# \3 `1 E9 o+ _/ W4 j0 {3 gresume_guests_state_on_host_boot = True5 j0 ?9 B/ f9 Z
4 R' O; _/ t D+ P& ]) H# j[PCI]7 G9 D7 K. n& ~% A+ o+ V( `
alias: { "vendor_id":"10de", "product_id":"1bb1", "device_type":"type-PCI", "name":"quadro-p4000" }/ u: b/ d8 |! g. [( `( _. L! k
[filter_scheduler]8 R: {3 u( Q6 d
enabled_filters = RetryFilter, AvailabilityZoneFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter' [2 J8 f- x* U
available_filters = nova.scheduler.filters.all_filters
+ |$ G/ W0 g5 H9 c' V9 b
* t7 l0 e* b9 p- f0 ^6 t3. GPU 类型实例创建
9 }9 ], e: m H/ o# `, ?openstack flavor create --vcpus 4 --ram 8192 --disk 30 --property "pci_passthrough:alias"="quadro-p400:1" g1.4c.8m.p400/ _7 J8 z8 O8 l+ M
复制代码2 I$ L1 D6 H5 [6 p
0 J4 o: X4 X# y4 }
3. CentOS7.x系列 安装显卡驱动
$ ]1 g* v, C' o9 ~: x x复制代码2 x3 A# W1 W% T, \
1. 查看是否含有英伟达显卡
9 z! |+ p4 |6 a; w9 r' _& w& clspci | grep -i NVIDIA+ ?" |3 j/ }, K/ o( B5 Y" X" V
#下面说明有1块英伟达的显卡" _9 n5 `+ r+ {
[root@train-all ~]# lspci | grep -i NVIDIA: e# j( _' A3 t" H1 |) i- J
04:00.0 VGA compatible controller: NVIDIA Corporation GP104GL [Quadro P4000] (rev a1)/ }2 @* w- p# Q- c$ V1 D/ l
04:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)% ?/ h. d& Z2 F$ ^+ U8 d9 ]) D
[root@train-all ~]# - Z6 C4 L, z0 L: u2 z; K. I8 s
$ x; \$ ~9 y; a" }, {, u w
2. 添加ELRepo源; U( ]& U m3 w3 I
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
6 X V+ ?- A5 g8 l! a4 i, ?0 @: P( c6 @& J4 [/ \: F
3. 安装ELRepo
# A$ R2 Q. d4 R% Frpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
) h( j# W0 ~1 t, C5 t( W9 o x
0 t" E/ h- }5 e2 [. a5 J) \* J4. 安装nvidia-detect* c! [1 [- ?$ R" [ _. Y V4 b
yum install nvidia-detect -y" Z. [" U8 ~% J, l( F3 D# S" D
) J, d2 D; C$ j' b' _0 ?; _% F2 Z5 N
5. 运行nvidia-detect- r" i( [9 x, }; Q. b" F, Z4 F. l
nvidia-detect -v
0 j- u# S4 b% x" ^( Z% B. g8 }8 k- j9 |6 ?/ P! ?2 A6 E
6. 查找驱动程序( m9 R: W& Z4 }# W4 \
yum search kmod-nvidia
" l, J- b& U+ Z) `( m/ `. R5 A
3 O( _0 V, z3 c0 Z/ t6 Y8 B7. 安装驱动程序- y, p$ |0 c7 n4 i: P1 Z/ {
yum install kmod-nvidia.x86_64 -y) I# H3 x9 }% Q
* [: J C: ~/ S2 b8. 查看禁用Nouveau- Y! w- c3 G5 B9 h
lsmod | grep nouveau
3 x5 U" K: l! L* r9 l) U% v#若没有输出 则说明禁用成功,否则执行下面的命令
- L* D, b$ L5 Z& ` z9 l# m3 p
, z9 ^- p3 @: y& y5 r9. 在/etc/modprobe.d/blacklist-nouveau.conf中创建一个文件,其内容如下:5 f+ e. o# {% j5 P- f9 [$ P/ q. v/ g! t
vi /etc/modprobe.d/blacklist-nouveau.conf$ N/ R8 G0 L! G; ~# d
添加6 t5 k3 m5 q* R
blacklist nouveau
. ?8 {3 v( }: N( g) F* Hoptions nouveau modeset=0; H3 ?) u% }3 A. g
4 w" O3 S/ G Q0 {$ D
10. 重新生成内核initramfs4 ^: N1 k, ^- W9 M. n% f r
dracut --force
; U/ U+ h. Q. r6 f. Q& d
4 j2 A5 h9 t; L5 q$ B11. 重启系统2 G; X5 Q. R' F- S# H
reboot
1 i: \0 l6 j2 o2 j3 Y% Z
4 {6 E8 I, q( w; f2 ]12. 测试
, o! W8 |- z; E1 xnvidia-smi
6 Z U0 ~, ]/ ]2 o |
|