Questão Onde ocorre a negociação de largura de link PCI-E?


Estou tentando diagnosticar uma placa PCI-E de baixo desempenho em meu sistema e percebi que ela está negociando a largura de link errada. Especificamente, de correr lspci -vv, Entendo:

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

enquanto

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

Minha pergunta é: essa negociação acontece no nível do hardware ou no nível do software? Em outras palavras, a placa negocia diretamente com o slot PCI-E ou isso acontece em algum lugar dos drivers?

(Se isso for uma resposta óbvia, por favor, me perdoe ... depois de tentar diagnosticar isso por uma semana, minha mente está um pouco frita.)


7


origem




Respostas:


É feito no nível elétrico, não por software. Os dois registros que você listou acima, LNK_CAP e LNK_STA, são os que você observou corretamente como "Aqui está o que o link é capaz de fazer" e "Aqui o status atual". Há também SLT_CAP e SLT_STA, o que pode valer a pena, já que é específico para um determinado 'slot' na máquina.

A especificação PCIe define um LTSSM - Link Training e Status State Machine. No nível PHY / device, é isso que determina a velocidade máxima que ambos os dispositivos suportam, a largura máxima de link suportada pelos dois dispositivos, e é também onde a inversão de polaridade / pista é manipulada (para facilitar o layout para nós, a especificação permite P / N para ser trocado, etc.).

enter image description here

Os dispositivos enviam conjuntos ordenados de símbolos conhecidos entre si e o hardware trabalha a partir de 2.5GT / s. Existem comandos de mudança de velocidade que podem ser enviados uns aos outros, e aqui é onde as configurações de equalização do canal também são definidas.

Se você estiver conectando na velocidade errada, é possível que a porta raiz PCIe esteja configurada incorretamente ou que exista um problema de integridade de sinal forçando uma largura de link menor. Na minha experiência, se você estava ligando a 5 GT / s em vez de 8 GT / s, isso é mais um problema de SI - ligar a x4 8 GT / s em vez de x8 8 GT / s parece um problema de configuração, ou talvez adicionar um cartão a um slot que não suporte x8 de largura.

O registro das capacidades complexas de raiz (Offset 04h) revelará a largura máxima suportada, que pode ajudar com seu diagnóstico. IIRC, -x irá despejar o primeiro 4K do espaço de configuração, -xx ou -xxx irá descarregar o espaço de configuração estendido do PCIe. Se você despejar todo o seu espaço de configuração aqui / pastebin ele, eu posso vasculhar para você possivelmente, mas o Linux faz um trabalho decente de decodificar o que os registradores fazem.


9



Eu não tenho certeza do que é mais interessante sobre esta resposta - que é tão primorosamente detalhada (sério, isso é lindo, e eu adoro aprender coisas novas), ou que isso me ajudou a resolver o problema em cerca de 5 minutos. Eu acabei tendo que modificar as configurações na minha placa - é uma placa de desenvolvimento e parece que foi resetada em algum momento. - tonysdg