問題タブ [pci-e]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
370 参照

pci-e - BAR を使用した PCIe の通信はどのように定義されていますか?

私は PCIe の初心者で、単純な PCIe ドライバーを開発する必要があります。

メモリが 1kByte の PCIe デバイスがある場合、BAR には何が含まれていますか? 1kByte空間のアドレスは?また、BAR がメモリまたは I/O アドレス空間に「マップ」されるとはどういう意味ですか?

さまざまな本で答えを見つけようとしましたが、成功しませんでした...

よろしくトーマス

0 投票する
2 に答える
5218 参照

linux - カーネルに PCI デバイス ID の再読み取り/再初期化を強制する方法は?

私のマシン (Linux カーネル 3.2.38 を実行) の起動時に、PCI デバイスのサブシステム ID (サブデバイスとサブベンダー ID) が間違っています。システムがまだ起動している間に PCI デバイスを物理的に抜き差しすると (つまり、ホットプラグ)、正しい ID が取得されます。

取得した間違ったサブデバイス ID とサブベンダー ID は、デバイスのデバイス ID とベンダー ID と同じであることに注意してください (以下の lspci 出力の最初の 2 行を参照してください)。

以下は、デバイスのホットプラグ前後のlspci -vvnnの出力です。

ホットプラグ前:

ホットプラグ後:

私の質問:デバイスをホットプラグせずに ID を修正する方法はありますか? たとえば、PCI バスの再スキャン/再列挙/再構成を実行するなどして、カーネルに PCI デバイス ID の再読み取りを強制しますか?

どんな助けでも大歓迎です。ありがとう。

PS。この問題は、UEFI 内部シェルで起動した場合でも存在するため、実際にはカーネル/ソフトウェアに関連していないことに注意してください。

PPS。この場合の PCI デバイスはMEN F206Nで、「私のマシン」はMEN F22P です。

0 投票する
2 に答える
1513 参照

cuda - マップされた固定ホスト メモリ上の CUDA カーネルでのアトミック操作: 実行するかしないか?

CUDA プログラミング ガイドでは、マップされた固定ホスト メモリでのアトミック操作は、「ホストまたは他のデバイスの観点からはアトミックではない」と述べられています。この文から得られるのは、ホスト メモリ領域が 1 つの GPU によってのみアクセスされる場合、マップされた固定ホスト メモリで (複数の同時カーネル内からでも) アトミックを実行しても問題ないということです。

一方、Nicholas WiltによるCUDA ハンドブックの128 ページには、次のように記載されています。

ホスト (ロックされた比較交換) またはデバイス ( ) のいずれに対しても、マップされた固定ホスト メモリでアトミックを使用しようとしないでくださいatomicAdd()。CPU 側では、ロックされた操作の相互排除を強制する機能は、PCI Express バス上の周辺機器には見えません。逆に、GPU 側では、アトミック操作は GPU のローカル メモリ コントローラーを使用して実装されるため、ローカル デバイスのメモリ ロケーションでのみ機能します。

マップされた固定ホスト メモリでCUDA カーネル内からアトミックを実行しても安全ですか? アトミックの読み取り-変更-書き込みの原子性を維持するために、PCI-e バスに依存できますか?

0 投票する
1 に答える
5266 参照

c - ユーザー空間での書き込み結合 IO アクセスの有効化

ユーザー空間ドライバーを備えた PCIe デバイスがあります。BAR を介してデバイスにコマンドを書き込んでいます。コマンドは遅延の影響を受けやすく、データ量が少ない (~64 バイト) ため、DMA を使用したくありません。

を使用してカーネル内の BAR の物理アドレスを再マップし、カーネルioremap_wcの BAR に 64バイトを書き込むと、64 バイトが PCIe 経由で単一の TLP として書き込まれていることがわかります。ユーザー空間プログラムをフラグ付きの領域に許可してから64 バイトを書き込むと、単一のトランザクションではなく、PCIe バス上に複数の TPL が表示されます。mmapMAP_SHARED

カーネルPATのドキュメントによると、書き込み結合ページをユーザー空間にエクスポートできるはずです。

一部のページをユーザー空間にエクスポートしたいドライバーは、mmap インターフェイスとの組み合わせを使用してそれを行います

1)pgprot_noncached()

2)io_remap_pfn_range()またはremap_pfn_range()またはvm_insert_pfn()

PAT のサポートにより、新しい APIpgprot_writecombineが追加されています。そのため、ドライバーは、ステップ 1 のいずれ pgprot_noncached()pgprot_writecombine()で上記のシーケンスを使用し、その後にステップ 2 を続けることができます。

このドキュメントに基づいて、私の mmap ハンドラーからの関連するカーネル コードは次のようになります。

