Warum existiert CLFLUSH in x86?

8

Ich habe kürzlich von dem Angriff Row Hammer erfahren. Um diesen Angriff auszuführen, muss der Programmierer die komplette Cache-Hierarchie einer CPU für eine bestimmte Anzahl von Adressen löschen.

Meine Frage ist: Warum ist CLFLUSH in x86 notwendig? Was sind die Gründe für die Verwendung dieser Anweisung, wenn alle L * -Caches transparent agieren (d. H. Keine explizite Cache-Invalidierung erforderlich ist)? Abgesehen davon: Ist die CPU nicht frei, Speicherzugriffsmuster zu spekulieren und dadurch den Befehl insgesamt zu ignorieren?

    
Martijn 05.09.2016, 19:22
quelle

1 Antwort

6

Meistens für seltsame Sachen wie cachefähige MMIO-Regionen, denke ich.

Skylake hat CLFLUSHOPT mit einer schwach geordneten höheren Performance eingeführt, da es für nichtflüchtige Speicher nützlich ist, die direkt mit der Speicherhierarchie verbunden sind. Der Lösch-Cache stellt sicher, dass Daten in den tatsächlichen Speicher geschrieben werden und nicht immer noch in der CPU verschmutzt sind.

Es spielt möglicherweise auch für nicht-cache-kohärente DMA zu Geräten eine Rolle, wenn irgendetwas noch in x86 das tun kann. (Wahrscheinlich nicht; ich denke, alle DMA sind jetzt cache-kohärent.)

Ich bin diesbezüglich kein Experte, und das soll keine vollständige Antwort auf alle Anwendungsfälle sein.

    
Peter Cordes 05.09.2016, 19:56
quelle