web-dev-qa-db-ja.com

DMAはPCI Expressデバイスでどのように機能しますか?

CPUがDMA PCI Expressデバイスからの読み取り転送を行うことを望んでいるとします。PCIExpressデバイスへの通信はトランザクションレイヤーパケット(TLP)によって提供されます。理論的には、最大ペイロードサイズは1024ダブルワードです。 TLPの場合、DMAコントローラは、CPUが4メガバイトのサイズのPCI ExpressデバイスにDMA読み取りコマンドを与えると、どのように動作しますか?

17
spartacus

PCIe列挙フェーズでは、最大許容ペイロードサイズが決定されます(デバイスの最大ペイロードサイズよりも小さい場合があります。たとえば、中間PCIeスイッチの最大ペイロードサイズが小さい場合)。

ほとんどのPCIeデバイスはDMAマスターなので、ドライバーがデバイスにコマンドを転送します。デバイスは、xx最大サイズのTLPチャンクで4 MiBを送信するためにいくつかの書き込みパケットを送信します。

コメント1に返信して1を編集:

PCIベースのバスには、チップまたはチップセット内のサブ回路の形の「DMAコントローラ」はありません。バス上のすべてのデバイスがバスマスターになることができます。メインメモリは常にスレーブです。

PCIマスターとして機能できる独自のPCIeデバイスカードを構築し、プログラム(CPUで実行中)がそのカードからメインメモリ(4 MiB)にデータを送信したいとします。

デバイスドライバは、オペレーティングシステムから特定のメモリ領域のメモリマッピングを認識します(いくつかのキーワード:メモリマップI/O、PCIバス列挙、PCI BARなど)。

ドライバは、コマンド(書き込み)、送信元アドレス、宛先アドレス、および長さをデバイスに転送します。これは、事前定義されたBAR内の特別なアドレスにバイトを送信するか、PCI構成スペースに書き込むことによって実行できます。 DMAカードのマスターは、これらの特別な領域で新しいタスク(スキャッター/ギャザーリスト)をチェックします。そうである場合、これらのタスクはキューに入れられます。

DMAマスターは送信先、データ数を認識しています。彼はローカルメモリからデータを読み取り、最大ペイロードサイズの512バイトTLPにラップします(パスデバイスの最大ペイロードサイズ< --->メインメモリはエニュメレーションで認識され、それを宛先アドレスに送信します。PCIアドレスベースのルーティングメカニズムは、これらのTLPをメインメモリに送信します。

20
Paebbels