PCIe デバイスが lspci に表示され、予想どおりプリフェッチ可能としてマークされた BAR が表示されます。

ユーザー空間から呼び出すとmmap、ログ メッセージが表示されます (debugpat カーネル ブート パラメータが設定されています)。

reserve_memtype 追加 [mem 0xd4000000-0xd7ffffff], track write-combining, req write-combining, ret write-combining

/sys/kernel/debug/x86/pat_memtype_listまた、PAT エントリが正しいように見え、重複する領域がないことも確認できます。

また、PAT 構成と競合する MTRR エントリがないことも確認しました。私が見る限り、書き込み結合がユーザー空間で発生するようにすべてが正しく設定されていますが、PCIe アナライザーを使用して PCIe バス上のトランザクションを観察すると、ユーザー空間のアクセス パターンは、カーネルから実行される同じ書き込みとはまったく異なります。ioremap_wc電話の後。

書き込み結合がユーザー空間から期待どおりに機能しないのはなぜですか?

さらにデバッグするにはどうすればよいですか?

現在、シングル ソケット 6 コア i7-3930K で実行しています。

0 投票する
2 に答える
6620 参照

linux - Linux 3.12 ドライバーで PCIe メモリー領域を「有効にする」必要がありますか?

PCIeドライバーのprobe()関数から呼び出されるコードがあります(この投稿に大まかに基づいています):

編集: Andreas Bombe の応答に基づいて、コードを使用するように変更しましたが、まだシステムがハングする経験がありますpci_iomap()

しかし、カーネルは への呼び出しでハングするだけioread8()です。

私は何か間違ったことをしていますか?それとも、ハードウェアに目を向ける必要がありますか?

lspci -vおよびのシステムのクリーン ブートの出力は次のcat /proc/iomemとおりです。

メモリが表示され[disabled]ます。有効にする必要がありますか?

0 投票する
1 に答える
1764 参照

linux - pci_Driver.probe が呼び出されていない

ラップトップの PCIe 拡張スロットを介して接続された PCI デバイス用の Linux デバイス ドライバーの開発を始めています。

起動時には、すべてが美しく機能します。ただし、基本的な Hotplug サポートをオンラインで取得しようとしています。カードを取り出すと、( でdmesg) 適切な remove stuff が呼び出されていることがわかります。ただし、カードを再挿入しても何も起こりません。モジュールを手動で取り外してからカードを挿入すると (または起動後にカードを挿入すると)、モジュールinitが呼び出されていることがわかりますが、probe. lspciまた、デバイスは出力に表示されません。

ただし、出力にecho 1 > /sys/bus/pci/rescanは表示されlspciますが、モジュールはエラーでロードに失敗します ( pci_enable_device failed with code -22)。

これを診断し始める場所はありますか?実行に失敗したこと.probeは、私を本当に困惑させていることです。

これはここに接続されている FPGA ボードであるため、デバイス自体に問題がある可能性がありますが、それでもプローブが実行され、後で奇妙なエラーで失敗すると予想されます。

0 投票する
1 に答える
164 参照

linux-device-driver - PCIe 1.1 デバイスが pcie gen 3 スロットで検出されない

私の PC は、カーネル バージョン 3.11.0-23 の Ubuntu 12.04 LTS で実行されています。

以下のリンクは私の PC モデルです: http://www.villman.com/Product-Detail/HP_Pavilion_500_232d

x16 PCIE 3.0 スロットに x4 pcie 1.1 デバイスを挿入しました。lspci を実行すると、デバイスがリストに表示されません。

Gen 2.0 スロットを搭載した他の PC でデバイスをテストしたところ、検出されました。

デバイスを検出する方法はありますか?

前もって感謝します!

よろしく、連邦準備制度理事会

0 投票する
1 に答える
3315 参照

computer-architecture - PCIe と QPI のパフォーマンスとアーキテクチャの違いは何ですか?

PCIe 3.0 x16 と QPI 1.1 (20 レーン) の実効帯域幅 (16 GB/秒) は同じです。そこで、両者の違いについて大まかなイメージをつかみたいと思いました。

レイテンシとメッセージ レート (1 秒あたりのパケット数または TLP 数) に関して、2 つの違いは何ですか? レイテンシーについては、QPI で 20 ns、PCIe 3.0 で 200 ns です。これらは良い見積もりですか?はいの場合、PCIe のレイテンシがこれほど高いのはなぜですか? ワイヤの長さが原因ですか?

QPI がキャッシュ スヌーピングを提供するという事実以外に、2 つのアーキテクチャに大きな違いはありますか? 私の知る限り、どちらも階層化されたプロトコルを使用しています。トランスポート層から物理層までです。