[ag-automation] off-topic: Frage zu sehr langsamen PCI Zugriffszeiten

Florian Boelstler euphoria at arcor.de
Sat Nov 1 00:13:29 CET 2008


Hallo Hans-Peter

Hans-Peter Bock wrote:
> ich habe in einem Kernelmodul eine Kopierroutine, die 26 Byte aus einer PCI-Karte in den Hauptspeicher überträgt. Dieser Kopiervorgang dauert 7us oder 3407 CPU Takte bei 500MHz CPU Takt. Dies erscheint mir sehr langsam, da der PCI-Bus theoretisch alle 30ns vier Byte Daten übertragen kann.
> [...]
> Woran kann die sehr hohe Übertragungsdauer liegen?

Ich habe die Erfahrung mit unterschiedlichen PCI-Devices gemacht, dass
die theoretischen Datenraten -- wenn überhaupt -- nur mit großen Blöcken
 erreicht werden können.
Meiner Meinung nach ist der von Dir ermittelte für diese Blockgröße und
einem konventionellen 32-Bit breiten, mit 33 MHz getakteten PCI-Bus in
Ordnung.

Probiere mal größere Blöcke (ca. 64KByte) zu übertragen. In diesem Fall
solltest Du auf einem *ruhigem* Bus und DMA-Zugriff um die 100 MByte/s
erreichen können.
Aber:
Eine wichtiges Kriterium ist beim Lesen einen sog. Read-Line- bzw.
Read-Line-Multiple-Zugriff erzeugen zu können, was vermutlich mit
memcpy() ohnehin nicht klappen wird. Da die CPU den Block in separat
ausgehandelte 32-Bit-Zugriffe runterbricht.
Bei Embedded-Prozessoren verwendet man typischerweise einen integrierten
DMA-Controller, der Blockzugriffe erzeugen kann.
Alternativ könntest Du auch versuchen Deine PCI-Karte zu überreden, Dir
die Daten per Blockzugriff in den RAM schreiben zu lassen.

Evtl. vorhandene Bridge-Bausteine zwischen CPU und Karte (evtl. für PCIe
oder PCI-X)  können noch allerhand andere Schwierigkeiten bereiten,
welche die Datenrate weiter drücken.

Viel Erfolg!

Grüße

  Florian




More information about the ag-automation mailing list