Wenn Sie haben ein System angelegt, wie Sie in Ihrer Frage vorschlagen, und CPU < -> Northbridge Bandbreite war der Engpass, dann ja vielleicht Sie Daten aus einem extrem hohen Bandbreite Gerät in den Arbeitsspeicher schneller mit DMA bekommen könnten als PIO. Es klingt plausibel, dass dies möglicherweise in manchen Systemen mit sehr schnellen Geräten im Verhältnis zur Verbindung der CPU mit der Außenwelt passieren kann.
Natürlich haben moderne x86-Systeme nicht einmal a Northbridge, weil der Speichercontroller auf dem Chip ist. Das macht die Frage nach der Computerarchitektur nicht ungültig, macht sie aber weniger relevant. IDK was andere Chips (wie ARM) tun. Da jedoch ein hohes Maß an Integration üblich ist (einschließlich SoC (System on Chip)), wäre ich nicht überrascht, wenn separate Northbridges auch aus der Nicht-x86-Welt verschwinden würden.
Der Unterschied zwischen PIO und DMA ist meist nicht über die die höchste Bandbreite erreichen kann, die aber verlangsamt das System mehr nach unten. Das mehr oder weniger vollständige Ausführen einer Kopierschleife belegt einen CPU-Kern für die gesamte Kopierdauer. Dies war ein noch größerer Deal vor Multi-Core-CPUs.
Eine Kopierschleife belastet auch Caches, aber dies kann mit speziellen Cache-Bypass-Anweisungen meist vermieden werden.
Auf x86 können die in
und out
programmierten E/A-Anweisungen nicht besonders gut pipeline. Sie sind nicht serialisieren wie CPUID
, aber they do drain the store buffer und sind nicht sehr freundlich zu Out-of-Order-Ausführung. Dies ist einer der Gründe, warum Speicher-Mapping-E/A mit regulären Lade-/Speicheroperationen gegenüber in
/out
für PIO bevorzugt wird. z.B. nur um IO-Register eines Geräts zu schreiben, um eine DMA-Übertragung zu initiieren, oder für kleine Transfers, bei denen DMA es nicht wert ist.
Der größere Unterschied ist in CPU-Auslastung, siehe meine Antwort. Auch 10 Byte Chunks? Es wird eine Potenz von 2 sein, wie 16 Bytes. Und 20 ms pro Transfer? Läuft Ihre CPU mit 1 kHz? 20 ms sind 32 Millionen DRAM-Taktzyklen für 1600 MHz RAM. Natürlich haben moderne x86-CPUs geteilte Busse für RAM und Geräte-I/O, weil sie den Speichercontroller auf dem Chip haben. Siehe das Diagramm auf http://arstechnica.com/information-technology/2015/08/the-many-tricks-intel-skylake-uses-to-go-faster-and-use-less-power/ welches das System anzeigt Agent vs. Speicherbus. –