Solução da comunidade

Verificar a velocidade da ligação PCIe do NVMe no ZimaOS com 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 um SSD NVMe é instalado numa ranhura que suporta menos vias PCIe do que a própria unidade, o nome do modelo, por si só, não permite saber qual é a ligação ativa. O tópico da comunidade utilizou lspci para comparar a capacidade PCIe do dispositivo com a ligação efetivamente negociada.

O comando compacto partilhado no tópico foi:

Interface de armazenamento do ZimaOS que mostra um SSD NVMe identificado pelo modelo e pela capacidade
Captura de ecrã original da comunidade que mostra como um dispositivo NVMe aparecia na interface de armazenamento do ZimaOS.
Gráfico de largura de banda PCIe da comunidade utilizado para interpretar a velocidade da ligação e a largura das vias através do lspci
Referência de largura de banda PCIe carregada pela comunidade e utilizada na discussão para interpretar a largura da ligação negociada.
sudo lspci -vv | grep -E 'PCI bridge|LnkCap|LnkSta'

Para um dispositivo PCI específico, é normalmente mais fácil inspecioná-lo diretamente depois de saber o respetivo endereço de barramento:

sudo lspci -s 05:00.0 -vv

Os campos importantes são:

  • LnkCap: a velocidade e a largura PCIe que o endpoint ou a ligação pode anunciar.
  • LnkSta: a velocidade e a largura das vias atualmente negociadas.

Se uma unidade conseguir funcionar com uma ligação mais larga, mas o LnkSta mostrar menos vias, a plataforma está atualmente a executar esse dispositivo com a largura negociada mais estreita.

Associar nomes NVMe a endereços PCIe

O autor original também considerou útil o resultado detalhado do nvme-cli para associar os nomes dos dispositivos Linux aos controladores e aos endereços PCIe:

nvme list -v

Assim, é mais fácil associar uma entrada como /dev/nvme1 ao endereço PCI que pode inspecionar através do lspci.

O LnkSta responde à questão da negociação PCIe. Não indica a velocidade real de escrita sequencial do SSD, os IOPS aleatórios, o comportamento de limitação térmica ou o desempenho sustentado.

Para avaliar o comportamento real de E/S, utilize um teste de desempenho adequado com dados de teste descartáveis e defina cuidadosamente a carga de trabalho. A documentação de cargas de trabalho do fio explica por que razão o tamanho do bloco, a profundidade da fila, o padrão de acesso, o motor de E/S e o tamanho do teste alteram o resultado.

Não execute testes destrutivos em dispositivos brutos num sistema de ficheiros ou disco que contenha dados de que necessita.

Contexto atual de PCIe e testes de desempenho

O ecossistema PCIe da Zima é útil para compreender a diferença entre uma ranhura física e a sua largura elétrica real. As placas de expansão PCIe mostram os tipos de adaptadores NVMe e de rede utilizados nos projetos de expansão Zima, enquanto o hardware ZimaBoard 2 fornece um exemplo atual concreto de uma plataforma em que a geração PCIe e o número de vias estão explicitamente especificados.

A inspeção de dispositivos com lspci define o lspci como o utilitário Linux para inspecionar barramentos e dispositivos PCI, enquanto a listagem de dispositivos do nvme-cli mostra como nvme list -v associa controladores, espaços de nomes, transporte e endereços PCIe. Para medir E/S, em vez de negociar o barramento, utilize a documentação de cargas de trabalho do fio; a profundidade da fila, o tamanho do bloco, a combinação de leituras e escritas e o tamanho do teste alteram o resultado.

Em resumo

Utilize lspci -vv para verificar a geração PCIe e a largura das vias negociadas, e utilize nvme list -v para associar os dispositivos NVMe aos respetivos endereços PCIe. Em seguida, faça um teste de desempenho separado se precisar de conhecer o débito real do armazenamento. A velocidade de ligação negociada é uma propriedade do barramento, não uma medida do desempenho do SSD.