Soluzione della community

Verifica la velocità del collegamento PCIe NVMe su ZimaOS con lspci e nvme-cli

A user with several NVMe slots wanted to verify whether installed SSDs were actually negotiating PCIe Gen4 rather than Gen3. The discussion focused on lspci LnkCap/LnkSta output and nvme-cli device mapping.

Quando un SSD NVMe è installato in uno slot che supporta meno linee PCIe rispetto all’unità stessa, il solo nome del modello non permette di conoscere il collegamento attivo. La discussione della community ha usato lspci per confrontare le capacità PCIe del dispositivo con il collegamento effettivamente negoziato.

Il comando compatto condiviso nella discussione era:

Interfaccia di archiviazione di ZimaOS che mostra un SSD NVMe identificato dal modello e dalla capacità
Screenshot originale della community che mostra come appariva un dispositivo NVMe nell’interfaccia di archiviazione di ZimaOS.
Grafico della larghezza di banda PCIe della community usato per interpretare la velocità e l’ampiezza del collegamento da lspci
Riferimento sulla larghezza di banda PCIe caricato dalla community e usato nella discussione per interpretare l’ampiezza del collegamento negoziato.
sudo lspci -vv | grep -E 'PCI bridge|LnkCap|LnkSta'

Per uno specifico dispositivo PCI, di solito è più semplice esaminare direttamente il dispositivo dopo averne individuato l’indirizzo del bus:

sudo lspci -s 05:00.0 -vv

I campi importanti sono:

  • LnkCap: la velocità e l’ampiezza PCIe che l’endpoint o il collegamento è in grado di dichiarare.
  • LnkSta: la velocità e l’ampiezza del collegamento attualmente negoziate.

Se un’unità può operare con un collegamento più ampio, ma LnkSta mostra meno linee, la piattaforma sta attualmente utilizzando quell’unità con l’ampiezza negoziata più ridotta.

Associare i nomi NVMe agli indirizzi PCIe

L’autore del post originale ha inoltre trovato utile l’output dettagliato di nvme-cli per associare i nomi dei dispositivi Linux ai controller e agli indirizzi PCIe:

nvme list -v

Questo semplifica l’associazione di una voce come /dev/nvme1 all’indirizzo PCI che si esamina tramite lspci.

LnkSta risponde alla domanda sulla negoziazione PCIe. Non indica la velocità effettiva di scrittura sequenziale dell’SSD, gli IOPS casuali, il comportamento di limitazione termica o le prestazioni sostenute.

Per valutare il comportamento I/O effettivo, usa un benchmark appropriato su dati di prova eliminabili e definisci con attenzione il carico di lavoro. La documentazione sui carichi di lavoro di fio spiega perché dimensione dei blocchi, profondità della coda, schema di accesso, motore I/O e dimensione del test modificano tutti il risultato.

Non eseguire benchmark distruttivi su dispositivi grezzi su un filesystem o un disco che contiene dati necessari.

Contesto attuale su PCIe e benchmark

L’ecosistema PCIe di Zima è utile per comprendere la differenza tra uno slot fisico e la sua effettiva ampiezza elettrica. Le schede di espansione PCIe mostrano i tipi di adattatori NVMe e di rete utilizzati nei progetti di espansione Zima, mentre l’hardware ZimaBoard 2 offre un esempio concreto e attuale di piattaforma in cui la generazione PCIe e il numero di linee sono specificati esplicitamente.

La documentazione sull’ispezione dei dispositivi con lspci definisce lspci come l’utility Linux per esaminare bus e dispositivi PCI, mentre la documentazione sull’elenco dei dispositivi nvme-cli mostra come nvme list -v associa controller, namespace, trasporto e indirizzi PCIe. Per misurare l’I/O anziché la negoziazione del bus, usa la documentazione sui carichi di lavoro di fio; profondità della coda, dimensione dei blocchi, combinazione di letture e scritture e dimensione del test modificano tutti il risultato.

In sintesi

Usa lspci -vv per verificare la generazione PCIe e l’ampiezza delle linee negoziate, e usa nvme list -v per associare i dispositivi NVMe ai relativi indirizzi PCIe. Esegui poi un benchmark separato se ti serve conoscere il throughput effettivo dello storage. La velocità del collegamento negoziato è una proprietà del bus, non un indice delle prestazioni dell’SSD.