DMA vs entrées/sorties programmées : les différences expliquées
Il existe deux manières de déplacer des données entre un périphérique et la mémoire. En entrées/sorties programmées (PIO), le CPU lit ou écrit lui-même chaque mot via des registres. En accès direct à la mémoire (DMA), un contrôleur DMA déplace les données de façon autonome, et le CPU se contente de configurer le transfert et d'être averti de sa fin. Le DMA libère le CPU et traite les gros transferts beaucoup plus vite, mais il demande davantage de configuration et de précautions.
| Critère | entrées/sorties programmées (PIO) | DMA |
|---|---|---|
| Qui déplace les données | Le CPU, mot par mot, avec des instructions de chargement et de rangement | Un contrôleur DMA ou le périphérique lui-même, directement depuis ou vers la mémoire |
| Charge du CPU | Élevée : le CPU est occupé pendant tout le transfert | Faible : le CPU configure le transfert et effectue d'autres tâches |
| Débit pour les gros transferts | Limité par la vitesse du CPU | Élevé |
| Surcoût de configuration | Aucun | Nécessite une adresse, une longueur ou des descripteurs, et la gestion de la fin du transfert |
| Petits transferts | Souvent plus rapide, car il n'y a pas de configuration | Le coût de configuration peut dépasser le gain |
| Complexité | Simple | Plus complexe : anneaux de descripteurs, alignement des tampons, cohérence des caches et paramètres de l'IOMMU |
| Utilisation du bus mémoire | Via le CPU | Le moteur DMA est en concurrence avec le CPU pour la bande passante mémoire |
| Usages typiques | Petits registres de contrôle, capteurs simples, anciens modes PIO | SSD et NVMe, cartes réseau, tampons audio, flux d'échantillons d'ADC, transferts GPU |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.