Utilisation d’E/S directes
Les pilotes pour les appareils qui peuvent transférer de grandes quantités de données à la fois doivent utiliser les E/S directes pour ces transferts. L’utilisation d’E/S directes pour les transferts volumineux améliore les performances d’un pilote, à la fois en réduisant sa surcharge d’interruption et en éliminant l’allocation de mémoire et les opérations de copie inhérentes aux E/S mises en mémoire tampon.
En règle générale, les pilotes de périphériques de stockage de masse demandent des E/S directes pour les demandes de transfert, y compris les pilotes de niveau le plus bas qui utilisent l’accès direct à la mémoire (DMA) ou les E/S programmées (PIO), ainsi que tous les pilotes intermédiaires chaînés au-dessus d’eux.
Le gestionnaire d’E/S détermine qu’une opération d’E/S utilise les E/S directes comme suit :
Pour les requêtes IRP_MJ_READ et IRP_MJ_WRITE , DO_DIRECT_IO est défini dans le membre Indicateurs de la structure DEVICE_OBJECT . Pour plus d’informations, consultez Initialisation d’un objet Device.
Pour les demandes IRP_MJ_DEVICE_CONTROL et IRP_MJ_INTERNAL_DEVICE_CONTROL , la valeur du code IOCTL contient METHOD_IN_DIRECT ou METHOD_OUT_DIRECT comme valeur TransferType dans la valeur IOCTL. Pour plus d’informations, consultez Définition de codes de contrôle d’E/S.
Les pilotes qui utilisent des E/S directes utilisent parfois également des E/S mises en mémoire tampon pour gérer certains IRPs. En particulier, les pilotes utilisent généralement des E/S mises en mémoire tampon pour certains codes de contrôle d’E/S pour IRP_MJ_DEVICE_CONTROL demandes qui nécessitent des transferts de données, que le pilote utilise ou non des E/S directes pour les opérations de lecture et d’écriture.
La configuration d’un transfert d’E/S direct varie légèrement, selon que DMA ou PIO est utilisé. Pour plus d'informations, consultez les pages suivantes :
Utilisation d’E/S directes avec DMA
Utilisation d’E/S directes avec PIO
Les pilotes doivent prendre des mesures pour maintenir la cohérence du cache pendant les transferts DMA et PIO. Pour plus d’informations, consultez Maintenance de la cohérence du cache.