Использование прямого ввода-вывода
Драйверы для устройств, которые могут передавать большие объемы данных за раз, должны использовать прямой ввод-вывод для этих передач. Использование прямых операций ввода-вывода для больших передач повышает производительность драйвера, как за счет снижения затрат на прерывания, так и за счет устранения операций выделения памяти и копирования, присущих буферизованному вводу-выводу.
Как правило, драйверы запоминающих устройств запрашивают прямые операции ввода-вывода для запросов на передачу, включая драйверы самого низкого уровня, использующие прямой доступ к памяти (DMA) или запрограммированные операции ввода-вывода (PIO), а также любые промежуточные драйверы, связанные с ними.
Диспетчер ввода-вывода определяет, что операция ввода-вывода использует прямой ввод-вывод следующим образом:
Для запросов IRP_MJ_READ и IRP_MJ_WRITE DO_DIRECT_IO задается в элементе Flags структуры DEVICE_OBJECT . Дополнительные сведения см. в разделе Инициализация объекта устройства.
Для запросов IRP_MJ_DEVICE_CONTROL и IRP_MJ_INTERNAL_DEVICE_CONTROL значение кода IOCTL содержит METHOD_IN_DIRECT или METHOD_OUT_DIRECT в качестве значения TransferType в значении IOCTL. Дополнительные сведения см. в разделе Определение кодов управления вводом-выводом.
Драйверы, использующие прямой ввод-вывод, иногда также используют буферизированные операции ввода-вывода для обработки некоторых irP. В частности, драйверы обычно используют буферизацию ввода-вывода для некоторых кодов управления вводом-выводом для IRP_MJ_DEVICE_CONTROL запросов, требующих передачи данных, независимо от того, использует ли драйвер прямой ввод-вывод для операций чтения и записи.
Настройка прямой передачи ввода-вывода немного отличается в зависимости от того, используется ли DMA или PIO. Дополнительные сведения см. в разделе:
Использование прямого ввода-вывода с DMA
Использование прямого ввода-вывода с piO
Драйверы должны принять меры для поддержания когерентности кэша во время передачи DMA и личных сведений. Дополнительные сведения см. в разделе Поддержка когерентности кэша.