SATAの実効転送速度の測定
Spartan-6でSATAを使うべく、今日もIPコアを開発しています。
使っているのは、EXPARTNA-6TというFPGA評価ボード。(WebPACKで開発できる最大のデバイスであるXC6SLX45Tを中心に、DDR2 SDRAMや、PCI Express、USB-JTAGが乗っています。)
開発中のコアでSATA(1.5G)の機能がひととおり動くようになってきたので、転送速度を測定してみました。
いろいろなモードで、LBA=0x123456のセクタから64セクタを読み出して速度を比較してみます。
まずは、通常のPIOモードで試してみます。HDDにREAD SECTOR(S) EXTというコマンド(0x20)を送ります。要するに、何も工夫しない通常の読み出しモードです。
DataFISという信号が上がり下がりしているのが見えますが、1回の遷移で512バイトを送っていますので、8μ秒かけて512バイト送っていることになります。よって実効転送レートは64MB/s。意外と遅いのがわかります。
次に、READ MULTIPLE というコマンド(0xc4)。このコマンドは最大16個分のブロックを固めて送ってきてくれます。ただし、READ MULTIPLEの前にSET MULTIPLE MODEというコマンド(0xc6)を送って、何個のブロックを固めて送るかを設定しておかなければなりません。
このようになりました。
64セクタ(32768kバイト)分のデータが、237μ秒で転送できているのがわかります。よって、転送速度は138MB/seと計算できます。
最後にDMAモード。
DMAモードでも同じく64セクタ(32768kバイト)分のデータを転送します。
すると、

64セクタ(32768kバイト)をリードして転送するのに要した時間は234usでした。計算すると140MB/sとなって、PIOのマルチプルモードと比べてわずかに速くなりました。
まとめると、HDDからの読み出し速度は、
・PIO(単一)・・・64MB/s
・PIO(マルチプル)・・・138MB/s
・DMA・・・140MB/s
でした。
PIO(マルチプル)とDMAはほぼ同じ速度なので、SATAではDMAはいらない、ということも言えそうです。
もちろん、使用するHDDや読み出すセクタの位置によっても異なるでしょうが、目的は、SATAのリンクの実効速度を計ることです。SATAのバスの使用効率は約93%と、意外とよい結果となりました。
この結果が、皆様の何かのお役に立てば幸いです。
なお、この波形はシミュレーションではなく、FPGAの中にロジアナのIPコアを埋め込んで、MITOUJTAGを使って読み出している実機の動作波形です。

意外と知られていないかもしれませんが、MITOUJTAGは、バウンダリスキャンで端子の状態を見るだけではなく、ロジアナのコアを埋め込んでFPGAの動作速度で波形を取り込むこともできるのです。ChipScopeやSignalTAPのように。
I/Oの端子まで見える分、お得なのです。
| 固定リンク




コメント
いつも記事楽しみにしています。
投稿: | 2011.09.09 23:51