Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« Open-gpu-kernel-modules » : différence entre les versions

De Le Wiki de Lug
Aucun résumé des modifications
Ligne 140 : Ligne 140 :


  # reboot
  # reboot
== Vérification de l'installation ==
* On test si le p2p est bien activé :
# nvidia-smi topo -p2p r
# nvidia-smi topo -p2p w
Exemple de résultat avec deux GPU :
        GPU0    GPU1
  GPU0  X      <font color="blue">OK</font>
  GPU1  <font color="blue">OK</font>      X
* On peut installer les outils de benchmark CUDA. Le CUDA Toolkit doit être installé au préalable :
# cd /opt
# git clone <nowiki>https://</nowiki>github.com/NVIDIA/cuda-samples.git
# cd /opt/cuda-samples
# export PATH=/usr/local/cuda-<font color="blue">13.3</font>/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda-<font color="blue">13.3</font>/lib64:${LD_LIBRARY_PATH}
# cmake -S . -B build -DCMAKE_CUDA_COMPILER=/usr/local/cuda-<font color="blue">13.3</font>/bin/nvcc
# cmake --build build --target p2pBandwidthLatencyTest -j$(nproc)
Puis on lance le benchmark :
# /opt/cuda-samples/build/cpp/5_Domain_Specific/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest

Version du 7 août 2026 à 09:41

Source.

Prérequis

  • Un ou plusieurs GPU NVIDIA grand public dont la fonction P2P est désactivée par le pilote (architecture Turing ou plus récente).
  • Recommandé : activer l’option Above 4G Decoding dans le BIOS de la carte mère, particulièrement avec plusieurs GPU. Activer également Resizable BAR si la plateforme le permet.
  • Recommandé : utiliser un démarrage en mode UEFI et désactiver le CSM. Cette configuration facilite la gestion de plusieurs GPU, l’allocation des ressources PCIe au-dessus de 4 Gio via Above 4G Decoding et l’utilisation éventuelle de Resizable BAR

Activer le mode de passthrough DMA pour l’IOMMU

  • On édite Grub :
# vi /etc/default/grub

On ajoute à la variable GRUB_CMDLINE_LINUX_DEFAULT les options suivantes :

  • Sur plateforme Intel : intel_iommu=on iommu=pt
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
...
  • Sur plateforme AMD : amd_iommu=on iommu=pt
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
...
  • On met à jour GRUB :
# update-grub
  • On redémarre :
# reboot
  • Après redémarrage, on vérifie que les paramètres sont bien appliqués :
# cat /proc/cmdline

Recommandé : vérifier et désactiver ACS sur les ports PCIe concernés

Lorsque l’ACS est activé sur les ports racine ou les bridges PCIe, le trafic GPU à GPU peut être redirigé vers le complexe racine du processeur, ce qui réduit fortement la bande passante P2P.

Tous les ports PCIe n’exposent cependant pas nécessairement ACS. Il faut donc commencer par identifier les ports utilisés par les GPU, puis vérifier si ACS est présent et actif sur ceux-ci.

Identifier les ports PCIe utilisés par les GPU

  • On affiche la topologie PCIe :
# lspci -tv

Exemple de résultat :

...
-[0000:00]-+-00.0  Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers
           +-01.0-[01]--+-00.0  NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate]
           |            \-00.1  NVIDIA Corporation GA106 High Definition Audio Controller
           +-01.1-[02]--+-00.0  NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate]
           |            \-00.1  NVIDIA Corporation GA106 High Definition Audio Controller
...

Dans cet exemple, les deux GPU sont respectivement connectés aux ports PCIe 0000:00:01.0 et 0000:00:01.1.

Vérifier l’état d’ACS

  • On vérifie si les ports concernés exposent ACS :
# lspci -s 0000:00:01.0 -vv | grep -E 'Access Control Services|ACSCap|ACSCtl'
# lspci -s 0000:00:01.1 -vv | grep -E 'Access Control Services|ACSCap|ACSCtl'

Si aucune ligne n’est retournée, le port concerné n’expose pas ACS et aucune modification n’est nécessaire.

Si ACS est présent, une sortie de ce type peut apparaître :

