- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
1. CentOS7.x-8.x系列为虚拟机配置GPU直通7 r+ N \9 {! w
复制代码- S2 y! u) p5 e
1. 编辑文件vim /etc/modules, 添加以下内容:# l. ~! C6 f8 g- S: L
pci_stub
) \& S0 n6 l0 X* g) i8 \5 Qvfio; M. h0 h1 j( l( [! d
vfio_iommu_type1 q3 l. K" e* v. v' y
vfio_pci* q+ D2 W; M+ @/ _* e# Y
kvm
: T& e% _, w; R& _4 Ekvm_intel
' P5 c( N p3 ]6 c: u* R9 ~6 }/ g- ?8 h, H& |1 W
2. 在KVM主机上启用IOMMU
7 v9 X, V/ r+ m: c#对于Intel芯片: Q! Y# C$ z+ A% J* E& _& Q% a$ C
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
$ s3 Y: {" B% L# r- U#对于AMD芯片:
9 ]. M; X2 {1 |/ I; GGRUB_CMDLINE_LINUX_DEFAULT="iommu=pt iommu=1"& _! o* q: Q6 B
; M* ]; N( U, ?! a5 A
vim /etc/default/grub d" w9 @1 T" `4 `. Z J# ?9 d$ h+ \) i
2 B w4 T% q% f
GRUB_TIMEOUT=5
s, b) M. R% W9 \' VGRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
: k. H6 X& E' p/ IGRUB_DEFAULT=saved
% g) e! \. O2 F/ D7 e8 R( {( aGRUB_DISABLE_SUBMENU=true
$ q }( M* h1 F* j; h( BGRUB_TERMINAL_OUTPUT="console"9 u) A$ n/ l% S
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet intel_iommu=on"8 @. `! `9 a+ A) ~
GRUB_DISABLE_RECOVERY="true"
# [$ b8 K+ d. i8 n
. j7 ~/ p/ f* v4 T6 f 3. 重新生成grub
& n# j+ O* h, ?9 y' c EFI
3 B0 `) h( K/ D8 B* p# b grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
& ]5 N J0 z2 Z9 s/ Q4 ~* ]- p$ _. ` 非EFI
! Z& \) I3 n' Q; e8 ^ grub2-mkconfig -o /boot/grub2/grub.cfg
& N) l& u" R( i/ T0 B! c5 E0 H5 q4. 将下列内容加入到blacklist中以避免被宿主机占用,编辑文件0 N5 T/ y0 T. i3 T" R8 Z
vim /etc/modprobe.d/blacklist.conf6 w% _- w1 G4 ~: ?- F7 G: C7 g& v
blacklist snd_hda_intel/ g: h5 g ?6 ~- H5 ?4 q* x
blacklist amd76x_edac. ^" F2 n5 Q& x, A
blacklist vga16fb
9 ?- O; Z7 G: _: J* ^0 ]' ~/ lblacklist nouveau7 p* s: W* E/ s2 Y \. X
blacklist rivafb
. p: U, N$ b. O2 ~8 X$ Rblacklist nvidiafb b' l4 v/ A6 G1 C8 y, q1 v
blacklist rivatv9 K8 S0 |* e+ q; k! _9 T7 v# D6 t
blacklist nvidia
, }- k S4 {2 i9 F; a: j; T1 {) D) K
5. 查找显卡的Product ID 以及 Vendor ID:
4 S: i5 I$ t1 Z: B1 Myum install pciutils -y1 B1 G% P' ~$ x1 j; a
lspci -nn | grep NVIDIA4 p7 B( h2 Q& V6 w* l, T
如下:5 G3 S% d: R% h0 ]3 h/ Z
[root@stein-a ~]#
2 I {. n) N* p9 }3 }03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)
4 V4 U: k4 |6 G4 h5 O* v( y03:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)5 w$ r7 Y6 n. K/ \3 a
+ A6 N# d$ c% i& G% b5 Y
6. 编辑8 Y( B2 Y% ?/ l" c! Z6 U. _ c9 ~
vim /etc/modprobe.d/vfio.conf
+ s O3 [/ e, v1 I& k2 ~( b# create new: for [ids=***], specify [vendor-ID:device-ID]
% I1 M# ?# T/ ]8 j6 U; Doptions vfio-pci ids=10de:1bb1,10de:10f0
1 Y3 ^; v( V* e) t/ K: p3 Y. q" H [2 g$ z
7. 写入到系统启动项8 e4 M* |4 y4 n& ?+ s
echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf , `/ [. L' O& a* @3 } d
- v T: Y2 G# _8. 重新生成initramfs/ V* d5 Z4 A' o! O% L4 J; U
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
8 Y6 l5 B$ _4 j$ u' J% wdracut -v /boot/initramfs-$(uname -r).img $(uname -r)
9 S, o) U6 @" S: L
6 r3 d0 @" j/ ~% O. s3 ?, j9. 重启系统
8 }+ O0 g% C* M0 w* R/ S% g7 r- y+ j" Ureboot
/ w; N. s; d1 t5 ^% `
1 ~! p" `* B* I1 c8 V6 f: J2 h" u10. 验证
' b6 H. T* x, L) `3 A- C3 W1 olspci -nnk -d 10de:1bb15 H0 `: l: S9 C* x/ L2 j3 D
dmesg | grep -i vfio. k2 w. h. [, E* o8 n
[root@stein-a ~]# lspci -nnk -d 10de:1bb1
6 j6 n5 R6 L. ^, u5 X03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)4 Q, x* R3 c& z% w# e
Subsystem: NVIDIA Corporation Device [10de:11a3]/ E9 x! G0 h( {2 L
Kernel driver in use: vfio-pci
. s" f2 k" x0 a0 o( K5 S( q$ O& D Kernel modules: nouveau' s8 G( h4 q; }, B) b5 l
[root@stein-a ~]# dmesg | grep -i vfio
* ?9 e. ~: _: ~3 ~& c. ~6 z2 i' u[ 2.503115] VFIO - User Level meta-driver version: 0.3, y7 [: F0 E, @+ N
[ 2.515645] vfio_pci: add [10de:1bb1[ffff:ffff]] class 0x000000/00000000/ y2 K" r6 b; ]$ \" l
[ 2.515752] vfio_pci: add [10de:10f0[ffff:ffff]] class 0x000000/00000000
$ {- D) I/ M) V+ t4 d[root@stein-a ~]#
( M8 u& w3 e4 [8 n7 l3 V复制代码5 ]$ S' y( S& R: @$ T' n) v q" d
) |' B: v. F/ }8 @- [2. Ubuntu18.04系列为虚拟机配置GPU直通# K U0 g, Z+ C
复制代码$ D( q- b3 D8 e7 m0 d/ g
1. 编辑文件vim /etc/modules, 添加以下内容:) G% i( H& N8 Y8 q( X' [: ], {2 |- T# p% Q
pci_stub* F; {) }: p9 n2 k
vfio% S5 J& r* w5 Y a
vfio_iommu_type1+ [4 }" v4 |7 w1 ^
vfio_pci8 A$ V, \, R( T s% s5 L# Z
kvm
% n! {/ k" Q; f; ~2 D: Tkvm_intel& }6 U" D2 S) `
; L+ Q% e0 a: r' @: W% \2. 在KVM主机上启用IOMMU - I2 L* _& q* E2 h1 L
#对于Intel芯片: Z: J& ?; n& Q9 `( B
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"
+ q+ B! [( c/ C8 l' X#对于AMD芯片:
& Y9 o! k. I3 e- I/ aGRUB_CMDLINE_LINUX_DEFAULT="iommu=pt iommu=1"
' m4 ~3 c; n2 t; X) T! h- f2 J' A. |; _, m! i& e
vim /etc/default/grub
% g8 C: w: S! n/ f" F8 U' t4 o, H+ C
GRUB_DEFAULT=0
' Z9 O+ `- B' i& |1 ~8 S' U! DGRUB_TIMEOUT_STYLE=hidden8 Q' i; X/ `8 g4 t3 F. g% ]
GRUB_TIMEOUT=0$ C/ j, G$ s& u" |- y( Y* V
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`+ B( V0 z& ]) L# |( O$ s
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"' G( e( z4 N. J' D5 x \
GRUB_CMDLINE_LINUX=""1 u# z+ h; \# [+ y: ?) r0 O
* g5 j( |4 b0 o 3. 重新生成grub
+ ^5 O& l9 O1 V- T6 z EFI
7 l+ w& U! P( v5 }3 v grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg9 }% f z8 ]* X" Z: w* [- R4 q
非EFI - d! s( ]. i7 ?: k5 Q9 l; ^
grub2-mkconfig -o /boot/grub2/grub.cfg
5 J6 l! E f; `, `" E h4. 将下列内容加入到blacklist中以避免被宿主机占用,编辑文件
# V' | F5 ]' L- x- V3 Evim /etc/modprobe.d/blacklist.conf9 P. k$ v* `! ]
blacklist snd_hda_intel v$ y3 L4 x8 @4 v
blacklist amd76x_edac
* D, }, V1 j+ cblacklist vga16fb
. V# z' y1 L9 ~, }4 Ablacklist nouveau
! [- `9 @8 C+ n2 wblacklist rivafb
6 d7 C- r$ `7 v. S1 k( _8 Pblacklist nvidiafb
8 x3 x2 E* P) u; U+ [: Gblacklist rivatv5 x, P; U( m3 U" l4 |1 V9 E
blacklist nvidia
7 [( t' D5 v8 w4 z7 u* B h7 b' {
# H2 i6 A' ?9 u8 {" K5. 查找显卡的Product ID 以及 Vendor ID:
% Q- T7 b1 C9 x( B- d; O- R- |apt install pciutils -y/ \+ X, G8 l5 l6 p7 |! |5 N
lspci -nn | grep NVIDIA
/ K9 Z9 r7 T" J) r, l Q如下:
: ]+ P- y c" \) M[root@stein-a ~]# lspci -nn | grep NVIDIA
' _3 q4 g# c& _% r) p8 Q03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1)) f" _5 v% k' p; R" _" x2 ~3 p Q
03:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)$ }! F% O9 V9 W1 R% X
2 i( g* B/ x5 c6. 编辑* T! ]" N- ~- K/ e/ h* z
vim /etc/modprobe.d/vfio.conf
* [6 a! n3 ~% |" u0 b2 G# create new: for [ids=***], specify [vendor-ID:device-ID]
! Y9 i7 s9 I. ooptions vfio-pci ids=10de:1bb1,10de:10f0% E4 V$ z9 G2 c) V+ Z* l3 Z
' b0 b5 R8 Y5 e, V6 J: c
7. 写入到系统启动项# o" }+ p% }* w! O- W e
echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
3 J$ k# P8 J% V0 q: m) w2 ]) f# P; ]
8. 重新生成initramfs3 y7 |5 e6 h! ]6 {0 E7 d, x
dracut -v /boot/initramfs-$(uname -r).img $(uname -r), s" X; |8 Y' ^& u9 w4 l
& g- ^6 E* k2 \
9. 重启系统
8 U( j$ d$ Q9 \* c6 ireboot
7 C) P. ~" h, |5 x6 B" u" \, A9 K' N, a, D/ z# C$ K# [
10. 验证# o" A7 }. P7 t
lspci -nnk -d 10de:1bb1 F# n' A0 Z5 o t" `
dmesg | grep -i vfio
' _- m" E8 k1 S8 c- _, M% _root@kvm:~# lspci -nnk -d 10de:1bb1
' u$ v6 j, ^' f. `5 tdmesg | grep -i vfio
: _3 q$ T: y4 w& P1 K" W03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104GL [Quadro P4000] [10de:1bb1] (rev a1). M( r o. Z5 g9 A4 S) P6 e9 A
Subsystem: NVIDIA Corporation GP104GL [Quadro P4000] [10de:11a3]& I! Y. _( h4 x/ \- B9 n) \ n7 O
Kernel driver in use: vfio-pci
" Y8 P" Y @% W: H% { Kernel modules: nvidiafb, nouveau! J& Z8 `4 J! @7 d
root@kvm:~# dmesg | grep -i vfio
, ?, K- c& ]3 M[ 3.838714] VFIO - User Level meta-driver version: 0.3
/ ~* _7 n5 i, o. Q[ 3.846238] vfio-pci 0000:03:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
! { W1 Z8 a. C# K. r& l[ 3.866370] vfio_pci: add [10de:1bb1[ffffffff:ffffffff]] class 0x000000/00000000
% ?8 y, y0 Z# G, ]6 F1 E. g+ x% ~[ 3.886375] vfio_pci: add [10de:10f0[ffffffff:ffffffff]] class 0x000000/00000000- E9 \1 w9 Z& h: X1 v/ e. b" E
复制代码; _. q- J7 U t$ h+ k/ O$ R6 F1 K
. g( p. q+ b9 _复制代码0 c# Y& a. L0 a# L G8 X9 P
#如果你单机部署的,在单机下配置。2 J { f9 o$ a* X; T6 K* Z! m4 Y; Y
#如果你是高可用部署的,在三台控制节点配置; e, a4 t8 C& g) z" ~, |
1. 添加pci
* ^' C' p: v8 ^7 s6 S7 k8 X9 {% Fvim /etc/kolla/config/nova/nova-compute.conf
# r) s% M1 x4 E[libvirt], i/ F5 |7 v. H- X" ]$ v9 C
inject_password=true: {1 x" _ h0 a7 [: O$ x0 k
cpu_mode=host-passthrough2 T' V' P3 c6 `; @% Q& r' t
virt_type = kvm4 C3 ^/ L% \6 {# E6 w2 h4 i/ K
[pci]/ m0 {$ {) e( K' s
passthrough_whitelist: { "vendor_id": "10de", "product_id": "1bb1" }
: c2 p( l# T1 I( D% Y8 c2 m& O) |! p( X$ s$ e
2. 修改nova.conf4 ?+ W" h. y( L/ p: G1 {. B
vim /etc/kolla/config/nova.conf4 U9 B$ k4 h3 J1 R# H( @- s
[DEFAULT]
1 @$ A# l$ {- I4 P% Z5 G m; g! lservice_down_time = 120, l) Q8 J+ s+ h4 I( J0 Z5 R
cpu_allocation_ratio = 4.0
9 k) n3 M' [" _! t: E7 m. j. Cdisk_allocation_ratio=1.04 s) F+ t6 B( p9 R, ?6 o
ram_allocation_ratio = 1.0
, k: t4 L7 A) M- _reserved_host_disk_mb = 4096
; ?+ k5 j0 V7 @reserved_host_memory_mb = 4096
7 X( \; K& D" a, fallow_resize_to_same_host = True 2 s9 u. m6 q" I8 z3 ?' W) A- ]/ Y- \1 ]
remove_unused_base_images = False
& A( a5 D6 q: Q' S5 _* yimage_cache_manager_interval = 0
. E& X2 J3 S+ b1 h- ?; c( u7 Bresume_guests_state_on_host_boot = True
. u3 D( n- n# R6 R& {) I% |
. g0 k4 U) A* e9 O3 c; P' O[PCI]* c1 R- J# a1 }4 ]1 @. ]# A
alias: { "vendor_id":"10de", "product_id":"1bb1", "device_type":"type-PCI", "name":"quadro-p4000" }
$ Y2 ~. z) W* ^; N[filter_scheduler]* _& N5 B& E+ O' P7 i7 c0 ^
enabled_filters = RetryFilter, AvailabilityZoneFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter
1 O1 ]/ _1 p# J# |available_filters = nova.scheduler.filters.all_filters, K! J4 _6 z' ^ B! b$ R, _* q& X
" q( A/ _4 z" g" Q6 \0 t w, K3 V
3. GPU 类型实例创建 * {! N) H% q9 E6 ?+ J7 y7 s, M1 O( C0 W
openstack flavor create --vcpus 4 --ram 8192 --disk 30 --property "pci_passthrough:alias"="quadro-p400:1" g1.4c.8m.p400
4 m |2 {! Q8 F3 h% R' c复制代码8 E2 T7 Q! Z# ^3 d4 x6 v' o
& f5 f$ Z, ~# N! a- O: |& `% m" g0 J u3. CentOS7.x系列 安装显卡驱动8 v: B7 ?7 @( z4 U# q) Q }
复制代码: m" p b, F5 W/ N, y9 g
1. 查看是否含有英伟达显卡' B" D3 @: L% B1 w5 |9 J
lspci | grep -i NVIDIA
6 S2 U7 F: q$ {) {- U! R4 V#下面说明有1块英伟达的显卡5 e( I' i, ~/ h
[root@train-all ~]# lspci | grep -i NVIDIA
2 z/ _1 D2 O, p0 K: E; \* X( K04:00.0 VGA compatible controller: NVIDIA Corporation GP104GL [Quadro P4000] (rev a1)
8 K# g3 ^( _" b3 M3 X: f/ ~04:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1); \) ]3 z& Z1 t8 j5 M4 A2 A/ |
[root@train-all ~]# 9 R& I; T% E8 l' X F8 K P5 l7 W
$ U( Z6 X5 Q1 q4 x1 l% A
2. 添加ELRepo源
; c* u- Q8 Y& I+ v1 P' q9 N6 `2 brpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
1 P. D0 N- I- c) O& w/ J
$ E! l. t. w" c j+ i* ~3. 安装ELRepo$ j" g4 T# p2 C
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm3 Y& y1 ^7 [# V L$ W) X, O
5 D( j% G. y- w a0 Y) n% `; t u4. 安装nvidia-detect
% A* Z$ a4 S) \& @+ r8 p$ Zyum install nvidia-detect -y
2 }- L3 v6 L* V% ^2 g4 E8 t$ n6 }3 D' j: G0 J2 ^0 m( }
5. 运行nvidia-detect7 N7 ?% W+ \2 w( M& f( o) ~
nvidia-detect -v9 Y3 X" J) s3 U5 Z
( L; {' `9 N$ @% ]2 ]* z6. 查找驱动程序
, { C1 p+ [5 d3 [: H6 v8 O9 l4 Yyum search kmod-nvidia
: ]" I; v% [# \9 E' L2 S6 t
5 B! D+ w% z& \! _+ [$ s7. 安装驱动程序
% w+ d2 |3 _1 e% ], R2 k# M" {yum install kmod-nvidia.x86_64 -y
2 v/ ~! F8 d! J* p. W3 R* o( B4 F4 l& m# i m( a+ k
8. 查看禁用Nouveau
, ~' z6 S k% Ilsmod | grep nouveau
. B: s3 m1 C N' J# t, |#若没有输出 则说明禁用成功,否则执行下面的命令; a' a3 H+ I9 T+ k& {+ }* l9 m
' W7 t6 X: D: u' i
9. 在/etc/modprobe.d/blacklist-nouveau.conf中创建一个文件,其内容如下:0 o" j1 C3 b1 o
vi /etc/modprobe.d/blacklist-nouveau.conf; X5 S- C( a9 O- R, e
添加
" H% W4 {$ J6 S# jblacklist nouveau
& c0 p2 \9 u9 r3 S. zoptions nouveau modeset=0
$ s) U- [3 ~. k. w% |! j% d8 N+ S7 y J
10. 重新生成内核initramfs6 R1 b- ~+ m \4 O
dracut --force( x8 ~) U7 ^. x, F# ~) X' j
1 o% s$ W; u9 [9 k
11. 重启系统
! d5 m+ u4 ^' }& o3 b. y, J, C8 l: Wreboot2 K G9 W; \+ T3 t: c& P
& o! r6 G1 r( e k4 J+ e12. 测试- m* Y7 _$ r, k. h" ?8 t9 J. b
nvidia-smi3 r8 m- X5 B a, O
|
|