Linux で PCIe のバージョンと速度を確認する方法

Linux で PCIe のバージョンと速度を確認する方法

PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。

マザーボードのPCIスロットを確認する

# dmidecode | grep --color "PCI"

さまざまな PCIe バージョンに対応する伝送速度は次のとおりです。

転送速度には追加のスループットを提供しないオーバーヘッド ビットが含まれるため、転送速度は Gbps ではなく GT/s で表されます。
たとえば、PCIe 1.x および PCIe 2.x は 8b/10b エンコーディング スキームを使用するため、元のチャネル帯域幅の 20% (= 2/10) が占有されます。

GT/s —— ギガ転送/秒、つまり 1 秒あたりの送信回数。重点は、リンク幅などとは関連付けられていない可能性のある物理層通信プロトコルのレート属性を記述することにあります。

Gbps —— ギガビット/秒。 GT/s と Gbps の間には比例変換関係はありません。

PCIeスループット(利用可能な帯域幅)の計算方法:

スループット = 伝送速度 * コーディング方式

たとえば、PCI-e2.0 プロトコルは 5.0 GT/s をサポートしており、これは各レーンが 5G ビット/秒の伝送をサポートすることを意味します。ただし、これは PCIe 2.0 プロトコルの各レーンが 5Gbps の速度をサポートすることを意味するものではありません。

なぜそう言うのでしょうか? PCIe 2.0 物理層プロトコルは 8b/10b エンコーディング方式を使用するためです。 つまり、送信される 8 ビットごとに 10 ビットを送信する必要があり、余分な 2 ビットは上位層にとって意味のある情報ではありません。

そして、PCIe 2.0 プロトコルの各レーンでは、5 * 8 / 10 = 4 Gbps = 500 MB/s の速度がサポートされます。

PCIe 2.0 x8 チャネルを例にとると、x8 の使用可能な帯域幅は 4 * 8 = 32 Gbps = 4 GB/s になります。

PCI-e3.0 プロトコルは 8.0 GT/s をサポートしており、これは各レーンが 1 秒あたり 8G ビットの転送をサポートすることを意味します。

PCIe 3.0 物理層プロトコルは、128b/130b エンコーディング スキームを使用します。 つまり、送信される 128 ビットごとに 130 ビットを送信する必要があります。

そして、PCIe 3.0 プロトコルの各レーンでは、8 * 128 / 130 = 7.877 Gbps = 984.6 MB/s の速度がサポートされます。

PCIe 3.0 x16 チャネルの場合、x16 の使用可能な帯域幅は 7.877 * 16 = 126.031 Gbps = 15.754 GB/s です。

Linux で PCI-E バスが Gen(世代) 1、Gen2、または新しい Gen3 を使用しているかどうかを確認するにはどうすればよいですか?
#lspci は現在のシステム内のすべてのデバイスを表示できます。ただし、どの世代の PCI-E バスが使用されているかは確認できないようです。

