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

Hans-Peter Bock Hans-Peter.Bock at isw.uni-stuttgart.de
Fri Oct 31 12:15:50 CET 2008


Hallo allerseits,

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.

Hier Ausschnitte aus dem Quelltext:

[...]
        char temp[26];

        src8 = ioremap(pci_resource_start(dev, 0), pci_resource_len(dev, 0));

        do_gettimeofday(&start);
        cstart = get_cycles();                  // rdtsc
        memcpy(temp, src8, sizeof(temp));
        cstop = get_cycles();                   // rdtsc
        do_gettimeofday(&stop);
[...]

Disassembliert sieht das ganze so aus:

 2c8:   e8 fc ff ff ff          call   2c9 <sercos_pci_init_one+0x158>
                        2c9: R_386_PC32 do_gettimeofday
 2cd:   0f 31                   rdtsc
 2cf:   b9 06 00 00 00          mov    $0x6,%ecx
 2d4:   89 44 24 1c             mov    %eax,0x1c(%esp)
 2d8:   89 54 24 20             mov    %edx,0x20(%esp)
 2dc:   f3 a5                   rep movsl %ds:(%esi),%es:(%edi)
 2de:   66 a5                   movsw  %ds:(%esi),%es:(%edi)
 2e0:   0f 31                   rdtsc
 2e2:   89 c3                   mov    %eax,%ebx
 2e4:   89 d6                   mov    %edx,%esi
 2e6:   8d 44 24 40             lea    0x40(%esp),%eax
 2ea:   e8 fc ff ff ff          call   2eb <sercos_pci_init_one+0x17a>
                        2eb: R_386_PC32 do_gettimeofday

Der memcpy() wird vom Compiler auf die Zeilen 2cf:, 2dc: und 2de: reduziert:

 2cf:   b9 06 00 00 00          mov    $0x6,%ecx                // counter auf sechs
 2dc:   f3 a5                   rep movsl %ds:(%esi),%es:(%edi) // sechsmal vier Byte kopieren
 2de:   66 a5                   movsw  %ds:(%esi),%es:(%edi)    // einmal zwei Byte kopieren

Woran kann die sehr hohe Übertragungsdauer liegen?

Grüße, Hans-Peter Bock
-- 
(°< Hans-Peter Bock, Dipl.-Ing., http://www.isw.uni-stuttgart.de/ >°)
(/) ISW - Universität Stuttgart, Seidenstraße 36, 70174 Stuttgart (\)



More information about the ag-automation mailing list