64 ビットの Windows での DMA の実行
ドライバーに 64 ビット アドレス指定のサポートを追加すると、システムの全体的なパフォーマンスを大幅に向上させることができます。 これは、ダイレクト メモリ アクセス (DMA) を実行するデバイス ドライバーの場合は特に重要です。 64 ビットの Microsoft Windows では、DMA を実行するデバイス ドライバーであっても 64 ビット アドレス指定をサポートしていなければ、ダブル バッファリングされるため、相対的なパフォーマンスが低下します。
ダブル バッファリングは通常、8 GB のシステムに対する影響は比較的小さいものの (1 桁のパーセント ポイント)、データベース アクティビティなどの I/O が集中するタスクへの影響は十分にあります。 物理メモリ容量が増えると、パフォーマンスへの悪影響も大きくなります。
64 ビット DMA をサポートするには、ドライバーは次のガイドラインに従う必要があります。
物理アドレスの計算には、PHYSICAL_ADDRESS 構造体を使用します。
64 ビット アドレス全体を有効な物理アドレスとして扱います。 たとえば、ドライバーでは、ロックされたバッファーで MmGetPhysicalAddress の呼び出しや上位 32 ビットの破棄、切り捨てたアドレスを 32 ビット コンポーネント アダプターに渡すことはしないでください。 このようにすると、メモリの破損、I/O の消失、システム障害が発生します。
Windows 2000 で追加された高パフォーマンスのスキャッター/ギャザー ルーチン (GetScatterGatherList と PutScatterGatherList) を使用します。
Mm64BitPhysicalAddress グローバル システム変数の値を確認します。 TRUE の場合、システムは 64 ビットの物理アドレス指定をサポートしています。
ドライバーが 64 ビット DMA アドレスをサポートしていることを示すには、DEVICE_DESCRIPTION 構造体の Dma64BitAddresses メンバーを TRUE に設定します。
32 ビット Windows の DMA ルーチンは、64 ビットに対応しています。 デバイス ドライバーでこれらのルーチンが正しく使用されていれば、DMA コードは変更なしで 64 ビット Windows で動作します。