ルート@XXX# lspci 
00:00.0 ホスト ブリッジ: Intel Corporation Haswell DRAM コントローラー (rev 06)
00:01.0 PCI ブリッジ: Intel Corporation Haswell PCI Express x16 コントローラー (rev 06)
00:01.1 PCI ブリッジ: Intel Corporation Haswell PCI Express x8 コントローラー (rev 06)
00:02.0 VGA 互換コントローラ: Intel Corporation Haswell 統合グラフィックス コントローラ (rev 06)
00:03.0 オーディオデバイス: Intel Corporation Haswell HD オーディオ コントローラー (rev 06)
00:14.0 USB コントローラ: Intel Corporation Lynx Point USB xHCI ホスト コントローラ (rev 05)
00:16.0 通信コントローラ: Intel Corporation Lynx Point MEI コントローラ #1 (rev 04)
00:1a.0 USB コントローラ: Intel Corporation Lynx Point USB 拡張ホスト コントローラ #2 (rev 05)
00:1c.0 PCI ブリッジ: Intel Corporation Lynx Point PCI Express ルート ポート #1 (rev d5)
00:1c.4 PCI ブリッジ: Intel Corporation Lynx Point PCI Express ルート ポート #5 (rev d5)
00:1c.5 PCI ブリッジ: Intel Corporation Lynx Point PCI Express ルート ポート #6 (rev d5)
00:1d.0 USB コントローラ: Intel Corporation Lynx Point USB 拡張ホスト コントローラ #1 (rev 05)
00:1f.0 ISA ブリッジ: Intel Corporation Lynx Point LPC コントローラ (rev 05)
00:1f.2 IDE インターフェース: Intel Corporation Lynx Point 4 ポート SATA コントローラー 1 [IDE モード] (rev 05)
00:1f.3 SMBus: Intel Corporation Lynx Point SMBus コントローラ (rev 05)
00:1f.6 信号処理コントローラ: Intel Corporation Lynx Point Thermal Management Controller (rev 05)
01:00.0 PCI ブリッジ: PLX Technology, Inc. 不明なデバイス 8724 (rev ca)
02:01.0 PCI ブリッジ: PLX Technology, Inc. 不明なデバイス 8724 (rev ca)
02:02.0 PCI ブリッジ: PLX Technology, Inc. 不明なデバイス 8724 (rev ca)
02:08.0 PCI ブリッジ: PLX Technology, Inc. 不明なデバイス 8724 (rev ca)
02:09.0 PCI ブリッジ: PLX Technology, Inc. 不明なデバイス 8724 (rev ca)
03:00.0 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
03:00.1 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
03:00.2 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
03:00.3 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
04:00.0 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
04:00.1 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
04:00.2 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
04:00.3 イーサネット コントローラ: Intel Corporation I350 ギガビット ネットワーク接続 (rev 01)
06:00.0 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
06:00.1 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
07:00.0 PCI ブリッジ: PLX Technology, Inc. PEX 8732 32 レーン、8 ポート PCI Express Gen 3 (8.0 GT/s) スイッチ (rev ca)
08:01.0 PCI ブリッジ: PLX Technology, Inc. PEX 8732 32 レーン、8 ポート PCI Express Gen 3 (8.0 GT/s) スイッチ (rev ca)
08:08.0 PCI ブリッジ: PLX Technology, Inc. PEX 8732 32 レーン、8 ポート PCI Express Gen 3 (8.0 GT/s) スイッチ (rev ca)
08:09.0 PCI ブリッジ: PLX Technology, Inc. PEX 8732 32 レーン、8 ポート PCI Express Gen 3 (8.0 GT/s) スイッチ (rev ca)
08:0a.0 PCI ブリッジ: PLX Technology, Inc. PEX 8732 32 レーン、8 ポート PCI Express Gen 3 (8.0 GT/s) スイッチ (rev ca)
09:00.0 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
09:00.1 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
0e:00.0 イーサネット コントローラ: Intel Corporation I210 ギガビット ネットワーク接続 (rev 03)
0f:00.0 イーサネット コントローラ: Intel Corporation I210 ギガビット ネットワーク接続 (rev 03)
ルート@XXX#
ルート@XXX# lspci -tv
-[0000:00]-+-00.0 Intel Corporation Haswell DRAM コントローラ
   +-01.0-[0000:01-06]----00.0-[0000:02-06]--+-01.0-[0000:03]--+-00.0 Intel Corporation I350 ギガビット ネットワーク接続
   | | +-00.1 Intel Corporation I350 ギガビット ネットワーク接続
   | | +-00.2 Intel Corporation I350 ギガビット ネットワーク接続
   | | \-00.3 Intel Corporation I350 ギガビット ネットワーク接続
   | +-02.0-[0000:04]--+-00.0 Intel Corporation I350 ギガビット ネットワーク接続
   | | +-00.1 Intel Corporation I350 ギガビット ネットワーク接続
   | | +-00.2 Intel Corporation I350 ギガビット ネットワーク接続
   | | \-00.3 Intel Corporation I350 ギガビット ネットワーク接続
   | +-08.0-[0000:05]--
   | \-09.0-[0000:06]--+-00.0 Intel Corporation 82599EB 10ギガビットSFI/SFP+ネットワーク接続
   | \-00.1 Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続
   +-01.1-[0000:07-0c]----00.0-[0000:08-0c]--+-01.0-[0000:09]--+-00.0 Intel Corporation 82599EB 10ギガビットSFI/SFP+ネットワーク接続
   | | \-00.1 Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続
   | +-08.0-[0000:0a]--
   | +-09.0-[0000:0b]--
   | \-0a.0-[0000:0c]--
   +-02.0 Intel Corporation Haswell 統合グラフィックス コントローラ
   +-03.0 Intel Corporation Haswell HD オーディオ コントローラー
   +-14.0 Intel Corporation Lynx Point USB xHCI ホスト コントローラー
   +-16.0 Intel Corporation Lynx Point MEI コントローラー #1
   +-1a.0 Intel Corporation Lynx Point USB 拡張ホスト コントローラ #2
   +-1c.0-[0000:0d]--
   +-1c.4-[0000:0e]----00.0 Intel Corporation I210 ギガビット ネットワーク接続
   +-1c.5-[0000:0f]----00.0 Intel Corporation I210 ギガビット ネットワーク接続
   +-1d.0 Intel Corporation Lynx Point USB 拡張ホスト コントローラ #1
   +-1f.0 Intel Corporation Lynx Point LPC コントローラー
   +-1f.2 Intel Corporation Lynx Point 4ポートSATAコントローラ1 [IDEモード]
   +-1f.3 Intel Corporation Lynx Point SMBus コントローラ
   \-1f.6 Intel Corporation Lynx Point 熱管理コントローラ
ルート@XXX#

不明なデバイスがある場合は、/usr/local/share/pci.ids.gz を更新する必要があります。更新方法については、http://benjr.tw/node/88 を参照してください。

まず、Inetl 82599EB ネットワーク カードの識別番号を照会します (バス:デバイス.機能)

