https://tldp.org/LDP/tlk/dd/pci.html
Organisation PCI-e
Les bus PCI-e sont différents bus, qui sont reliés ensemble (par des ponts), et peuvent également être reliés à d’autres bus (par exemple le bus ISA).
Ces bus sont hiérarchisés : le complexe PCI-e racine “alimente” plusieurs bus PCI-e enfants.
Le lien vers le pont parent est appelé “upstream”, celui vers le pont/périphérique enfant “downstream”.
Le bus racine définit le départ de la hiérarchie. Chaque port sur le bus racine définit un domaine ; dans la plupart des machines, il n’y aura qu’un seul domaine (0000).
Un “endpoint” est un périphérique PCI (carte réseau, carte graph, controlleur SATA etc…). Un endpoint possède au moins 1 fonction (la fonction 0), et peut supporter jusqu’à 8 fonctions.
Un “lien” (link) représente la liaison entre 1 pont PCI-e et 1 (et 1 seul) périphérique, ou entre 2 ponts PCI-e.
Génération et lignes
La génération se définit par le nombre de transferts par seconde, par ligne : PCI-e 1.0 : 2.5 GT/s (soit 250 Mo/s) PCI-e 2.0 : 5 GT/s (soit 500 Mo/s) PCI-e 3.0 : 8 GT/s (soit 984 Mo/s) PCI-e 4.0 : 16 GT/s (soit 1969 Mo/s)
En plus de ça, il peut y avoir plusieurs lignes en parallèle : x1 pour 1 seule ligne, x4 pour 4 lignes, x8 pour 8 lignes et x16 pour 16 lignes.
Sous Linux :
pour lister les périphériques pci : lspci
. L’adresse est sous la forme bus:device.fonction
Pour afficher les identifiants (pciids), utiliser -nn
Afficher le domaine des périphériques (masqué par défaut lorsqu’il vaut 0000 partout) : lspci -D
Pour lister le détail d’un périphérique (par exemple l’adresse 02:00.0) : lspci -s 02:00.0
ou lspci -s 2:0
Pour voir le détail des vitesses d’un port ou périphérique : sudo lspci -s 02:00.0 -vv | grep Speed
LnkCap : capacité max du périphérique (Speed : gen PCI-e ; Width : nombre de lignes).
LnkSta : statut actuel du périphérique. Dépend de la gen PCI-e de la carte-mère, et du pilote. Certains périphériques peuvent adapter leur vitesse à la volée (par exemple certaines cartes nvidia)
Lister tous les noms de périphériques et les vitesses : sudo lspci -vv | grep "[a-z0-9][a-z0-9]:[a-z0-9]\|Speed"
Afficher l’arbre PCI : lspci -t
(plus lisible avec lspci -tv
Via dmidecode : dmidecode --type 9