DMA vs. programmierte E/A: Unterschiede im Überblick

Es gibt zwei Wege, Daten zwischen einem Gerät und dem Speicher zu bewegen. Bei der programmierten E/A (PIO) liest oder schreibt die CPU selbst jedes Wort über Register. Beim Direct Memory Access (DMA) bewegt ein DMA-Controller die Daten eigenständig, und die CPU richtet die Übertragung nur ein und wird benachrichtigt, wenn sie abgeschlossen ist. DMA entlastet die CPU und bewältigt große Übertragungen viel schneller, erfordert aber mehr Einrichtung und Sorgfalt.

AspektProgrammierte E/A (PIO)DMA
Wer die Daten bewegtDie CPU, Wort für Wort, mit Load- und Store-BefehlenEin DMA-Controller oder das Gerät selbst, direkt vom oder zum Speicher
CPU-LastHoch: Die CPU ist während der gesamten Übertragung beschäftigtNiedrig: Die CPU richtet die Übertragung ein und erledigt andere Arbeit
Durchsatz bei großen ÜbertragungenDurch die CPU-Geschwindigkeit begrenztHoch
EinrichtungsaufwandKeinerErfordert eine Adresse, eine Länge oder Deskriptoren und die Behandlung des Abschlusses
Kleine ÜbertragungenOft schneller, da keine Einrichtung nötig istDer Einrichtungsaufwand kann den Nutzen übersteigen
KomplexitätEinfachAufwendiger: Deskriptor-Ringe, Pufferausrichtung, Cache-Kohärenz und IOMMU-Einstellungen
Nutzung des SpeicherbussesÜber die CPUDie DMA-Engine konkurriert mit der CPU um Speicherbandbreite
Typische EinsatzgebieteKleine Steuerregister, einfache Sensoren, ältere PIO-ModiSSDs und NVMe, Netzwerkkarten, Audiopuffer, ADC-Abtastströme, GPU-Übertragungen

Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welches einsetzen

PIO
Wenn Übertragungen winzig oder selten sind und Einfachheit wichtiger ist als CPU-Zeit.
DMA
Wenn Übertragungen groß oder kontinuierlich sind und die CPU nicht blockiert werden soll: Speicher, Netzwerk, Datenströme.
Achtung
Stellen Sie bei DMA sicher, dass CPU-Cache und Speicher übereinstimmen, bevor das Gerät liest oder nachdem es geschrieben hat (Cache flushen oder invalidieren oder kohärenten Speicher verwenden).

FAQ

Warum verringert DMA die CPU-Last?

Ein DMA-Controller bewegt die Daten selbst, sodass die CPU die Übertragung nur einrichtet und benachrichtigt wird, wenn sie abgeschlossen ist.

Ist DMA immer schneller?

Nein. Bei winzigen Übertragungen kann der Einrichtungsaufwand den Nutzen übersteigen, und programmierte E/A kann schneller sein.

Was ist ein DMA-Deskriptor-Ring?

Ein Ring von Deskriptoren im Speicher, die jeweils einen Puffer beschreiben. Gerät und Treiber reichen darüber Puffer hin und her, wie bei Netzwerkkarten und NVMe-Laufwerken.

Warum ist Cache-Kohärenz bei DMA wichtig?

Das Gerät liest und schreibt den Speicher direkt, sodass der CPU-Cache veraltete Daten enthalten kann. Die Software muss den Cache flushen oder invalidieren oder kohärenten Speicher verwenden.

Wichtige Begriffe erklärt

DMA (Direct Memory Access)
Mechanismus, der Daten direkt zwischen Peripherie und Speicher überträgt, ohne die CPU zu durchlaufen. So kann die CPU bei großen Übertragungen andere Aufgaben erledigen.
Interrupt (Unterbrechung)
CPU-Mechanismus, der die laufende Aufgabe kurz anhält, um eine Anforderung, etwa von einem externen Gerät, zu bearbeiten, und danach zur ursprünglichen Aufgabe zurückkehrt.

Weitere Vergleiche