問題タブ [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 投票する
2 に答える
795 参照

cpu - 次の間のトランザクション サイズとレイテンシ: CPU と RAM、RAM と PCIE2.0 16x デバイス

最小トランザクション サイズ (バイト単位) と、レイテンシ (クロック サイクルまたはナノ秒単位) は?
為に:

  1. CPU(Sandy/Ivy Bridge)からRAMにアクセス
  2. PCIE 2.0 16x による RAM とデバイス間の DMA アクセス
0 投票する
2 に答える
4395 参照

linux - Linux PCIe ドライバーをテストするには?

シンプルな PCIe ドライバーを作成しましたが、それが機能するかどうかをテストしたいと思います。例えば、デバイスからも使用しているメモリへの読み書きができれば。

どうやってやるの?

また、どのようなものも証明する必要がありますか?

0 投票する
3 に答える
57109 参照

linux - Linux カーネルに PCI-e バスの列挙を強制するにはどうすればよいですか?

Linux カーネル 2.6

Linux を実行している開発ボードに接続された GPIO 経由でロードされる fpga があります。fpga は、pci-express バスを介してデータを送受信します。ただし、これは起動時に列挙されるため、リンクは検出されません (起動時に fpga がロードされないため)。

Linux で PCI-E バスの再列挙を強制するにはどうすればよいですか? 簡単なコマンドはありますか、それともカーネルを変更する必要がありますか? pcie デバイスをホットプラグする機能が必要です。

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

linux - 同じ PCIe スロットで異なる PCIe レーンを使用する複数のデバイスに書き込むことはできますか?

複数のデバイスをサポートする Linux デバイス ドライバーを作成しています。これらのデバイスが 4 つ搭載された x8 PCIe カードがあります。それぞれが PCIe スイッチを介して実行され、2 つの PCIe レーンを取得します。ドライバーが同時に複数のレーンに書き込む方法はありますか? もしそうなら、どうすればいいですか?すべてが1つのPCIeスロットにあるため、可能だと思いますが、これがドライバーからどのように行われるかわかりません。

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

cuda - 2-GPUカードでのPCI-eレーン割り当て?

動作のデータレートはcudaMemcpy、CPUからGPUまで実行するために割り当てられたPCI-e 3.0(または2.0)レーンの数に大きく影響されます。2つのGPUを含むNvidiaデバイスでPCI-eレーンがどのように使用されるのか知りたいです。

Nvidiaには、1つのPCI-eデバイスに2つのGPUを搭載した製品がいくつかあります。例えば:

  • GTX 590には、2つのFermiGF110GPUが含まれています
  • GTX 690には、2つのKeplerGK104GPUが含まれています

PCI-e 16多くの新しいグラフィックカードと同様に、これらのデバイスはスロットにマウントされます。GPUを1つだけ含むカードの場合、GPUは16のPCI-eレーンを使用できます。

2つのGPUを含むデバイス(GTX 690など)があり、GPUの1つだけでコンピューティングジョブを実行している場合、16のPCI-eレーンすべてが使用されている1つのGPUにサービスを提供できますか?


これをアスキーアートとして表示するには...

[ GTX690(2x GF110)] ------16PCI-eレーン----- [ CPU ]


CPUがそれぞれ1つのGPUを持つ2つのカードに接続されている場合については話していません。(次の図のように)

[ GTX670(1x GK104)] ------PCI-eレーン----- [ CPU ] ------PCI-eレーン----- [ GTX670(1x GK104)]

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

wmi - WMI: PCIエクスプレス

WMI を使用してデバイスを PCI Express スロットに接続する方法を知っている人はいますか?

Win32_PnPEntity クラスを使用していますが、PCI デバイスと PCI Express デバイスを区別できません。

0 投票する
0 に答える
964 参照

linux-kernel - Linux ブロック ドライバー マージの略歴

私は、ファッションの後、動作しているブロックデバイスドライバーを持っています。これは PCIe デバイス用であり、デバイスにはシーク時間がないため、要求キューを使用するのではなく、make_request_fn を使用して BIOS を直接処理しています。ただし、まだトランザクション オーバーヘッドがあります。

デバイスから連続して読み取ると、多くのセグメント (通常は最大 32) を持つ BIOS が取得され、それぞれが 2 つのハードウェア セクター (つまり 2 * 2k) で構成され、これがデバイスへの 1 つのスキャッター ギャザー トランザクションとして処理され、保存されます。多くのシグナリング オーバーヘッド。ただし、書き込みでは、BIOS にはそれぞれ 2 セクターのセグメントが 1 つしかないため、合計で操作にかなりの時間がかかります。私がやりたいことは、入ってくる BIOS を何らかの方法で多くのセグメントで構成するか、または自分で BIOS を適切にマージすることです。ここで正しいアプローチは何ですか?

の現在の内容は、次のmake_request_fnようなものです。

  • バイオの読み取り/書き込みを決定する
  • 略歴の各セグメントについて、scatterlist*with でエントリを作成しますsg_set_page
  • このスキャッタリストを PCI にマッピングするにはpci_map_sg
  • scatterlist 内のすべてのセグメントについて、複数セグメントの DMA スキャッター ギャザー操作を定義するデバイス固有の構造に追加します。
  • その構造をDMAにマップする
  • 取引を行う
  • 構造と SG DMA のマップ解除
  • 失敗した場合と成功bio_endioした場合に呼び出します。-EIO0

リクエスト キューは次のように設定されます。

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

linux-kernel - ディスクIOのswiotlb_unmap_sg_attrs()でのNULLポインター逆参照

PCIeブロックデバイスドライバーを使用してファイルを読み書きするときに、本当に理解できないエラーが発生します。swiotlb_unmap_sg_attrs()で問題が発生しているようです。これは、ポインターのNULL逆参照を行っているようsgですが、これがどこから来ているのかわかりません。scatterlist自分で使用しているのはデバイス情報の一部として割り当てられているためです。構造化され、ドライバーが実行する限り存続します。

問題に対応するためのスタックトレースがあります。正確な詳細は少し異なる傾向がありますが、常にでクラッシュしswiotlb_unmap_sq_attrs()ます。

IO関数の周りのロックを処理する方法がわからないため、ロックの問題が発生している可能性が高いと思います。関数が呼び出されたときにロックはすでに保持されていrequestます。完了するには(MSI)IRQが必要なため、IO関数自体が呼び出される前にロックを解放します。IRQハンドラーは、IO関数が待機している「ステータス」値を更新します。IO関数が戻ったら、ロックを元に戻し、キュー処理の要求に戻ります。

クラッシュは次の間に発生しblk_fetch_request()ます。

ここでbytes、要求ハンドラーによって、IOの全長(各スキャッター・ギャザー・セグメントの合計長)になるように更新されます。

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

c - LinuxデバイスドライバーとダミーPCIデバイスのインターフェイス

PCIデバイスをシミュレートするユーザースペースプログラムがあります。NVMe標準を使用してPCIデバイスと対話するnvmelinuxデバイスドライバーをダウンロードしました。ユーザースペースプログラムが標準と互換性があることを確認する必要があります。

nvme.c(Linuxデバイスドライバー)には、デバイスが接続されたときに呼び出されるnvme_probe()関数が含まれています。デバイスがないため、プローブ機能をnvme_init()関数に組み込むと思います。

今、私はインターネットでPCIデバイスをエミュレートする方法を理解するためにかなり多くのことを学びました。たとえば、 デバイスに接続せずにPCIドライバーをインストールする、LinuxでPCIデバイスをエミュレートするなど 、入力された構造体pci_devをに戻す方法がわかりません。nvme_probe()の関数呼び出しpci_set_drvdata(pdev, dev);

また、チュートリアルを提案できる場合は、pci_dev構造体にダミーのデバイス構成とユーザースペースプログラム関数ポインターのメモリアドレスを手動で入力して、nvmeドライバーとの相互作用をエミュレートする方法について説明します。

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

fpga - FPGA PCIe DMA write doesn't change CPU RAM

I am working on DMA connection between Xilinx FPGA and PC over PCIe. However, the DMA transfer from FPGA to Computer doesn't work. I dumped the PCIe package sent by FPGA via ChipScope:

(header)0x6000_0002,0x0600_01FF,(Address)0x0000_0000,0x3740_0000,(data)0x0000_0001,0x0000_0002

which should write 0x1,0x2 to memory address 0x3740_0000, but the write didn't happen. On the other hand, the read from the same address worked perfectly. I have tried both the 32bit and 64bits address, none of them could be succeed. The computer I am working on is an AMD 64bit machine. what did I miss?