Forum: PC-Programmierung Cache im x486


von Harper B. (harper)


Lesenswert?

Ich habe eine x486 Variante "AMD SC520" auf dem Tisch zu liegen. Auf dem 
Teil läuft ein Bootloader, der auch ein Windows CE starten kann.

Bei Performancetests habe ich festgestellt, dass der TFTP Download im 
Bootloader nur halb so schnell läuft wie im Windows CE. In beiden Fällen 
benutzt der Code den Ethernet-Controller direkt. Während des Donwloads 
erfolgt noch eine einfache Verarbeitung. Die Datei hat ca. 100 
Abschnitte, die jeweils die Zieladresse, Länge, Prüfsumme des Abschnitts 
und natürlich die Daten enthält.

Der Unterschied zwischen dem Bootloader und dem Prozess in Windows CE 
ist, dass der Bootloader zwar im 386 Protected Mode läuft, aber kein 
Paging eingeschaltet hat. Damit sind die Attribute, die sonst in die 
Page-Tabellen eingetragen werden nicht aktiv.

- Gibt es eine Möglichkeit, festzustellen, welche Caches aktiv sind?

- Ist Paging erforderlich, um die Cache-Möglichkeiten auszuschöpfen?

- Welche Einstellungen sollte ich vornehmen, um die Performance im 
Bootloader zu verbessern?

Ergänzen möchte ich noch, dass der Code für den TFTP Download im 
Bootloader und in der Windows CE Implementierung identisch ist. 
Unterschiede gibt es in der Bereitstellung des Download-Puffers auf den 
der TFTP Handler schreibt:
1
pDownload = VirtualAlloc(NULL, 0x1000000, MEM_COMMIT, PAGE_READWRITE);

Der DMA-Puffer ist in beiden Fällen im "normalen" Datenbereich. Für den 
Conroller wird die physikalische Adresse mit dieser Anweisung besorgt:
1
DWORD dwPages[2];
2
3
void *pBase = (void*)(((DWORD)pVirt) & 0xFFFFF000);
4
DWORD dwOffset = (DWORD)pVirt - (DWORD)pBase;
5
LockPages(pBase, uSize + dwOffset, (PDWORD)&dwPages, /*LOCKFLAG_WRITE*/1);

Die Flags im VirtualAlloc enthalten nicht PAGE_NOCACHE, damit ist Cache 
zugelassen.

: Bearbeitet durch User
von Nils S. (krumeltee) (Gast)


Lesenswert?

Das muss nicht unbedingt am Caching liegen. Ich vermute viel eher dass 
die Implementation des Bootloaders einfach nur anders, langsamer, 
implementiert wurde.

von Harper B. (harper)


Lesenswert?

Nils S. (krumeltee) schrieb:
> Das muss nicht unbedingt am Caching liegen. Ich vermute viel eher dass
> die Implementation des Bootloaders einfach nur anders, langsamer,
> implementiert wurde.

Ich hatte leider in der Frage nicht erwähnt, dass es derselbe Quellcode 
ist. Ich habe die Frage entsprechend erweitert.

von Robert L. (lrlr)


Lesenswert?

hilft das:

http://web.inter.nl.net/hcc/J.Steunebrink/amd5x86.htm

IMHO steht hier, wie man (mit Multimeter..) testet ob der L1 cache aktiv 
ist..

von Harper B. (harper)


Lesenswert?

Robert L. schrieb:
> hilft das:
>
> http://web.inter.nl.net/hcc/J.Steunebrink/amd5x86.htm

Leider nicht wirklich.

> IMHO steht hier, wie man (mit Multimeter..) testet ob der L1 cache aktiv
> ist..

Der Artikel beschreibt die Arbeit an eine Motherboard mit einem x486 und 
einem externen Chipsatz. Beim SC520 ist alles in einem Gehäuse. Da komm 
ich mit dem Vielfachmesser nicht ran.

von Konrad (Gast)


Lesenswert?

Du kannst ja erstmal die Hypothese "im Bootloader ist Cache inaktiv" mit 
irgendeinem Minibenchmark testen, der auf einstellbar paar wenigen KB 
Speicher herumtrampelt; wenn Caches aus sind, ist der bei 8K genauso 
schnell wie bei 32K; wenn Cache an ist, ist er auf kleinen Puffern 
schneller als auf grossen. ("schnell" meint da Laufzeit pro 
Speicherzugriff).

Dann: der Code sei der Gleiche: alles? Inklusive Ethernet-Treiber und 
IP-Stack? Oder nur alles oberhalb UDP-Sockets? Ich wuerde erwarten, dass 
in einem Bootloader der Ethernettreiber konservativ (zB nur PIO) 
implementiert ist und in WinCE Interrupts&DMA benutzt.

von Harper B. (harper)


Lesenswert?

Konrad,

Danke für den Tip mit Performancetest um die Cachethese zu überprüfen. 
Das werde ich machen.

> Dann: der Code sei der Gleiche: alles?
Ja.

> Inklusive Ethernet-Treiber und IP-Stack? Oder nur alles oberhalb
> UDP-Sockets?

Wie ich schon in der Frage geschrieben habe (In beiden Fällen benutzt 
der Code den Ethernet-Controller direkt.) ist die Implementierung aller 
Routinen bis hinunter zum Ethernetcontroller identisch. Ethernet, ARP, 
IP, UDP, TFTP und das proprietäre Protokoll sind identisch. Lediglich 
die Bereitstellung der DMA-Puffer erfolgt im Windows CE über LockPages 
währen im Bootloader durch das lineare Adressmodell keine 
Pagetableeinträge notwendig sind.

> Ich wuerde erwarten,
Nun, diesmal wird Deine Erwartung nicht erfüllt. Dieses können wir also 
ausschließen.

von User (Gast)


Lesenswert?

Und die CPU läuft im Bootloader auch schon auf soll-Clock?

von Harper B. (harper)


Lesenswert?

User schrieb:
> Und die CPU läuft im Bootloader auch schon auf soll-Clock?

Ja, der Bootloader aktiviert bereits die 133 MHz, bevor das erste Stück 
C-Code ausgeführt wird. Danach gibt's keine Änderung im CPUCTL Register.

von Harper B. (harper)


Lesenswert?

Der AMD Élan SC520 ist eine Variante des x486. Der Cache ist nach dem 
Reset ausgeschaltet. Um den Cache freizugeben muss das CD Bit in CR0 
zurückgesetzt werden. Damit sind eine Reihe von Operationen deutlich 
schneller, einschließlich des TFTP Downloads.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.