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 判定条件の使用法の説明

推薦する

ウェブページの要素の検査とソースコードの表示の違いについて

Chrome ブラウザで Web ページを開くと、ページを右クリックすると 2 つの非常によく似たオ...

HTMLチュートリアル、簡単に学べるHTML言語

1. <body background=画像ファイル名 bgcolor=color text=...

JavaScript キャンバスでカラフルな太陽のハロー効果を実現

この記事では、カラフルな太陽のハロー効果を実現するためのJavaScriptキャンバスの具体的なコー...

MySQLがウィンドウ関数で合計関数を実行するときに発生する可能性のあるバグ

MySql のウィンドウ関数を使用して統計データを収集する際に、小さな問題が見つかったので、それにつ...

MySQL 5.7.23 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事はMySQL 5.7.23 winx64のインストールチュートリアルを記録します。具体的な内...

CentOS 7 で grub パスワードと単一ユーザー ログインを設定するサンプル コード

Centos7 と Centos6 では、GRUB パスワードの設定手順に大きな違いがあります。これ...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

Docker を使用して Nginx+Flask+Mongo アプリケーションをデプロイする

サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークに...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

JavaScript ツールチェーンの不完全なガイド

目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...

docker を使用して Redis マスター/スレーブを構築する方法

1. Docker環境を構築する1. Dockerfileを作成する Centos:latest か...

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

Linux ダイナミックライブラリの生成と使用ガイドの詳細な説明

Linux での動的ライブラリ ファイルのファイル名は libxxx.so のようになります。ここで...

Vueはドラッグアンドドロップまたはクリックで写真をアップロードする機能を実装しています

この記事では、ドラッグアンドドロップやクリックによる画像のアップロードを実現するためのVueの具体的...

Vue3 のレンダリング関数における互換性のない変更の詳細な説明

目次レンダリングAPIの変更レンダリング関数のパラメータレンダリング関数のシグネチャの変更VNode...