インターフェースの転送速度に比べると、HDDの円盤からデータを読み出すスピードはずっと遅い。現在の7200回転/分の3.5インチHDDでは、円盤の最外周でも理論上の転送速度は90MB/秒程度。Ultra ATA/133の133MB/秒や第2世代Serial ATAの300MB/秒よりもはるかに遅い。

 そこで、HDDの開発には、途切れなくデータを転送する工夫が必要になる。その解決方法の目玉と言えるのが「NCQ(Native Command Queuing)」だ。

 Command QueuingはSCSIの世界で一足先に取り入れられたが、実はUltra ATAでも規格化されていた。しかし、手順が複雑なためか普及に至らず、Serial ATA Revision 2.5で新たにNCQが規定された。

合理的に処理できる順番を HDD自身が探して実行する

 HDD内部のどこに必要なセクターがあるかを知っているのはHDDのファームウエアだけだ。そこでホストは、コマンドを一通り先にHDDに知らせてしまい、HDD自身に最も合理的な順番でコマンドを処理させる。これがNCQの基本原理だ(図1)。

 コマンドを合理的な順番に並べ直す作業をコマンドの「Re-ordering」と呼ぶ。一度に受け取れるコマンドが増えると、Re-orderingの幅が広がり、効率も上がる。この受け取れる数が「Queue Depth(キューデプス)」だ。最大32コマンドのキューができ、性能向上に貢献している(図2)。

 NCQでは、ドライブ内部の無駄な動作を減らす仕組みに加え、インターフェース上でも無駄を省く工夫をしている。

 まず、一般的なコマンドのやり取りを理解しておこう。ホストは細かな付随情報とともにリードやライトのコマンドをHDDに伝える。コマンドを受けたHDDは必要なデータを転送し、最後にコマンドが完了したことをホストに通知する。この「コマンド受領」→「データ転送」→「ステータス通知」がやり取りの単位となっており、順番は崩せない。

 一方、NCQでは同時に複数のコマンドを実行する。1つひとつのコマンドはパラレルATAと同様に、コマンド受領・データ転送・ステータス通知の順序を保っているが、全体では複数のコマンドが入り乱れ、行き交うように見える。