
コンピューティングにおいて、ネイティブ コマンド キューイング( NCQ ) は、シリアル ATAプロトコルの拡張機能であり、ハード ディスク ドライブが受信した読み取りおよび書き込みコマンドの実行順序を内部的に最適化できるようにします。これにより、ドライブ ヘッドの不要な移動量が削減され、複数の読み取り/書き込み要求が同時に発生するワークロードのパフォーマンスが向上します (ドライブの磨耗がわずかに減少します)。これは、サーバータイプのアプリケーションで最もよく発生します。
歴史
ネイティブ コマンド キューイングに先立って、パラレル ATAのタグ付きコマンド キューイング(TCQ) のバージョンが採用されました。ATA の TCQ 統合の試みは、ATA ホスト バス アダプタがオペレーティング システムと対話するためにISAバス デバイス プロトコルを使用するという要件によって制約を受けました。結果として CPU オーバーヘッドが高くなり、パフォーマンスの向上がほとんど見られなかったため、ATA TCQ は市場で受け入れられませんでした。
NCQ は TCQ と異なり、NCQ では各コマンドの重要性は同じですが、NCQ のホスト バス アダプタはコマンド シーケンス中にCPU から与えられたDMAパラメータを使用して独自のファースト パーティ DMAエンジンもプログラムしますが、TCQ はコマンド クエリ中に CPU に割り込んで、ATA ホスト バス アダプタのサード パーティ DMAエンジンを調整することを CPU に要求します。ドライブはパフォーマンス特性をより正確に認識し、回転位置を把握できるため、NCQ の実装の方が望ましいです。NCQ と TCQ はどちらも、未処理コマンドの最大キュー長は 32 です。[1] [2] ATA TCQ はほとんど使用されないため、パラレル ATA (および一部のチップセットの IDE モード) では通常、ポートごとに 1 つの未処理コマンドのみがサポートされます。
NCQを有効にするには、SATAホストバスアダプタとハードドライブ自体でNCQがサポートされ、有効になっている必要があります。ホストバスアダプタでNCQを有効にするには、適切なドライバをオペレーティングシステムにロードする必要があります。[3]
多くの新しいチップセットはAdvanced Host Controller Interface (AHCI) をサポートしており、これによりオペレーティング システムがチップセットを普遍的に制御し、NCQ を有効にすることができます。DragonFly BSD は2009 年の 2.3 以降、NCQ 対応の AHCI をサポートしています。 [4] [5] Linux カーネルはバージョン 2.6.19 以降、AHCI をネイティブでサポートしており、FreeBSD はバージョン 8.0 以降、AHCI を完全にサポートしています。Windows VistaとWindows 7も AHCI をネイティブでサポートしていますが、初期インストール時にコントローラ サポートが存在しなかった場合は、レジストリ編集によって AHCI サポート (msahci サービス経由) を手動で有効にする必要があります。Windows 7の AHCI では、NCQ だけでなく、SSDドライブ (サポート ファームウェアを使用)でのTRIMサポートも有効になります。Windows XPなどの古いオペレーティング システムでは、ホスト バス アダプターに AHCI が存在する場合でも、ベンダー固有のドライバーのインストール ( RAIDまたはSCSIコントローラーのインストールと同様) が必要になります。そのため、ほとんどのコントローラーがポートを AHCI–SATA/IDE/レガシー モードで混在させて操作できないため、初期セットアップが面倒になり、既存のインストールの変換が比較的困難になります。
ハードディスクドライブ
パフォーマンス
2004 年に行われた第 1 世代の NCQ ドライブ (Seagate 7200.7 NCQ) のテストでは、NCQ によって IOMeter のパフォーマンスは向上しましたが、デスクトップ アプリケーションのパフォーマンスは低下しました。[6] 2010 年のあるレビューでは、一連の Windows マルチタスク テストで NCQ を有効にすると、平均で約 9% の改善が見られました。[7]
NCQ はオペレーティングシステムのI/O スケジューラに悪影響を与え、パフォーマンスを低下させる可能性があります。[8]これは、実際にLinuxのRAID-5で確認されています。[9] NCQ には、他の要求を優先して要求を無視できる回数など、I/O の期限をホストが指定するメカニズムはありません。理論上は、キューに入れられた要求は、I /O のプレッシャー下で他の (おそらく新しい) 要求を処理している間、ドライブによって任意の時間だけ遅延される可能性があります。 [8]ドライブのファームウェア内で NCQ ディスパッチ順序付けに使用されるアルゴリズムは一般に公開されていないため、ハードウェア/ファームウェアのパフォーマンスに別のレベルの不確実性が生じます。2008 年頃に Google で行われたテストでは、NCQ によって I/O が最大 1~2 秒遅延される可能性があることが示されています。提案されている回避策は、低レイテンシのアプリケーションをタイムリーに満たすために、オペレーティングシステムが NCQ キューを人為的に早く空にすることです。[10]
2007年頃のWD Raptorなどの一部のドライブのファームウェアでは、NCQが有効になっていると先読みが無効になり、シーケンシャルパフォーマンスが低下します。[11]
SATAソリッド ステート ドライブは、並列ワークロードに対して複数のコマンドをキューに入れることができるため、大きなメリットがあります。PCIe ベースのNVMe SSD の場合、キューの深さがさらに増加し、最大 65,535 個のキューと、それぞれ最大 65,535 個のコマンドをサポートできるようになりました。
安全性(FUA)
NCQ のあまり知られていない機能の 1 つは、ATA TCQ の前身とは異なり、データがディスクのプラッタに到達したときに通知を受けるか、ディスクのバッファ (オンボード キャッシュ) に到達したときに通知を受けるかをホストが指定できることです。ハードウェア実装が適切であれば、この機能により、ディスクのオンボード キャッシュをfsyncなどのシステム コールと組み合わせて使用することで、データの一貫性が保証されます。[12]関連する書き込みフラグも SCSI から借用したもので、 Force Unit Access (FUA)と呼ばれます。 [13] [14] [15]
ソリッドステートドライブ
NCQは、ホスト側でドライブの遅延が発生する新しいソリッドステートドライブでも使用されています。たとえば、 IntelのX25-E Extremeソリッドステートドライブは、ホストシステムがCPUタスクの処理で忙しいときに、ドライブが処理するコマンドがあることを確認するためにNCQを使用しています。[16]
NCQ により、デバイスの内部構成でこのような処理が可能になっている場合、SSD コントローラはコマンドを同時に(またはパイプラインなどを使用して部分的に同時に)完了することもできます。
NVM Express(NVMe)規格も、SSDに最適化された形式でコマンドキューイングをサポートしています。[17] NVMeでは、単一のコントローラとデバイスに対して複数のキューが許可され、同時に各キューの深さが大幅に増加し、基盤となるSSDハードウェアの動作とより一致します。[18]
参照
参考文献
- ^ Intel と Seagate による NCQ に関する PDF ホワイト ペーパー
- ^ 「ATA-7 規格の最終草案第 1 巻」(PDF)。2012 年 2 月 6 日時点のオリジナル(PDF)からアーカイブ。2007 年 1 月 2 日に閲覧。
- ^ 「SATA II ネイティブ コマンド キューイングの概要」、Intel ホワイトペーパー、2003 年 4 月。
- ^ Matthew Dillon (2009-06-04). 「Re: DragonFly-2.3.1.165.g25822 master sys/dev/disk/ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h」。
- ^ Matthew Dillon (2009). 「ahci(4) — シリアル ATA 用の高度なホスト コントローラ インターフェイス」. BSD 相互参照. DragonFly BSD .
- 「ahci - シリアル ATA 用の高度なホスト コントローラ インターフェイス」。DragonFly オンライン マニュアル ページ。
- ^ 「Seagate の Barracuda 7200.7 NCQ ハードドライブ - The Tech Report - ページ 13」。The Tech Report。2004 年 12 月 17 日。2014 年 1 月 11日閲覧。
- ^ 「ネイティブ コマンド キューイングによるマルチタスク - The Tech Report - ページ 5」。The Tech Report。2005 年 8 月 3 日。2014年 1 月11 日閲覧。
- ^ ab Yu, YJ; Shin, DI; Eom, H.; Yeom, HY (2010). 「NCQ vs. I/O スケジューラ」ACM Transactions on Storage . 6 : 1–37. doi :10.1145/1714454.1714456. S2CID 14414608.[1]
- ^ 「ハードドライブ - NCQ による Linux ソフトウェア RAID 5 のパフォーマンス低下」。Server Fault。2014年 1 月 11 日閲覧。
- ^ Gwendal Grignou、NCQ Emulation、FLS'08 講演概要 (p. 109) スライド
- ^ 「Mark Lord: Re: NCQ を有効にすると HD 転送速度が低下する?」 LKML。 2007 年 4 月 3 日。 2014 年 1 月 11 日閲覧。
- ^ Marshall Kirk McKusick . 「ファイル システムの観点から見たディスク - ACM Queue」. Queue.acm.org . 2014 年 1 月 11 日閲覧。
- ^ Gregory Smith (2010). PostgreSQL 9.0: 高性能. Packt Publishing Ltd. p. 78. ISBN 978-1-84951-031-8。
- ^ http://www.seagate.com/docs/pdf/whitepaper/D2c_tech_paper_intc-stx_sata_ncq.pdf [裸の URL PDF ]
- ^ Jonathan Corbet (2010-08-18). 「ブロックバリアの終焉」LWN.net . 2015-06-27閲覧。
- ^ Gasior, Geoff (2008 年 11 月 23 日)。「Intel の X25-E Extreme ソリッド ステート ドライブ - シングル レベル セル フラッシュ メモリを搭載」。Tech Report。
- ^ Dave Landsman (2013-08-09). 「SATA Express デバイスのインターフェイスとしての AHCI と NVMe – 概要」(PDF) . SATA-IO . 2013-10-02に閲覧。
- ^ 「NVM Express の概要」nvmexpress.org . 2014 年 11 月 26 日閲覧。
外部リンク
- Lost Circuits のシリアル ATA とパラレル ATA の 7 つの大罪 (TCQ 向け)
- Tom's Hardwareの誇大宣伝と現実の分析
