« PCI ExpressのPIOリードの謎 | トップページ | Xeonのマシンの組み立て »

2013.04.13

PCI ExpressのPIOリードの謎(2)

昨日の、PIOリードのアドレスがバラバラになる件ですが、PCI ExpressのBAR空間をMmMapIoSpaceで仮想アドレスを割り当てるときに、

PVOID MmMapIoSpace(
  _In_  PHYSICAL_ADDRESS PhysicalAddress,
  _In_  SIZE_T NumberOfBytes,
  _In_  MEMORY_CACHING_TYPE CacheType
);

の第三引数MEMORY_CACHING_TYPE CacheTypeをどうするかで挙動が変わることがわかりました。

このタイプは、MmNonCachedか、MmCachedか、MmWriteCombinedなのですが、MmWriteCombinedにしておくとWriteは超高速になります。なお、MmWriteCombinedにしておくと書き込みアドレスの順序がバラバラになるのは仕方がないことです。

MSDNのドキュメントによればキャッシュに関してはMmWriteCombinedもMmNonCachedもキャッシュされないとあるので同じだと思うのですが、読み出したときの挙動は、

  • MmNonCached → 読み出しアドレスは順番
  • MmCached → 読み出しアドレスは順番
  • MmWriteCombined → 読み出しアドレスはバラバラ 2DWリードも発行される

でした。

MmNonCachedでアドレスが順番になるのはいいのですが、2DWリードが発行されないので、速度は遅くなります。あまりメリットはありません。

|

« PCI ExpressのPIOリードの謎 | トップページ | Xeonのマシンの組み立て »

コメント

コメントを書く



(ウェブ上には掲載しません)




« PCI ExpressのPIOリードの謎 | トップページ | Xeonのマシンの組み立て »