次の方法で共有


64 ビットの Windows での DMA の実行

ドライバーに 64 ビット アドレス指定のサポートを追加すると、システムの全体的なパフォーマンスを大幅に向上させることができます。 これは、ダイレクト メモリ アクセス (DMA) を実行するデバイス ドライバーの場合は特に重要です。 64 ビットの Microsoft Windows では、DMA を実行するデバイス ドライバーであっても 64 ビット アドレス指定をサポートしていなければ、ダブル バッファリングされるため、相対的なパフォーマンスが低下します。

ダブル バッファリングは通常、8 GB のシステムに対する影響は比較的小さいものの (1 桁のパーセント ポイント)、データベース アクティビティなどの I/O が集中するタスクへの影響は十分にあります。 物理メモリ容量が増えると、パフォーマンスへの悪影響も大きくなります。

64 ビット DMA をサポートするには、ドライバーは次のガイドラインに従う必要があります。

  1. 物理アドレスの計算には、PHYSICAL_ADDRESS 構造体を使用します。

  2. 64 ビット アドレス全体を有効な物理アドレスとして扱います。 たとえば、ドライバーでは、ロックされたバッファーで MmGetPhysicalAddress の呼び出しや上位 32 ビットの破棄、切り捨てたアドレスを 32 ビット コンポーネント アダプターに渡すことはしないでください。 このようにすると、メモリの破損、I/O の消失、システム障害が発生します。

  3. Windows 2000 で追加された高パフォーマンスのスキャッター/ギャザー ルーチン (GetScatterGatherListPutScatterGatherList) を使用します。

  4. Mm64BitPhysicalAddress グローバル システム変数の値を確認します。 TRUE の場合、システムは 64 ビットの物理アドレス指定をサポートしています。

  5. ドライバーが 64 ビット DMA アドレスをサポートしていることを示すには、DEVICE_DESCRIPTION 構造体の Dma64BitAddresses メンバーを TRUE に設定します。

32 ビット Windows の DMA ルーチンは、64 ビットに対応しています。 デバイス ドライバーでこれらのルーチンが正しく使用されていれば、DMA コードは変更なしで 64 ビット Windows で動作します。