Alle Prozessoren der AMD-Familie 10h (einschließlich Barcelona und Istanbul) haben zwei verschiedene Hardware-Prefetcher.
-
Der erste ist der herkömmliche Daten-Cache-Prefetcher, der zusammenhängende Ströme von entweder aufsteigenden oder absteigenden Cache-Zeilenzugriffen erkennt. Sie kann deaktiviert werden, indem Bit 13 von MSRC001_1022 auf „1“ gesetzt wird.
-
Der andere Hardware-Prefetcher ist der "Speichercontroller-Prefetcher". Dies ist ein etwas allgemeinerer Prefetcher, der jedoch nur innerhalb des Speichercontrollers arbeitet (d. h. er sendet die vorab abgerufenen Daten nicht an einen Kern – er ermöglicht lediglich dem Speichercontroller, sie schneller zurückzugeben, wenn der Kern sie anfordert).
- Die primäre Steuerung für diesen Prefetcher befindet sich im PCI-Konfigurationsraum, Funktion 2, Offset 11Ch, mit zusätzlicher Steuerung in Funktion 2, Offset 1B0h für die Prozessoren nach Barcelona.
- Ich hatte Erfolg beim Deaktivieren und erneuten Aktivieren dieses Prefetchers auf einem "lebenden" Barcelona-System, indem ich die Werte im PCI-Konfigurationsbereich über den /dev/mem-Gerätetreiber aktualisierte. (Nicht zu Hause ausprobieren!)
- Die Aktivität des Speichercontroller-Prefetchers wird durch das Ereignis 1F0h des Hardwareleistungszählers mit den UnitMasks 02 und 04 angezeigt.
- Beachten Sie, dass der Speicher-Controller-Prefetcher für Shanghai/Istanbul/MagnyCours "kohärent" arbeitet (was bedeutet, dass Cache-Kohärenz-Test-Operationen zusammen mit den Speicher-Prefetches ausgegeben werden), während der Speicher-Controller-Prefetcher in Barcelona keine Cache-Kohärenz-Operationen ausgibt (sie werden erst ausgegeben, wenn die Anforderung des Kerns für die Cache-Zeile beim Speichercontroller ankommt).
Das obige Material ist im BIOS- und Kernel-Entwicklerhandbuch für Prozessoren der Familie 10h dokumentiert:http://support.amd.com/us/Processor_TechDocs/31116.pdf