問題タブ [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.
cpu - 次の間のトランザクション サイズとレイテンシ: CPU と RAM、RAM と PCIE2.0 16x デバイス
最小トランザクション サイズ (バイト単位) と、レイテンシ (クロック サイクルまたはナノ秒単位) は?
為に:
- CPU(Sandy/Ivy Bridge)からRAMにアクセス
- PCIE 2.0 16x による RAM とデバイス間の DMA アクセス
linux - Linux PCIe ドライバーをテストするには?
シンプルな PCIe ドライバーを作成しましたが、それが機能するかどうかをテストしたいと思います。例えば、デバイスからも使用しているメモリへの読み書きができれば。
どうやってやるの?
また、どのようなものも証明する必要がありますか?
linux - Linux カーネルに PCI-e バスの列挙を強制するにはどうすればよいですか?
Linux カーネル 2.6
Linux を実行している開発ボードに接続された GPIO 経由でロードされる fpga があります。fpga は、pci-express バスを介してデータを送受信します。ただし、これは起動時に列挙されるため、リンクは検出されません (起動時に fpga がロードされないため)。
Linux で PCI-E バスの再列挙を強制するにはどうすればよいですか? 簡単なコマンドはありますか、それともカーネルを変更する必要がありますか? pcie デバイスをホットプラグする機能が必要です。
linux - 同じ PCIe スロットで異なる PCIe レーンを使用する複数のデバイスに書き込むことはできますか?
複数のデバイスをサポートする Linux デバイス ドライバーを作成しています。これらのデバイスが 4 つ搭載された x8 PCIe カードがあります。それぞれが PCIe スイッチを介して実行され、2 つの PCIe レーンを取得します。ドライバーが同時に複数のレーンに書き込む方法はありますか? もしそうなら、どうすればいいですか?すべてが1つのPCIeスロットにあるため、可能だと思いますが、これがドライバーからどのように行われるかわかりません。
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)]
wmi - WMI: PCIエクスプレス
WMI を使用してデバイスを PCI Express スロットに接続する方法を知っている人はいますか?
Win32_PnPEntity クラスを使用していますが、PCI デバイスと PCI Express デバイスを区別できません。
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
した場合に呼び出します。-EIO
0
リクエスト キューは次のように設定されます。
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の全長(各スキャッター・ギャザー・セグメントの合計長)になるように更新されます。
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ドライバーとの相互作用をエミュレートする方法について説明します。
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?