NCQ(ネイティブコマンドキューイング)とは

ネイティブコマンドキューイング(NCQ)は、主にSATAハードディスクの性能を改善するために設計された機能です。ドライブが受け取った複数の読み書き要求(コマンド)を内部で最適な順序に並べ替えることで、不要なヘッド移動や回転待ちを減らし、同時に走る複数のI/O要求を効率良く処理できるようにします。これにより、特にサーバーや多重スレッド型のアプリケーションでスループットと応答性が向上することが期待できます。

仕組み(なぜ速くなるのか)

通常、オペレーティングシステムは到着順にディスクへコマンドを送りますが、ドライブ自身がコマンドの実行順序を賢く並べ替えられると、物理的なシーク距離や回転待ちを減らせます。NCQではこの並べ替え(再順序付け)がドライブ内で行われ、コマンドごとの優先度は同等で扱われます。ドライブ側が自分の性能特性(ヘッド位置、回転角度、キャッシュ状況など)を最もよく知っているため、この方式が有利になります。

歴史と他技術との比較

NCQは、以前のParallel ATAのタグ付きコマンドキューイング(TCQ)に先行する技術です。PATAでのTCQは、ISAバス由来のホストバスアダプタの制約やOS側のオーバーヘッドのため、市場で広く受け入れられませんでした。一方、SATAのNCQはインターフェース設計やドライバの進化により実用的になりました。

NCQやPATA TCQでは、インフライト(処理中)に保持できるコマンドの最大数が32(実際の有効数は31)と定められています。SCSIのTCQは仕様や実装によりはるかに大きなキュー深度をサポートでき、実装によっては数百〜数千のコマンドをインフライト可能です(実際の上限はデバイスやドライバによる)。

メリット

  • 複数同時アクセスがあるワークロードでスループットが向上する(データベース、仮想化、ファイルサーバなど)。
  • 不要なシーク回数が減るため、ドライブの摩耗を抑えられる可能性がある。
  • OSとドライブの役割分担により、CPUの余計な割り込みやオーバーヘッドを削減できる場合がある。

デメリット・注意点

  • 単一スレッドで連続したシーケンシャルアクセスを行うようなワークロード(多くのゲームや大きなファイルの連続読み書き)では、コマンドの再順序付けによって逆に待ち時間が増える場合がある。初期の実装ではこの影響が顕著でしたが、ドライブファームウェアやOS側の最適化で改善されてきています。
  • BIOSのSATAモードが「IDE互換」や「レガシー」になっているとNCQは利用できないことがある。AHCIモードに切り替える必要があるが、OSやドライバの対応を確認する必要がある。
  • RAIDカード経由や古いコントローラではNCQが正しく伝達されない場合がある。ベンダー仕様を確認してください。

サポートと有効化

NCQを利用するには、以下が満たされている必要があります:

  • SATAハードディスク自体がNCQをサポートしていること(ドライブ仕様書に明記されている)。
  • SATAホスト・バス・アダプタ(コントローラ)がNCQをサポートし、有効化されていること。
  • 適切なデバイスドライバがOSにロードされていること。

多くの現代的なチップセットはAdvanced Host Controller Interface (AHCI)をサポートしており、AHCI対応のドライバを使うことでNCQが有効になります。実際、多くのLinuxカーネルはAHCIをネイティブにサポートしています。Windows XPの時代は、AHCIが存在していてもベンダー固有のドライバのインストールが必要なことがありましたが、Windows Vista以降は汎用AHCIドライバが含まれ、状況は改善されています。

NCQとSSD、そして現代の流れ

NCQは磁気ディスク(HDD)の物理的なヘッド移動と回転遅延を最小化するための技術です。従って、フラッシュベースのSSDではアクセス原理が異なるため、NCQの恩恵は同じ形では現れません。SSDでは別のプロトコルであるNVMeが設計段階から高い並列性と大きなキュー深度をサポートしており、サーバー用途や高負荷環境ではNVMeの方が有利です。

実運用での目安

NCQの効果はワークロードによって大きく異なります。混在した小さいランダムI/Oが多い場合は明確に改善が期待でき、単純なシーケンシャル転送だけを行う環境ではほとんど変化がないか、わずかに悪化することがあります。導入時はベンチマークや実負荷試験で有効/無効の比較を行うことをおすすめします。

(補足)元のPATA TCQや初期のNCQ実装に関する「初期の欠点」は、ドライブやOSの進化によって多くが改善されてきました。現行のSATAドライブではNCQは標準的な機能の一つとして広く使われています。