キャッシュとデバイスには 2 つの問題があります。最初の問題は、基本的な機能の正しさの問題です。つまり、システムは通常、デバイスのメモリ マップド レジスタを、キャッシュを完全にバイパスするアドレス範囲に配置する必要があります。これが起こらず、キャッシュが「邪魔」だったと想像してみてください。その場合、デバイスのステータス レジスタを読み取ろうとするソフトウェアは、代わりにキャッシュによって提供された古い値を読み取ってしまいます。デバイス ドライバーが動作するように頑張ってください。一部の CPU は、キャッシュできないアクセスに対して特別な命令を提供しますが、基本的な結果は同じで、キャッシュは利点を提供せず、デバイス メモリを処理するときに問題を複雑にするだけです。
2 つ目の問題は、メモリでダイレクト メモリ アクセス (DMA) トランザクションを実行できるスマート デバイスのパフォーマンスの問題です。デバイスが DMA 書き込みを実行すると、システム内のハードウェア バス ロジックは、MESI プロトコルに従ってキャッシュ ラインを CPU から完全にスヌープします。コアは、効率性のためにデータを近いキャッシュに保持することに強く依存しています。これで、デバイスはすべてのキャッシュ ラインをヤンクしたところです。これにより、次のソフトウェア アクセスで、コアはラインの高レイテンシ リロードを強制されます。CPU は共有状態のデータ ラインを回避することが多いため、通常は DMA 読み取りでも同じスヌーピングが発生します。
CPU 自体に統合されたデバイスは、キャッシュ ラインを CPU の最終レベル キャッシュに常駐させることができる場合があります。これは、CPU パッケージ外のデバイスに比べてパフォーマンスを大幅に向上させることができます。