Sans DMA, le transfert de données nécessite l'utilisation d'entrées/sorties programmées, ce qui monopolise généralement le processeur pendant toute la durée du transfert et le rend indisponible pour d'autres tâches. Avec le DMA, le processeur initie d'abord le transfert, puis effectue d'autres opérations pendant son déroulement, et enfin reçoit une interruption du contrôleur d'accès direct à la mémoire ( DMAC ) une fois l'opération terminée. Cette fonctionnalité est utile lorsque le processeur ne peut pas suivre le rythme du transfert de données, ou lorsqu'il doit effectuer d'autres tâches pendant l'attente d'un transfert de données relativement lent.
De nombreux systèmes matériels utilisent l'accès direct à la mémoire (DMA), notamment les contrôleurs de disques durs , les cartes graphiques , les cartes réseau , les cartes son et les contrôleurs DMA dédiés (agissant pour le compte des périphériques susmentionnés). Le DMA est également utilisé pour le transfert de données intra-puce dans certains processeurs multicœurs . Les ordinateurs compatibles DMA peuvent transférer des données vers et depuis des périphériques avec une charge processeur bien moindre que les ordinateurs dépourvus de DMA.
L'accès direct à la mémoire (DMA) peut également être utilisé pour les transferts de mémoire à mémoire . Il permet de décharger le processeur des opérations mémoire coûteuses, telles que les copies volumineuses ou les opérations de dispersion-rassemblement , vers un contrôleur DMA. La technologie d'accélération des E/S (I/O Acceleration Technology ) en est un exemple d'implémentation . Le DMA présente un intérêt particulier pour les architectures de calcul en réseau sur puce (NoC) et en mémoire .
Bien que l’accélération matérielle soit généralement spécifique au fournisseur, l’accès direct à la mémoire peut être utilisé par le pilote de classe .
L'accès direct à la mémoire (DMA) standard, également appelé DMA tiers, utilise un contrôleur DMA. Ce contrôleur génère des adresses mémoire et initie des cycles de lecture ou d'écriture. Il contient plusieurs registres matériels accessibles en écriture par le processeur, notamment un registre d'adresse mémoire, un registre de comptage et un ou plusieurs registres de contrôle. Selon les fonctionnalités du contrôleur DMA, ces registres de contrôle peuvent spécifier la source, la destination et le sens du transfert (lecture ou écriture sur le périphérique d'E/S).
Pour effectuer une opération d'entrée/sortie ou de transfert de données de mémoire à mémoire, le processeur hôte initialise le contrôleur DMA en lui fournissant le nombre de mots à transférer et l'adresse mémoire à utiliser. Le processeur commande ensuite au périphérique d'initier un transfert de données. Le contrôleur DMA fournit alors des adresses et des lignes de contrôle de lecture/écriture à la mémoire système. À chaque fois qu'un octet de données est prêt à être transféré entre le périphérique et la mémoire, le contrôleur DMA incrémente son registre d'adresse interne jusqu'à ce que le bloc de données complet soit transféré.
Maîtrise du bus
Dans un système à bus maître , également appelé système DMA les conflits de bus . Le périphérique lui-même peut disposer de registres matériels, tels que des registres d'adresse et de comptage, pour contrôler le fonctionnement du DMA.
Modes de fonctionnement
Mode rafale
En mode rafale , un bloc de données entier est transféré en une seule séquence contiguë. Une fois que le contrôleur DMA obtient l'accès au bus système de la part du processeur, il transfère tous les octets du bloc avant de rendre le contrôle du bus au processeur, ce qui rend ce dernier inactif pendant une période relativement longue. Ce mode est également appelé « mode de transfert par bloc ».
mode vol de cycle
Le mode de vol de cycle est utilisé dans les systèmes où le processeur ne doit pas être mis hors service pendant la durée nécessaire aux modes de transfert en rafale. Dans ce mode, le contrôleur DMA accède au bus système de la même manière qu'en mode rafale, via les signaux BR ( Bus Request ) et BG ( Bus Grant ) , qui contrôlent l'interface entre le processeur et le contrôleur DMA. Cependant, en mode de vol de cycle, après le transfert d'une unité de données, le contrôle du bus système est cédé au processeur via BG. Il est ensuite redemandé continuellement via BR, transférant une unité de données par requête, jusqu'à ce que le bloc de données entier ait été transféré. En acquérant et en relâchant continuellement le contrôle du bus système, le contrôleur DMA entrelace les transferts d'instructions et de données. Le processeur traite une instruction, puis le contrôleur DMA transfère une valeur de données, et ainsi de suite. Les données ne sont pas transférées aussi rapidement, mais le processeur n'est pas inactif aussi longtemps qu'en mode rafale. Le mode de vol de cycle est utile pour les contrôleurs qui surveillent les données en temps réel.
Mode transparent
Le mode transparent est le plus lent pour le transfert d'un bloc de données, mais il est aussi le plus efficace en termes de performances globales du système. Dans ce mode, le contrôleur DMA ne transfère les données que lorsque le processeur effectue des opérations n'utilisant pas les bus système. Le principal avantage du mode transparent est que le processeur n'interrompt jamais l'exécution de ses programmes et que le transfert DMA est gratuit. Son inconvénient est que le matériel doit déterminer quand le processeur n'utilise pas les bus système, ce qui peut s'avérer complexe. Ce mode est également appelé « mode de transfert de données DMA caché ».
Cohérence du cache
![]()
L'accès direct à la mémoire (DMA) peut engendrer des problèmes de cohérence du cache . Imaginons un processeur doté d'un cache et d'une mémoire externe accessible directement par les périphériques via DMA. Lorsque le processeur accède à l'adresse X en mémoire, la valeur courante est stockée dans le cache. Les opérations suivantes sur X mettront à jour la copie en cache de X, mais pas sa version en mémoire externe (dans le cas d'un cache à écriture différée) . Si le cache n'est pas vidé avant la prochaine tentative d'accès à X par un périphérique, ce dernier recevra une valeur obsolète de X.
De même, si la copie mise en cache de X n'est pas invalidée lorsqu'un périphérique écrit une nouvelle valeur dans la mémoire, alors le processeur fonctionnera sur une valeur obsolète de X.
Ce problème peut être résolu de deux manières lors de la conception du système : les systèmes à cohérence de cache implémentent une méthode matérielle, appelée surveillance du bus , par laquelle les écritures externes sont signalées au contrôleur de cache. Ce dernier invalide alors le cache pour les écritures DMA et le vide pour les lectures DMA. Les systèmes non cohérents délèguent cette tâche au logiciel ; le système d’exploitation doit alors s’assurer que les lignes de cache sont vidées avant le démarrage d’un transfert DMA sortant et invalidées avant l’accès à une plage mémoire affectée par un transfert DMA entrant. Le système d’exploitation doit également s’assurer qu’aucun thread en cours d’exécution n’accède à cette plage mémoire entre-temps. Cette dernière approche introduit une surcharge pour l’opération DMA, car la plupart des matériels nécessitent une boucle pour invalider chaque ligne de cache individuellement.
Il existe également des systèmes hybrides, où le cache L2 secondaire est cohérent tandis que le cache L1 (généralement sur le processeur) est géré par logiciel.
Exemples
ISA
Sur le PC IBM d'origine (et son successeur, le PC/XT ), un seul contrôleur DMA Intel 8237 était disponible , capable de fournir quatre canaux DMA (numérotés de 0 à 3). Ces canaux effectuaient des transferts 8 bits (le 8237 étant un périphérique 8 bits, parfaitement adapté à l' architecture du processeur et du bus i8088 du PC ), ne pouvaient adresser que le premier mégaoctet de RAM ( norme i8086 /8088) et étaient limités à l'adressage de segments uniques de 64 ko au sein de cet espace (bien que les canaux source et destination puissent adresser des segments différents). De plus, ce contrôleur ne pouvait être utilisé que pour les transferts vers, depuis ou entre les périphériques d'E/S du bus d'extension, car le 8237 ne pouvait effectuer que des transferts mémoire à mémoire via les canaux 0 et 1, le canal 0 du PC (et du XT) étant dédié à l'actualisation dynamique de la mémoire . Cela l'empêchait d'être utilisé comme un « Blitter » à usage général et, par conséquent, les déplacements de mémoire par blocs dans le PC, limités par la vitesse PIO générale du processeur, étaient très lents.
Avec l' IBM PC/AT , le bus AT amélioré (plus communément appelé Industry Standard Architecture ou ISA) a ajouté un second contrôleur DMA 8237, fournissant ainsi trois canaux supplémentaires (5 à 7 ; le canal 4 étant utilisé en cascade avec le premier 8237). Ces canaux étaient indispensables, comme l'ont démontré les conflits de ressources avec l'extensibilité accrue du XT par rapport au PC d'origine. La largeur de bus d'adresse étendue à 24 bits du DMA ISA lui permet d'accéder à 16 Mo de mémoire basse résolution. Le registre de page a également été recâblé pour adresser l'intégralité de l'espace d'adressage mémoire de 16 Mo du processeur 80286. Ce deuxième contrôleur a également été intégré de manière à pouvoir effectuer des transferts 16 bits lorsqu'un périphérique d'E/S est utilisé comme source et/ou destination de données (car il ne traite en réalité les données que pour les transferts de mémoire à mémoire, contrôlant sinon simplement le flux de données entre d'autres parties du système 16 bits, rendant ainsi sa propre largeur de bus de données relativement peu importante), doublant le débit de données lorsque les trois canaux supérieurs sont utilisés.
Pour des raisons de compatibilité, les quatre canaux DMA inférieurs restaient limités aux transferts 8 bits. Bien que les transferts mémoire à mémoire soient désormais techniquement possibles grâce à la libération du canal 0, auparavant dédié au rafraîchissement de la DRAM, leur intérêt pratique était limité par le faible débit du contrôleur, comparé aux performances du processeur (un 80286 16 bits optimisé fonctionnant à au moins 6 MHz, contre un contrôleur 8 bits limité à 4,77 MHz). Dans les deux cas, le problème de la limite de segment de 64 ko persistait : les transferts individuels ne pouvaient pas traverser les segments (ils revenaient au début du même segment), même en mode 16 bits. En pratique, il s’agissait davantage d’un problème de complexité de programmation que de performance, car la nécessité de maintenir le rafraîchissement de la DRAM (quelle que soit sa gestion) monopolisant le bus environ toutes les 15 µs empêchait l’utilisation de transferts par blocs importants (et rapides, mais non interruptibles).
En raison de leurs performances en retard (capacité de transfert maximale de 1,6 Mo /s sur 8 bits à 5 MHz, mais pas plus de 80386 en 1985 et sa capacité de transferts 32 bits (même si les progrès considérables réalisés en matière d'efficacité du calcul d'adresses et des déplacements de blocs mémoire sur les processeurs Intel après le 80186 ont permis aux transferts PIO, même sur les bus 16 bits des 286 et 386SX, de surpasser aisément le 8237), ainsi que le développement d'évolutions ( EISA ) ou de remplacements ( MCA , VLB et PCI ) du bus « ISA » avec leurs propres sous-systèmes DMA bien plus performants (jusqu'à Sound Blaster , qui devaient maintenir une compatibilité matérielle totale avec la Super I/O sur les cartes mères, qui intégraient souvent un contrôleur de disquette , un contrôleur infrarouge IrDA en mode FIR (infrarouge rapide) et un contrôleur de port parallèle IEEE 1284 en mode ECP. Dans les cas où un processeur 8237 d'origine ou un compatible direct était encore utilisé, les transferts vers ou depuis ces périphériques pouvaient rester limités aux 16 premiers Mo de la mémoire vive , indépendamment de l'espace d'adressage réel du système ou de la quantité de mémoire installée.
Chaque canal DMA est associé à un registre d'adresse 16 bits et à un registre de comptage 16 bits. Pour initier un transfert de données, le pilote du périphérique configure les registres d'adresse et de comptage du canal DMA, ainsi que le sens du transfert (lecture ou écriture). Il ordonne ensuite au matériel DMA de démarrer le transfert. Une fois le transfert terminé, le périphérique interrompt le processeur.
L'E/S DMA vectorisée (ou dispersée) permet le transfert de données entre plusieurs zones mémoire au cours d'une même transaction DMA. Elle équivaut à l'enchaînement de plusieurs requêtes DMA simples. L'objectif est de décharger le processeur de nombreuses tâches d'interruption d'entrée/sortie et de copie de données.
DRQ signifie « requête de données » et DACK « accusé de réception de données » . Ces symboles, présents sur les schémas matériels des systèmes informatiques dotés de la fonctionnalité DMA, représentent les lignes de signalisation électronique entre le processeur et le contrôleur DMA. Chaque canal DMA possède une ligne de requête et une ligne d'accusé de réception. Un périphérique utilisant la DMA doit être configuré pour utiliser les deux lignes du canal DMA qui lui est attribué.
L'ISA 16 bits autorisait la maîtrise du bus.
Affectations DMA ISA standard :
PCI
Contrairement à l'architecture ISA, l' architecture PCI ne possède pas de contrôleur DMA central. Un périphérique PCI peut demander le contrôle du bus (« devenir maître du bus ») et demander l'accès à la mémoire système en lecture et en écriture. Plus précisément, un composant PCI demande la gestion du bus au contrôleur de bus PCI (généralement un pont hôte PCI ou un pont PCI-PCI ), qui tranche en cas de demandes simultanées de plusieurs périphériques, puisqu'il ne peut y avoir qu'un seul maître de bus à la fois. Une fois la gestion du bus accordée, le composant émet des commandes de lecture et d'écriture classiques sur le bus PCI, lesquelles sont alors gérées par le contrôleur de bus PCI.
Par exemple, sur un PC équipé d'un processeur Intel Core , le pont sud transmet les transactions au contrôleur mémoire ( intégré à la puce du processeur) via DMI , qui les convertit en opérations DDR et les envoie sur le bus mémoire. De ce fait, un transfert DMA PCI implique de nombreuses étapes ; toutefois, cela ne pose guère de problème, car le périphérique PCI, ou le bus PCI lui-même, est nettement plus lent que les autres composants (voir la liste des bandes passantes des périphériques ).
Un processeur x86 moderne peut utiliser plus de 4 Go de mémoire, soit en mode 64 bits natif ( architecture x86-64 ) , soit via l' extension d'adresse physique (PAE), un mode d'adressage 36 bits. Dans ce cas, un périphérique utilisant l'accès direct à la mémoire (DMA) avec un bus d'adressage 32 bits ne peut pas adresser la mémoire au-delà de 4 Go. Le nouveau mécanisme des tampons doubles (nomenclature DOS/Windows), également appelés tampons de rebond ( FreeBSD /Linux), ou en faisant appel à une unité de gestion de l'interface réseau ( IOMMU ) pour assurer la traduction d'adresses, si elle est présente.
I/OAT
À titre d'exemple de moteur DMA intégré à un processeur généraliste, certains chipsets Intel Xeon intègrent un moteur DMA appelé I/OAT (I/O Acceleration Technology ), capable de décharger le processeur principal des opérations de copie de mémoire, le libérant ainsi pour d'autres tâches. En 2006, Andrew Grover, développeur du noyau Linux chez Intel, a réalisé des tests de performance utilisant I/OAT pour décharger les copies de trafic réseau et n'a constaté qu'une amélioration de 10 % maximum de l'utilisation du processeur lors de la réception de données.
DDIO
Des améliorations supplémentaires axées sur les performances du mécanisme DMA ont été introduites dans les processeurs Intel Xeon E5 grâce à la fonctionnalité Data Direct I/O ( DDIO ), permettant aux « fenêtres » DMA de résider dans les caches du processeur plutôt que dans la RAM système. Ainsi, les caches du processeur servent de source et de destination principales pour les E/S, permettant aux contrôleurs d'interface réseau (NIC) d'effectuer un DMA direct vers le cache de dernier niveau (cache L3) des processeurs locaux et d'éviter ainsi le coûteux accès aux données d'E/S depuis la RAM système. Par conséquent, DDIO réduit la latence globale de traitement des E/S, permet un traitement intégral des E/S dans le cache, évite que la bande passante/latence de la RAM disponible ne devienne un goulot d'étranglement et peut réduire la consommation d'énergie en permettant à la RAM de rester plus longtemps en mode basse consommation.
AHB
Par conséquent, les périphériques à large bande passante, tels que les contrôleurs réseau qui doivent transférer d'importants volumes de données vers/depuis la mémoire système, disposent de deux adaptateurs d'interface pour l'AHB : une interface maître et une interface esclave. En effet, les bus intégrés comme l'AHB ne prennent pas en charge la mise en haute impédance du bus ni l'inversion du sens de circulation d'une ligne. À l'instar du PCI, aucun contrôleur DMA central n'est requis, le DMA étant maître du bus. Toutefois, un arbitre est nécessaire en cas de présence de plusieurs maîtres sur le système.
En interne, un moteur DMA multicanal est généralement présent dans l'appareil pour effectuer plusieurs opérations de dispersion-rassemblement simultanées , conformément à la programmation du logiciel.
Cellule
Le DMA en cellule est entièrement cohérent avec le cache (notez toutefois que les mémoires locales des SPE utilisées par le DMA ne fonctionnent pas comme un cache globalement cohérent au sens standard ). En lecture (« get ») comme en écriture (« put »), une commande DMA peut transférer soit une zone de blocs unique d'une taille maximale de 16 Ko, soit une liste de 2 à 2 048 blocs. La commande DMA est émise en spécifiant une paire d'adresses : une adresse locale et une adresse distante. Par exemple, lorsqu'un programme SPE émet une commande DMA « put », il spécifie une adresse de sa propre mémoire locale comme source et une adresse de mémoire virtuelle (pointant vers la mémoire principale ou la mémoire locale d'un autre SPE) comme cible, ainsi qu'une taille de bloc. Selon une expérience, les performances de pointe effectives du DMA en cellule (à 3 GHz, sous trafic uniforme) atteignent 200 Go/s.
puces de contrôleur DMA
- Intel 8257
- Am9517
- Intel 8237
- Z80 DMA
- LH0083, compatible avec le DMA Z80
- μPD71037, capable d'adresser une mémoire de 64 Ko
- μPD71071, capable d'adresser une mémoire de 16 Mo
pipeline
Les processeurs dotés d' une mémoire temporaire et d'un accès direct à la mémoire (DMA), tels que les processeurs de signaux numériques et le processeur Cell , peuvent tirer parti du chevauchement logiciel des opérations de mémoire DMA avec le traitement, via un double tamponnage ou un multitamponnage. Par exemple, la mémoire embarquée est divisée en deux tampons ; le processeur peut traiter des données dans l'un, tandis que le moteur DMA charge et stocke des données dans l'autre. Ceci permet au système d'éviter la latence mémoire et d'exploiter les transferts en rafale , au prix d'une nécessité de schéma d'accès mémoire prévisible .
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index