#1 Le 09/06/2022, à 14:52
- thewisepenguin
Vieille carte nvidia et libvirt GPU passthrough
Bonjour,
J'ai une très vieille carte nvidia (NVIDIA Corporation GF108 [GeForce GT 430]) que je voudrais utiliser en GPU passthrough à une VM pour faire du transcoding avec Jellyfin (docker). (oui, je sais, le niveau d'inception n'est pas négligeable :-p)
Je me permets de poster sur ce forum car j'ai vu dans un autre thread de ce forum quelqu'un (diesel) qui a la même carte et qui l'a fait fonctionner sur Ubuntu 20.04.
Voici des infos sur ma config.
Ubuntu Server 20.04 (HOST):
$ lspci -vvn
...
82:00.0 0300: 10de:0de1 (rev a1) (prog-if 00 [VGA controller])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 113
NUMA node: 1
Region 0: Memory at c8000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at 3fff0000000 (64-bit, prefetchable) [size=128M]
Region 3: Memory at 3fff8000000 (64-bit, prefetchable) [size=32M]
Region 5: I/O ports at 8000 [size=128]
Expansion ROM at c9080000 [disabled] [size=512K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: nvidiafb, nouveau
...
Ubuntu 20.04 Server (GUEST):
$ lspci -vvn
...
09:00.0 0300: 10de:0de1 (rev a1) (prog-if 00 [VGA controller])
Physical Slot: 0-8
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 23
Region 0: Memory at f8000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at d8000000 (64-bit, prefetchable) [size=128M]
Region 3: Memory at e0000000 (64-bit, prefetchable) [size=32M]
Region 5: I/O ports at c000 [size=128]
Expansion ROM at f9000000 [disabled] [size=512K]
Capabilities: <access denied>
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
Sur base des conseils de ce post, j'ai installé le nvidia-headless-390 qui me permet de voir que le module est bien chargé:
Ubuntu Server 20.04 (GUEST):
$ lsmod | grep nvidia
nvidia_uvm 798720 0
nvidia_drm 45056 0
nvidia_modeset 1056768 1 nvidia_drm
nvidia 15847424 2 nvidia_uvm,nvidia_modeset
drm_kms_helper 184320 4 qxl,nvidia_drm
ipmi_msghandler 106496 2 ipmi_devintf,nvidia
drm 491520 5 drm_kms_helper,qxl,nvidia_drm,ttm
Le problème: nvidia-smi ne fonctionne pas, que ce soit sur le GUEST ou via docker (en ayant suivi la doc officielle de nvidia pour le fait de passer les GPUs nvidia dans les containers docker):
Ubuntu Server 20.04 (GUEST):
$ nvidia-smi
Unable to determine the device handle for GPU 0000:09:00.0: Unknown Error
$ docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: detection error: nvml error: unknown error: unknown.
La parite de l'XML que j'ai modifié pour le passthrough:
...
<cpu mode='host-passthrough' check='partial'>
<feature policy='disable' name='vmx'/>
</cpu>
...
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev0'/>
<address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</hostdev>
...
Est-ce que c'est un soucis de hardware?
Est-ce que c'est un problème de "c'est beaucoup trop vieux"?
Est-ce que c'est trop d'essayer de le passer en "passthrough"?
Autre?
Merci d'avance pour votre aide!
Hors ligne