使用直接 I/O
一次傳輸大量資料之裝置的驅動程式應該針對這些傳輸使用直接 I/O。 針對大型傳輸使用直接 I/O 可改善驅動程式的效能,方法是減少其中斷負荷,並消除緩衝 I/O 固有的記憶體配置和複製作業。
一般而言,大量儲存設備磁碟機會要求直接 I/O 進行傳輸要求,包括使用直接記憶體存取的最低層級驅動程式, (DMA) 或程式化 I/O (PIO) ,以及上面鏈結的任何中繼驅動程式。
I/O 管理員會判斷 I/O 作業使用直接 I/O,如下所示:
對於IRP_MJ_READ和IRP_MJ_WRITE要求,DO_DIRECT_IO是在DEVICE_OBJECT結構的Flags成員中設定。 如需詳細資訊,請參閱 初始化 Device 物件。
對於 IRP_MJ_DEVICE_CONTROL 和 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求,IOCTL 程式碼的值會包含 METHOD_IN_DIRECT 或 METHOD_OUT_DIRECT 作為 IOCTL 值中的 TransferType 值。 如需詳細資訊,請參閱 定義 I/O 控制程式碼。
使用直接 I/O 的驅動程式有時也會使用緩衝 I/O 來處理某些 IRP。 特別是,不論驅動程式是否使用直接 I/O 進行讀取和寫入作業,驅動程式通常會針對需要資料傳輸 的IRP_MJ_DEVICE_CONTROL 要求使用緩衝 I/O。
根據使用 DMA 或 PIO 而定,設定直接 I/O 傳輸會稍有不同。 如需詳細資訊,請參閱
驅動程式必須採取步驟,以在 DMA 和 PIO 傳輸期間維護快取共存。 如需詳細資訊,請參閱維護快取共合。