« PCI ExpressのDMA転送を改善する | トップページ | セキュリティキャンプの講師をしてきました »

2017.08.12

PCI Express 64bitでのDMA

PCI ExpressのBARを64bitにして、デバイスドライバで64bitのDmaAdapterをgetすれば、マップレジスタがエミュレーションされないのでデータのコピーが行われず、超高速になるのではないかと思い、実験してみました。

結果は大正解でした。

Speed_64

Read/Writeともに1.6GB/sほど出ています。PCI ExpressのBARが32bitだったときには1.0GB/s程度だったので、約1.6倍に高速化されました。この差は大きいですね。

sun

一つ一つの転送波形を見てみることにします。

まず、DMA WRの波形。

Dmawr_64

拡大してみてみると、256ns転送して32ns休むというサイクルになっています。

Dmawr_64_mag

256/(256+32) * 2GB = 1.7GB

なので、XDMAコアが出すAXIの最高速度はこのくらいです。

また、DMA RD(C2H)の波形ですが、2.4usくらいのサイクルの間に2.1usくらいの転送が行われているので、やはり1.7GBくらいとなります。

Dmard_64

Dmard_64_mag

PCI Expressの先にあるAXIの速度が1.7GBで、Windowsのアプリケーションで測った速度が1.6GBなので、ほぼフルの速度が出ていると考えてよいともいます。

sun

結論をまとめると、

  • PCI Expressを32bit BAR構成にすると、スキャッタギャザーDMAを実現するときにHALでデータコピーが発生するので遅くなる。約1.0GB/secしかでない。
  • 64bit BAR構成にすると、データコピーが発生しない。約1.6GB/secと、ほぼフルの速度が出る

また、64bit対応したPCI Expressカードならば、ドライバが巨大なコモンバッファを確保してくれるようになります。コモンバッファというのは物理アドレスで連続したページされないメモリ領域です。DMA転送などの用途にも使えます。

32bitだと8MBくらいしか取れませんが、64bit版だと4GBまで取れます。これだけでも、64bitのPCI Expressにする意義があるといえるでしょう。

XILINXのXDMAコアを使って、PCI Express Gen2 x4でバスの帯域2.0GB/sのところ、上り下りとも1.6GB/sまでできました。

|

« PCI ExpressのDMA転送を改善する | トップページ | セキュリティキャンプの講師をしてきました »

コメント

コメントを書く



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




« PCI ExpressのDMA転送を改善する | トップページ | セキュリティキャンプの講師をしてきました »