root@XXX# lspci | grep --color 82599 
06:00.0 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
06:00.1 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
09:00.0 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
09:00.1 イーサネット コントローラ: Intel Corporation 82599EB 10 ギガビット SFI/SFP+ ネットワーク接続 (rev 01)
ルート@XXX#

PCI では、デバイスは識別値として 1.「バス番号」、2.「デバイス番号」、3.「機能番号」の 3 つの番号を使用します。

したがって、現在の時刻 06:00.0 は、バス番号 = 06、デバイス番号 = 00、機能 = 0 を意味します。

これら 3 つの数字が結合されて 16 ビットの識別コードになります。

バス番号 8ビット 2^8 最大256個のバスを接続可能(0~ff)

デバイス番号5ビット2^5 最大32個のデバイス(0~1f)を接続でき、

機能(機能番号) 3ビット 2^3 各デバイスは最大8つの機能(0〜7)を持つことができます。

#lspci の詳細については、http://benjr.tw/node/543 をご覧ください。

次にベンダーIDとデバイスIDを確認します

root@XXX# lspci -n | grep -i 06:00.0
06:00.0 0200: 8086:10fb (リビジョン01)
ルート@XXX#

Linux では、デバイスを表すためにクラス ID + ベンダー ID + デバイス ID を使用します。たとえば、0200: 8086:10fb で表されるデバイス名は (クラス ID = 0200、ベンダー ID = 8086、デバイス ID = 10fb) です。

最後に、指定されたPCIデバイスの帯域幅を確認します。

root@XXX# lspci -n -d 8086:10fb -vvv | grep --color 幅
  LnkCap: ポート #9、速度 5GT/s、幅 x8、ASPM L0s、レイテンシ L0 <1us、L1 <8us
  LnkSta: 速度 5GT/s、幅 x8、TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
  LnkCap: ポート #9、速度 5GT/s、幅 x8、ASPM L0s、レイテンシ L0 <1us、L1 <8us
  LnkSta: 速度 5GT/s、幅 x8、TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
  LnkCap: ポート #1、速度 5GT/s、幅 x8、ASPM L0s、レイテンシ L0 <1us、L1 <8us
  LnkSta: 速度 5GT/s、幅 x8、TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
  LnkCap: ポート #1、速度 5GT/s、幅 x8、ASPM L0s、レイテンシ L0 <1us、L1 <8us
  LnkSta: 速度 5GT/s、幅 x8、TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
ルート@XXX# 

LnkSta: システムが提供する現在の速度は PCI-Express 2.0 (5GT/s) です

LnkCap: デバイスが現在使用している速度。

LnkSta と LnkCap の速度は異なる場合があります。通常、システムは PCI Express 3.0 を提供しますが、デバイスは 2.0 を使用します。

以上が今回ご紹介した関連知識ポイントとなります。123WORDPRESS.COMをご活用いただき、誠にありがとうございます。

<<:  77.9K の GitHub リポジトリを持つ Axios プロジェクト: 学ぶ価値のあることは何でしょうか?

>>:  SQL 文を使用してデータを収集する場合の sum 関数と count 関数の if 判定条件の使用法の説明

推薦する

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

テーブル内の要素のドラッグと並べ替えの問題について簡単に説明します

最近、要素テーブルを使用すると、並べ替えの問題によく遭遇します。単純な並べ替えであれば、要素の公式が...

iframe が HTML 内のページにジャンプするのを防ぎ、iframe を使用して WeChat Web バージョンをページに埋め込む方法

私は、WinForm と HTML5 を組み合わせた小さなものを作りたいだけなのですが、突然、そこに...

Tomcat9 Windows サービスのインストールに関する詳細なチュートリアル

1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...

Linux でファイルの作成時間を取得する方法と実践的なチュートリアル

背景ファイルの作成時刻を取得する必要がある場合があります。例えば: 「xtrabackup スキーマ...

Linux環境でのDockerインストールチュートリアル

1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...

JavaScript におけるイベント委譲メカニズムと深いコピーと浅いコピーの簡単な分析

目次1. イベントの委任イベントバブリングイベントキャプチャイベントの泡立ちの昇華考える2. 深いコ...

Vueはユーザー名が使用可能かどうかの検証を実装します

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...

docker ポートを追加して dockerfile を取得する方法

DockerイメージからDockerfileを取得する docker 履歴 --format {{....

JavaScript はクラス宝くじアプレットを実装します

この記事では、クラス抽選アプレットを実装するためのJavaScriptの具体的なコードを参考までに紹...

LeetCode の SQL 実装 (197. 気温上昇)

[LeetCode] 197.気温上昇Weather テーブルが指定されている場合、前の日付 (昨...

HTML 選択オプション デフォルトの選択方法

オプションに属性 selected = "selected" を追加すると、それ...

ミニプログラムカスタムコンポーネントの非効率的なグローバルスタイルの解決策

目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...

CentOS VPS に SSH 経由で MySQL をインストールする方法

yum install mysql-serverと入力します。続行するにはYを押してくださいインスト...

Vueは3段階のナビゲーション表示と非表示を実装します

この記事では、3階層ナビゲーションの表示と非表示を実現するためのVueの具体的なコードを例として紹介...