
2025/12/17 6:03
Show HN: Deterministic PCIe Diagnostics for GPUs on Linux
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
GPU PCIe Diagnostic & Bandwidth Analysis v2.7.4 は、観測可能なハードウェアデータのみを使用して NVIDIA GPU の PCI Express リンクの健全性と実際の帯域幅を検証する決定論的なコマンドラインツールです。
ユーティリティは NVML から現在/最大世代とレーン幅を照会し、CUDA
memcpy 操作を計測してピークホスト↔デバイスコピースループットを測定し、持続的な TX/RX レートを記録します。これらの数値を理論上のペイロード帯域幅と比較し、この情報だけで各 GPU を OK、DEGRADED、または UNDERPERFORMING と分類します—BIOS、ファームウェア、ドライバ設定を変更することなく。BIOS/ファームウェア更新後に発生し得る一般的な PCIe の問題(レーン幅の誤り(x8/x4/x1 ではなく x16)、世代ダウングレード、スロット分割、リッサーまたはマザーボードのレーン共有問題など)はすべて検出可能であり、ユーザーが実際のリンク障害とワークロードボトルネックを区別できるようにします。
ツールは Linux 上で動作し、対応する NVIDIA GPU、CUDA Toolkit、および NVML ライブラリ(Ubuntu 24.04.3 LTS でテスト済み)が必要です。ビルド手順には
make または nvcc -O3 pcie_diagnostic_pro.cu … が含まれます。使用例:
./pcie_diag 1024、オプションフラグとして --duration-ms 8000、--integrity、--all-gpus、--gpu-index <n>、およびログオプション --log --csv または --json。ログは results/csv/pcie_log.csv および/または results/json/pcie_sessions.json に書き込まれ、安定した UUID と BDF を保持し、長期的な時系列分析を可能にします。範囲は PCIe 伝送動作に限定されます;カーネルやアプリケーションのパフォーマンス測定も行わず、システムファームウェアを変更することもありません。
このバージョンでは欠落していた例/効率性の詳細、ビルドコマンド、明示的なログパスが組み込まれ、判定が測定データのみから行われることが明確にされました。主メッセージは明瞭で曖昧さを排除しています。
本文
GPU PCIe 診断 & 帯域幅解析
GPU の PCIe リンクの健全性、帯域幅、および実際の利用率を「観測可能なハードウェアデータ」のみで検証する決定論的コマンドラインツールです。
このツールが行うこと
本ツールはハードウェアから直接観測できる PCIe 診断を実施し、決定論的に評価された結果を報告します。
GPU ハードウェアから直接計測される項目は以下の通りです。
- PCIe の現在値と最大リンク世代/幅(NVML 経由)
- ホスト→デバイス / デバイス→ホスト コピー帯域幅のピーク(CUDA
タイミング)memcpy - 負荷下での PCIe 持続利用率(NVML TX/RX カウンタ)
- 理論上の PCIe ペイロード帯域幅に対する効率
ツールはシステム設定を調整・修正したり、最適化を試みたりしません。
評価結果(Verdict)の意味
| Verdict | 意味 |
|---|---|
| OK | 交渉されたリンクと測定済みスループットが期待通りである。 |
| DEGRADED | GPU がサポートしている最大世代または幅より低い状態で動作している。 |
| UNDERPERFORMING | フルリンクが交渉されているが、持続帯域幅が期待値に比べ著しく低い。 |
評価は規則ベースであり、測定データのみから導出されます。
このツールを作った理由
現代のシステムでは PCIe の問題が診断しにくいケースが多々あります:
- GPU が x16 ではなく x8 / x4 / x1 を交渉している
- BIOS/ファームウェア更新後に世代が下げられる
- スロット分割、リッサーケーブル、マザーボードのレーン共有問題
- システム状態は正常に見えるのに帯域幅が低下する
- トランスポート制限とワークロードボトルネックを混同してしまう
本ツールは以下を提供します:
- 再現性のある PCIe 診断ベースライン
- ハードウェアレベルでの PCIe 行動証明
- カーネル/ワークロード効果からリンク交渉を分離
出力例
GPU PCIe Diagnostic & Bandwidth Analysis v2.7.4 GPU: NVIDIA GeForce GTX 1080 BDF: 00000000:01:00.0 UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (redacted) PCIe Link Current: Gen3 x16 Max Cap: Gen3 x16 Theoretical (payload): 15.76 GB/s Transfer Size: 1024 MiB Peak Copy Bandwidth Host → Device: 12.5 GB/s Device → Host: 12.7 GB/s Telemetry (NVML) Window: 5.0 s (50 samples @ 100 ms) TX avg: 7.6 GB/s RX avg: 7.1 GB/s Combined: 14.7 GB/s Verdict State: OK Reason: Throughput and link state are consistent with a healthy PCIe path Efficiency: 93.5% System Signals (informational) MaxReadReq: 512 bytes Persistence Mode: Disabled ASPM Policy (sysfs string): [default] performance powersave powersupersave IOMMU: Platform default (no explicit flags)
要件
- 対応ドライバを搭載した NVIDIA GPU
- CUDA Toolkit (
)nvcc - NVML 開発ライブラリ(
)-lnvidia-ml
プラットフォーム互換性: Linux(Ubuntu 24.04.3 LTS でテスト済み)
権限・ログに関する注意
PCIe と NVML の診断には昇格した権限が必要な場合があります。
sudo でログを作成したときは結果ディレクトリが root 所有になるため、以降の実行時にパスワードプロンプトが表示されることがあります。
sudo chown -R $USER:$USER results/
ビルド
make # もしくは手動: nvcc -O3 pcie_diagnostic_pro.cu -lnvidia-ml -Xcompiler -pthread -o pcie_diag
使用方法
./pcie_diag 1024 # デフォルト実行、1 GB 転送量 ./pcie_diag 1024 --log # ログを書き出す ./pcie_diag 1024 --log --csv ./pcie_diag 1024 --log --json
ログは次の場所に書き込まれます:
results/csv/pcie_log.csvresults/json/pcie_sessions.json
拡張テレメトリウィンドウ
./pcie_diag 1024 --duration-ms 8000 # 安定性向上のため長めに測定
オプションで整合性カウンタを読み取る
./pcie_diag 1024 --integrity # sysfs が利用可能なら PCIe AER カウンタを取得
マルチ GPU のログ挙動
は検出された各 GPU を独立して評価します。--all-gpus- 実行ごとに 1 行(CSV)/ 1 オブジェクト(JSON)が作成され、UUID と BDF が含まれるため曖昧さがありません。
例:
./pcie_diag 1024 --all-gpus --log --csv
ログと再現性
- CSV/JSON ログは安定したデバイス識別子を含みます。
- UUID は NVML を通じて実行時に報告され、複数回の実行で一貫します。
- 時系列解析や自動監視に適したアペンド可能形式です。
スコープと制限
- PCIe トランスポート挙動のみを評価します。
- カーネルレベルまたはアプリケーションレベルのパフォーマンスは測定しません。
- BIOS、ファームウェア、レジストリ、PCIe 設定を変更・修正しません。
- 観測可能な事実のみを報告し、利用可能データ以外の推論は行いません。
検証
memcpy タイミングと PCIe 行動は開発中に Nsight Systems で交差検証されました(ツール使用時に必須ではありません)。
作者 & ライセンス
作者: Joe McLaren(Human–AI 協働エンジニアリング)
GitHub: https://github.com/parallelArchitect
ライセンス: MIT License(リポジトリ内の全文を参照)
参考文献
- NVIDIA PCIe Logging & Counters – https://docs.nvidia.com/networking/display/bfswtroubleshooting/pcie#src-4103229342_PCIe-LoggingandCounters
- Linux PCIe AER Documentation – https://docs.kernel.org/PCI/pcieaer-howto.html
- Oracle Linux PCIe AER Overview – https://blogs.oracle.com/linux/pci-express-advanced-error-reporting