web-dev-qa-db-fra.com

Comment fonctionne DMA avec les périphériques PCI Express?

Supposons qu'un processeur souhaite effectuer un transfert de lecture DMA à partir d'un périphérique PCI Express. La communication avec les périphériques PCI Express est assurée par des paquets de couche de transaction (TLP). Théoriquement, la taille maximale de la charge utile est de 1024 mots doubles pour TLP. Alors, comment un contrôleur DMA agit-il lorsqu'un processeur donne une commande de lecture DMA au périphérique PCI Express d'une taille de 4 mégaoctets?)

17
spartacus

Dans la phase d'énumération PCIe, la taille de charge utile maximale autorisée est déterminée (elle peut être inférieure à la taille de charge utile maximale du périphérique: par exemple, un commutateur PCIe intermédiaire a une taille de charge utile maximale inférieure).

La plupart des périphériques PCIe sont des maîtres DMA, donc le pilote transfère la commande au périphérique. Le périphérique enverra plusieurs paquets d'écriture pour transmettre 4 MiB en segments TLP de taille xx max.

Modifier 1 en réponse au commentaire 1:

Un bus basé sur PCI n'a pas de "contrôleur DMA" sous la forme d'une puce ou d'un sous-circuit dans le chipset. Chaque appareil sur le bus peut devenir maître de bus. La mémoire principale est toujours un esclave.

Supposons que vous ayez construit votre propre carte de périphérique PCIe, qui peut agir en tant que maître PCI et que votre programme (fonctionnant sur CPU) souhaite envoyer des données de cette carte vers la mémoire principale (4 Mio).

Le pilote de périphérique connaît le mappage de mémoire pour cette région de mémoire particulière à partir du système d'exploitation (certains mots clés: E/S mappées en mémoire, énumération de bus PCI, BARRES PCI,).

Le pilote transfère la commande (écriture), l'adresse source, l'adresse de destination et la longueur au périphérique. Cela peut être fait en envoyant des octets à une adresse spéciale à l'intérieur d'une BAR prédéfinie ou en écrivant dans l'espace de configuration PCI. Le maître DMA sur les cartes vérifie ces régions spéciales pour de nouvelles tâches (listes de dispersion). Si tel est le cas, ces tâches sont mises en file d'attente.

Maintenant, le maître DMA sait où envoyer, combien de données. Il va lire les données de la mémoire locale et les envelopper dans des TLP de 512 octets de taille de charge utile maximale (la taille de charge utile maximale sur le périphérique de chemin < ---> la mémoire principale est connue à partir de l'énumération) et l'envoyer à l'adresse de destination.Les mécanismes de routage basés sur l'adresse PCI dirigent ces TLP vers la mémoire principale.

20
Paebbels