IOMMU-Cache-Kohärenz

630
David

In den heutigen x86 / x64-Motherboards sind IOMMUs von Intel und AMD zu finden. Sie ermöglichen Peripheriegeräten, DMA-Operationen (Direct Memory Access, Direkter Speicherzugriff) im System-RAM unter Verwendung von virtuellen statt physischer Speicheradressen durchzuführen.

Nehmen wir nun an, dass das Peripheriegerät, das die DMA-Operation unter Verwendung der IOMMU ausführt, etwas Arbeitsspeicher zum Speichern des System-RAMs enthält, um die Verarbeitung von Daten, auf die häufig zugegriffen wird, zu optimieren. Wie kann in diesem Fall die Speicherkohärenz zwischen dem Cache des Peripheriegeräts und dem System-RAM sichergestellt werden? Wenn das Peripheriegerät einige Daten in seinem Cache ändert, ohne es in den System-RAM zurückzuschreiben, würde jeder Zugriff auf denselben Speicher von der CPU auf veraltete Daten zugreifen.

Die einzige effiziente Option, die ich sehen kann, besteht darin, dass das Peripheriegerät der IOMMU mitteilt, jede aus dem Arbeitsspeicher gelesene Seite für ungültig zu erklären, da diese Seite von diesem Moment an durch das Peripheriegerät zwischengespeichert würde. Immer wenn die CPU auf eine Seite zugreift, die zuvor vom Peripheriegerät gelesen wurde, wird ein Seitenfehler ausgelöst. Dementsprechend würde ein Seitenfehler-Handler dafür sorgen, die Seite aus dem Cache des Peripheriegeräts zu leeren und in den System-RAM zurückzulesen.

Ist so etwas überhaupt möglich? Insbesondere das kommende HSA-Programmiermodell lässt mich glauben, da eines seiner Hauptmerkmale ein einheitlicher Speicherplatz ist, der von den CPUs und den peripheren Recheneinheiten gemeinsam genutzt wird. Da diese Rechnereinheiten höchstwahrscheinlich über Caches verfügen, muss das Problem der Speicherkohärenz bereits angesprochen worden sein.

Danke für deine Hilfe!
David

1

0 Antworten auf die Frage