Dove si verifica la negoziazione della larghezza del collegamento PCI-E?


8

Sto cercando di diagnosticare una scheda PCI-E con prestazioni insufficienti nel mio sistema e mi sono reso conto che sta negoziando una larghezza di collegamento errata. In particolare, dalla corsa lspci -vv, vedo:

LnkCap: Port #1, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L0s <4us, L1 <4us
        ClockPM- Surprise- LLActRep- BwNot-

mentre

LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

La mia domanda è: questa negoziazione avviene a livello hardware o software? Detto in altro modo, la scheda negozia direttamente con lo slot PCI-E o succede da qualche parte nei driver?

(Se questa risulta essere una risposta ovvia, ti prego di perdonarmi ... dopo aver provato a diagnosticare questo per una settimana, la mia mente è un po 'fritta.)

Risposte:


17

È fatto a livello elettrico, non tramite software. I due registri che hai elencato sopra, LNK_CAP e LNK_STA sono quelli che hai correttamente annotato come "Ecco di cosa è capace il link" e "Qui lo stato corrente". Ci sono anche SLT_CAP e SLT_STA, che potrebbero valere la pena di essere specifici in quanto a un determinato "slot" nella macchina.

Le specifiche PCIe definiscono un LTSSM - Link State e Status State Machine. A livello di PHY / dispositivo, questo è ciò che determina la velocità massima supportata da entrambi i dispositivi, la larghezza massima del collegamento supportata da entrambi i dispositivi, ed è anche qui che viene gestita l'inversione di polarità / inversione di corsia (per semplificare il layout, le specifiche consentono a P / N da scambiare, ecc.).

inserisci qui la descrizione dell'immagine

I dispositivi si scambiano insiemi di simboli noti e ordinati e l'hardware si alza da 2,5 GT / s. Esistono comandi di cambio velocità che possono essere inviati l'un l'altro, ed è qui che vengono definite anche le impostazioni di equalizzazione del canale.

Se si esegue il collegamento a una velocità errata, è possibile che la porta radice PCIe sia configurata in modo errato o che sia presente un problema di integrità del segnale che impone una larghezza del collegamento inferiore. Nella mia esperienza, se ti collegassi a 5 GT / s invece di 8 GT / s, questo è più un problema SI - il collegamento a x4 8 GT / s invece di x8 8 GT / s sembra un problema di configurazione, o forse aggiungendo una scheda a uno slot che non supporta la larghezza x8.

Il registro delle capacità complesse di root (Offset 04h) rivelerà la larghezza massima supportata, che potrebbe aiutare con la diagnostica. IIRC, -x scaricherà il primo 4K di spazio di configurazione, -xx o -xxx scaricherà lo spazio di configurazione esteso PCIe. Se scarichi qui l'intero spazio di configurazione / lo incolli, posso scavarlo eventualmente per te, ma Linux fa un buon lavoro di decodifica di ciò che fanno i registri.


2
Non sono sicuro di ciò che è più eccitante di questa risposta: che è così squisitamente dettagliato (sul serio, è bello e adoro imparare cose nuove) o che mi ha aiutato a risolvere il problema in circa 5 minuti. Ho finito per dover modificare le configurazioni sulla mia scheda: è una scheda di sviluppo e sembra che ad un certo punto sia stata ripristinata.
tonysdg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.