PCI-Eリンク幅ネゴシエーションはどこで発生しますか?


8

システムのパフォーマンスの低いPCI-Eカードを診断しようとしていますが、間違ったリンク幅をネゴシエートしていることがわかりました。具体的には、を実行するとlspci -vv、次のようになります。

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

ながら

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

私の質問は、このネゴシエーションはハードウェアレベルで行われるのか、ソフトウェアレベルで行われるのかです。言い換えると、カードはPCI-Eスロットと直接ネゴシエートしますか、それともドライバーのどこかで発生しますか?

(これが明らかな答えであることが判明した場合は、ご容赦ください... 1週間これを診断しようとした後、私の心は少し揚げられています。)

回答:


17

ソフトウェアではなく、電気レベルで行われます。上記の2つのレジスタ、LNK_CAPとLNK_STAは、「ここにリンクの機能がある」と「ここに現在のステータスがある」と正しく記述しています。SLT_CAPとSLT_STAもあり、マシンの特定の「スロット」に固有なので、一見の価値があります。

PCIe仕様はLTSSM -Link Training and Status State Machineを定義しています。PHY /デバイスレベルでは、これが両方のデバイスがサポートする最大速度、両方のデバイスがサポートする最大リンク幅を決定します。また、極性反転/レーン反転が処理される場所でもあります(レイアウトを簡単にするために、仕様ではP交換する/ Nなど)。

ここに画像の説明を入力してください

デバイスは既知の順序付けられたシンボルのセットを相互に送信し、ハードウェアは2.5GT / sから上向きに動作します。相互に送信できる速度変更コマンドがあり、ここでチャネルイコライゼーション設定も定義されます。

間違った速度でリンクしている場合は、PCIeルートポートが正しく構成されていないか、シグナルインテグリティの問題により、リンク幅が狭くなっている可能性があります。私の経験では、8 GT / sではなく5 GT / sでリンクしている場合、それはよりSIの問題です-x8 8 GT / sではなくx4 8 GT / sでリンクしていると、構成の問題のようですが、または、おそらくx8幅をサポートしないスロットにカードを追加します。

ルート複合機能レジスター(オフセット04h)は、サポートされている最大幅を示し、診断に役立つ場合があります。IIRC、-xは構成スペースの最初の4Kをダンプし、-xxまたは-xxxはPCIe拡張構成スペースをダンプします。ここにすべての構成スペースをダンプ/ペーストする場合、私はおそらくそれを掘り下げることができますが、Linuxはレジスターが行うことをデコードする適切な仕事をします。


2
この回答の何がもっとエキサイティングなのかわからない-非常に詳細である(真剣に、これは美しく、新しいことを学ぶのが大好き)、またはそれが問題を約5分で解決するのに役立ちました。ボードの構成を変更する必要がありました。これは開発ボードであり、ある時点でリセットされたようです。
tonysdg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.