Capabilities: [140 v1] Access Control Services
        ACSCap: SrcValid+ TransBlk+ ReqRedir+ CmpltRedir+ UpstreamFwd- EgressCtrl- DirectTrans-
        ACSCtl: SrcValid+ TransBlk- ReqRedir+ CmpltRedir+ UpstreamFwd- EgressCtrl- DirectTrans-

Les indicateurs ReqRedir+ et CmpltRedir+ indiquent que les fonctions de redirection ACS sont activées.

Si ces indicateurs sont actifs sur un port situé sur le chemin entre les GPU, il est recommandé de désactiver la redirection ACS.

Via le BIOS

Certaines cartes mères permettent de désactiver directement ACS sur les ports PCIe depuis le BIOS. Lorsqu’elle est disponible, cette méthode est à privilégier.

Via le noyau Linux

Le noyau Linux permet de désactiver les fonctions de redirection ACS sur des ports PCIe précis avec l’option pci=disable_acs_redir=. Cette méthode est disponible avec le noyau Debian standard et ne nécessite pas de patch.

  • On édite GRUB :
# vi /etc/default/grub

On ajoute à la variable GRUB_CMDLINE_LINUX_DEFAULT l’option pci=disable_acs_redir= suivie de l’adresse des ports PCIe concernés :

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pci=disable_acs_redir=0000:00:01.0;0000:00:01.1"
...

Plusieurs ports peuvent être indiqués en les séparant par un point-virgule.

  • On met à jour GRUB :
# update-grub
  • On redémarre :
# reboot
  • Après redémarrage, on vérifie que l’option a bien été appliquée :
# cat /proc/cmdline
  • On vérifie ensuite à nouveau l’état ACS des ports concernés :
# lspci -s 0000:00:01.0 -vv | grep -E 'Access Control Services|ACSCap|ACSCtl'
# lspci -s 0000:00:01.1 -vv | grep -E 'Access Control Services|ACSCap|ACSCtl'

Si ACS est présent, les indicateurs ReqRedir et CmpltRedir doivent désormais apparaître désactivés (-).

Installation

Pilote NVIDIA

On installe la version du pilote NVIDIA utilisée par open-gpu-kernel-modules, ici la version 610.43.03 :

# apt update && apt upgrade
# apt install linux-headers-$(uname -r)
# mkdir -p /opt/nvidia
# cd /opt/nvidia
# wget https://us.download.nvidia.com/XFree86/Linux-x86_64/610.43.03/NVIDIA-Linux-x86_64-610.43.03.run
# sh NVIDIA-Linux-x86_64-610.43.03.run

Lors du choix du type de module noyau, sélectionner la version MIT/GPL (Open Kernel Modules).

Il est préférable de refuser l'enregistrement des modules auprès de DKMS, afin d'éviter que les modules NVIDIA officiels reconstruits automatiquement ne prennent la priorité sur ceux modifiés par open-gpu-kernel-modules :

Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if your kernel changes later.
-> No

Installation du projet

On clone le dépôt dans /opt :

# cd /opt
# git clone https://github.com/aikitoria/open-gpu-kernel-modules.git
# cd open-gpu-kernel-modules

On lance ensuite le script d’installation fourni par le projet :

# ./install.sh

Une fois l’installation terminée, on redémarre la machine :

# reboot

Vérification de l'installation

  • On test si le p2p est bien activé :
# nvidia-smi topo -p2p r
# nvidia-smi topo -p2p w

Exemple de résultat avec deux GPU :

        GPU0    GPU1
 GPU0   X       OK
 GPU1   OK      X
  • On peut installer les outils de benchmark CUDA. Le CUDA Toolkit doit être installé au préalable :
# cd /opt
# git clone https://github.com/NVIDIA/cuda-samples.git
# cd /opt/cuda-samples
# export PATH=/usr/local/cuda-13.3/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda-13.3/lib64:${LD_LIBRARY_PATH}
# cmake -S . -B build -DCMAKE_CUDA_COMPILER=/usr/local/cuda-13.3/bin/nvcc
# cmake --build build --target p2pBandwidthLatencyTest -j$(nproc)

Puis on lance le benchmark :

# /opt/cuda-samples/build/cpp/5_Domain_Specific/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest