私は高速のデータ伝送のためにパラレルIOカードを使用するWindowsコンソールアプリケーションを持っています。 (一般的な標準HPDI32ALT)デバイスドライバがページフォールトを引き起こすのはなぜですか?
私のプロセスはユーザーモードで実行されていますが、デバイスのAPIの後ろには、カーネルモードのドライバアクティビティ(PCI DMA転送、デバイスステータスレジスタの読み込みなど)があります。おおよそ次のようになります。
- 起動時にAPIからのIOバッファへのポインタを要求します。私のメインループで
- :デバイスのバッファに部屋を待っているAPI(低ウォーターマーク)
- 上 が
- ブロック
- はIOへのポインタを渡すことによって、デバイスへの送信を開始し、送信データとIOバッファを埋めますIOは
アプリケーションは、適切なデータレートと長時間のスループットで正常に動作しているように見えますが、sys内部ツールプロセスエクスプローラのプロセスを見ると、多数のページフォルト(〜6k /秒) 。私は〜30MB/sをカードに移動しています。
私は十分なRAMを持っており、ページ違反がディスクIO関連ではないことを合理的に確信しています。
ページフォルトの原因と考えられることはありますか?私はまた、受信モードで同じIOカードを使用しているこのアプリケーションの受信側を持っています。 APIの受信モードを使用しても、多数のページフォールトは発生しません。
IOバッファをカーネルモードに移動すると、ページフォルトが発生する可能性がありますか?
マニュアルは、IOバッファを使用することがDMA性能の理由から、物理メモリ内の連続するメモリのブロックを割り当てることを可能にすることを言います。 – JeffV