Direct Cache Accessについて理解を深める為、MCHのデータシートを読んでみる

Intel I/O Acceleration Technologyの構成要素で一番「!?」となったDirect Cache Accessについて、第一回 カーネル/VM探検隊@関西では調査不足で十分に説明出来てなかったので調べてみた。

元となる論文はこれなのだが:
Direct Cache Access for High Bandwidth Network I/O
正直なところ読んでもどう実装してるのか読むのが面倒で良く分からなかった。

実際に使える状態にあるのだから、絶対ハードのドキュメントに何か書いてあるだろ、と思って探してみた。

Intel® 7300 Chipset Memory Controller Hub (MCH) Datasheetの7.9章 Direct Cache Accessを読んでみる。

I/O DeviceからのDMAはDMA Write→Snoop Invalidate→(必要なら)Write-back→Memory Writeで完了して、あとはCPUからReadするというのが通常のフローのようだが、Snoopの時にMCHからCPUへヒントを送る事によって、Memory Write後にCPUからPrefetchをかけ、プログラムがデータにアクセスする前にキャッシュしてフェッチにかかるレイテンシを隠蔽するというのが現在の実装のようだ。
DCA

なので、I/O Deviceからキャッシュに直接データ転送している訳ではないし、メモリバスの帯域幅も節約していない。
論文や一部の説明ではそう読めるので、誤解していたのだが・・・。