SATA全速命令队列(NCQ)提⾼性能
chestnuts⾼层建筑的电梯与硬盘技术 SATA 接⼝全速命令队列( NCQ )之间有什么共同之处?⼆者都具有可靠、⾼效地输送能⼒,这使得这两种完全不同的运输机制,在技术上有了⾮常相似之处。在⾼层办公建筑内乘坐电梯。当⼯作⼈员和来访者进⼊电梯要去不同的楼层时,他们就按楼层按钮。当许多⼈在不同的楼层进⼊电梯,要去往不同的楼层时,电梯并不是按照按钮按下的顺序去停靠楼层,这种⽅法会给电梯的各种部件造成不必要的磨损,⽐如:钢索系统、刹车、液压系统、传动装置和导向轴等。对于许多乘客来说,当⼀部笨拙的电梯哼哼唧唧地从⼀层开到另⼀层,按照按钮按下的顺序停靠卸栽乘客时,会产⽣许多额外的等候时间。电梯最顺畅有效的运⾏顺序是,每次都运⾏到最近的楼层停靠,每次向反⽅向运⾏之前,先要到达最⾼或最低的停靠点。
硬盘的 NCQ 技术使⽤类似的⽅法来⾼效地安排和运⾏数据命令。没有 NCQ 的硬盘像笨拙的电梯⼀样效率低下,并会按照命令发送到硬盘的顺序来执⾏它们。有了 NCQ ,硬盘会考虑读/ 写头在盘⽚上的位置,然后决定最有效的命令执⾏顺序,像电梯⼀样,先将磁头移到最近的位置执⾏命令,再按照相同的⽅式到下⼀个位置。
smokescreen
更特别的是, NCQ 通过让硬盘在内部优化⼯作负荷或命令的执⾏顺序,从⽽提⾼了硬盘性能并延长了硬盘寿命。在硬盘内部,命令队列对命令进⾏智能重排,最⼤程度地减少硬盘的机械定位延迟,有助于改善⼯作队列的性能。这⼀点⾮常重要,因为在今天的计算机系统中,只有硬盘内的所有移动部件是机械装置,包括:磁头驱动臂、盘⽚等。
正是这种有效地对传输路径进⾏排序的能⼒,最⼤程度地减⼩了机械磨损降,优化了性能,使 SATA 硬盘与电梯技术有了相似之处。NCQ 为系统构建商提供了⼀种⽅法,可以轻松地将⽤于台式机的⾼容量 SATA 硬盘扩⼤到⽤于⾼性能 PC 机、⼯作站和初级服务器,⽽且只需为每 GB 容量⽀付不到 1 美元。
在“ SATA1.0 技术规范扩充版”引⼊的⼤多数先进特性中, NCQ 是⼀种命令协议,它能允许同⼀块硬盘在同⼀时间有多个待执⾏命令。 NCQ 有⼀个待执⾏命令的内部队列,该队列与跟踪待执⾏命令和已完成⼯作的机制⼀起,对队列中的命令进⾏重新计划或排序。 NCQ 还允许主机在硬盘为另⼀个命
令查寻数据时,对硬盘发出附加命令。这样做的结果是减少了机械运动,降低了盘⽚的旋转延迟,提⾼了性能。
有这样⼏种⽅法来最⼤程度地减少旋转延迟。⼀种⽅法是部署更⾼转速的硬盘,⽐如具有10K 甚⾄更⾼主轴转速的 ATA 硬盘。然⽽,具有⾼ RPM 主轴转速的硬盘却价格昂贵。另⼀种⽅法就是根据硬盘磁头的旋转位置,确定下次应该执⾏的最佳命令,并对待执⾏命令重新排序。还可以使⽤⽆序数据传送⽅式来降低旋转延迟,这种特性不需要磁头⾸先去访问初始 LBA (逻辑块寻址)。磁头可以在⽬标 LBA 内的任意位置开始读取数据。当磁头定位在正确的磁道上⽅时,就开始读取数据,错过的数据待磁盘旋转回来后再补上即可;⽽不需要为回到被请求数据的第⼀个 LBA 上⽅进⾏旋转。
NCQ 通过在较少的磁盘旋转中处理更多的 IOPS 来减少旋转延迟。结果是在繁重⼯作负荷中,有更多的 IOPS 被处理了。 NCQ 是动态的,⼯作负荷越重,硬盘性能越⾼。
当明显需要对待处理命令重新排队以减⼩机械负担,改善输⼊ / 输出( I/O )延迟时,这样做要⽐简单地在队列中收集命令效果好。重排序算法使⽤⼀个被称为“基于寻道和旋转优化的命令重新排序”,或者称为标记命令队列( TCQ )的过程,优化了⽬标数据的线性和⾓度定位,从⽽最⼤程度地缩短总服务时间。命令队列减轻了机械负荷,降低了机械磨损,延长了硬盘寿命。 NCQ 是执⾏标记命令队列( TCQ )的⾼效协议。与 TCQ 不同的是, SATA NCQ 降低了队列算法导致的额外开销。 TCQ 没有在 ATA 硬盘中获得⼴泛采⽤的原因,是其所提⾼的性能被额外开销给抵消了。 SATA 通过采⽤⾼效的状态返回机制(⽆竞争)、低中断开销和第⼀⽅DMA 等技术,极⼤地降低了额外开销,上述这些技术是⽆法在 PATA 中实施的。
⽆竞争状态返回机制
psho
这⼀特性消除了传统上硬盘为了返回状态⽽与主机之间必须进⾏的“握⼿”过程,允许在任意时刻交流任意命令状态,使硬盘可以顺序或者同时完成多个命令。
一切顺利英文
中断聚合
硬盘为了完成⼀条命令通常会中断主机许多次。中断越多,主机的处理负担就越重,性能就越低。 NCQ 将处理每条命令的平均中断次数降低到了⼀次。如果硬盘在很短的时间内完成多条命令(这在⼯作负荷繁重时经常出现), NCQ 可以将单个中断聚合起来,这样主机控制器只需处理⼀个中断就可以了。
有限责任公司英文
第⼀⽅ DMA ( FPDMA )
NCQ 采⽤第⼀⽅ DMA 技术,使硬盘能够在没有主机软件⼲预的情况下,为数据传输设置直接内存访问( DMA )操作。硬盘通过向主机控制器发送⼀个 DMA Setup FIS (桢信息结构)来选择 DMA 内容。这⼀ FIS 为被设置的 DMA 指定了命令标记。主机控制器根据标记值,为该命令向 DMA 引擎内装载 PRD 表指针,然后,数据传输就可以在没有软件⼲预情况下进⾏,硬盘由于可以⾃⼰选择所传送的缓冲区,就能够更有效地对命令重新排序。
对 NCQ 的详细说明
NCQ 由三个主要过程组成:
在硬盘中建⽴⼀个命令队列
为每个命令传输数据
返回完成命令的状态
建⽴队列
法拉第电磁感应现象 当硬盘接到⼀个命令时,它需要知道是该将其放⼊队列,还是⽴即执⾏它,以及使⽤何种协议(⽐如 NCQ 、 DMA 或 PIO 等)来处理它。硬盘根据主机发送的特定的命令操作代码(opcode )来决定使⽤的协议。
为了使 SATA 能够利⽤ NCQ ,⼈们开发了两个特殊的 NCQ 命令: Read FPDMA Queued 和 Write FPDMA Queued 。这两个命令是对 LBA 和扇区计数命令的扩展, LBA 和扇区计数命令是为满⾜今天的⼤容量硬盘的需要⽽设计的。这些命令还包含了⽀持⾼可⽤性应⽤的 FUA (force unit access) 位。当⼀个 Write FPDMA Queued 命令的 FUA 位被设置时,硬盘会在标记该命令⽆错完成前将数据提交给介质。通过对写命令使⽤ FUA 位,主机可以管理硬盘内部缓存中还没有提交给盘⽚的数据。
resume模板 除此之外,每个进⼊队列的命令都会被分配⼀个唯⼀的标记值,⽤来识别主机和硬盘之间所有待执⾏的命令。标记值的范围是 0 到 31 (硬盘可以⽀持⼩于 32 的队列深度),使所有
命令的状态都可以⽤⼀个 32 位的值来报告。
五脉绿绒蒿花>begin什么意思 队列与⾮队列命令之间的区别在命令发出后就显⽰出来了。当⾮队列命令发出后,硬盘传送相关的数据,清除状态寄存器中的忙碌位( BSY ),并通知主机命令完成。当队列命令发出后,硬盘在将数据传输给主机之前就清除 BSY 位。这时, BSY 位的作⽤不是通知命令完成,⽽是通知主机硬盘已经准备接受新的命令。⼀旦 BSY 位被清除,主机就可以向硬盘发送其它队列命令,使硬盘内可以建⽴⼀个命令队列。
传输数据
NCQ 使⽤第⼀⽅ DMA 在硬盘和主机之间传输数据。第⼀⽅ DMA 特性让硬盘能够控制对DAM 引擎的编程以传输数据,使其可以以最有效的⽅式对命令重新排序,从⽽减少旋转延迟。由于在特定时刻,只有硬盘才知道磁头的⾓度和旋转位置,所以对于 SATA 来说,这是⼀项重要改进。硬盘控制了 DMA 引擎的编程,这样就可以选择使寻道和旋转延迟时间最⼩的数据进⾏传输。
第⼀⽅ DMA 通过使硬盘⽆序返回数据,进⼀步减少了旋转等待。该特性使硬盘可以先返回⼀条命令
的⼀部分数据,再发送另⼀条命令的⼀部分数据,然后再完成发送第⼀条命令的所有数据,前提是这样做是完成数据传输的最有效⽅式,这与智能电梯的运⾏⽅式⾮常相似。
状态返回
⽆竞争状态返回将多条命令的中断聚集起来,以提⾼性能。主机与硬盘协调⼯作,不需要通讯就能⽆竞争地返回状态,并且确保 32 位的 S A ctive 寄存器的内容在任何时间都保持准确,它是主机和硬盘为了确定哪些命令还未执⾏所需要使⽤的。 S A ctive 寄存器为每个标记分配了⼀个位,⽐如,第 x 位表⽰的是标记为 x 的命令的状态。 S A ctive 寄存器中的⼀个位,表⽰硬盘中对应标记的命令还未执⾏(或者与该标记对应的命令将被发送给硬盘)。从 S A ctive 寄存器中清除⼀位,意味着硬盘中与该标记对应的命令已经执⾏。
水獭英语 另⼀项重要的状态返回功能是, Set Device Bits FIS 能够在硬盘完成了多条命令后同时通知主机,这样就可确保主机在多条命令完成后只接受⼀次中断。如果⼀个请求队列在硬盘中建⽴起来,队列只对命令的重排序进⾏优化。在今天的台式机的⼯作中,许多应⽤在某⼀时刻只请求⼀块数据,只有在接收到前⾯的数据后,才会请求要后⾯的数据。在这种情况下,硬盘⼀次只能收到⼀条未执⾏命令。这样,由于不⽤重新排序,硬盘就不可能利⽤队列的优势。
然⽽,即使应⽤⼀次只发送⼀个请求,超线程技术也使建⽴队列成为可能。超线程技术能够对多个
同⼀程序的并发使⽤进⾏管理,极⼤地提⾼了多线程的数量,这样,在同⼀时间,就很可能有多个未处理的 I/O 请求出现。然⽽,为了利⽤队列的优点来获得最佳性能,需要对应⽤进⾏修改。
为了建⽴队列⽽需要对应⽤进⾏的修改并不⼤。今天,⼤多数应⽤在编程时采⽤同步 I/O ,也称为阻塞 I/O 。在同步 I/O 中,只有当对⽂件的读或写完成后,功能调⽤才会返回。为了利⽤队列,应⽤要采⽤异步 I/O 。异步 I/O 是⾮阻塞的,就是说在对⽂件的读写请求完成之前,功能调⽤就会返回。应⽤将决定是通过校验事件还是接收回叫( callback )来判断 I/O 是否完成。由于功能调⽤后⽴即返回,应⽤就可以继续做有⽤的⼯作,包括发出更多的读写⽂件指令。仅有硬件⽀持 NCQ 是不够的。操作系统和软件应⽤也需要向存储设备发送异步 I/O 命令来利⽤ NCQ 。硬件和软件 NCQ 可以降低硬盘产⽣的热量、改善系统可靠性并提⾼多种系统的 IOPS 性能,这些系统包括单硬盘的台式机和笔记本电脑,以及⼯作站和⼊门级服务器。
编写访问多个⽂件的应⽤的最佳⽅式,是使⽤⾮阻塞 I/O 调⽤同时发出所有⽂件访问命令。应⽤可以使⽤事件或回叫来确定各个调⽤何时完成。如果有很多 I/O 任务,⽐如 4 到 8个,同时将它们都发送出去可以将数据检索时间降低⼀半。
在主流计算系统中利⽤硬盘 NCQ 带来的性能优势⽅⾯,独⽴软件开发商( ISV )和操作系统供应商起着关键作⽤。 NCQ 对性能的提⾼主要表现在系统启动、应⽤装载和⽂件拷贝上。但是,当异步 I/O 被⼴泛地部署在软件应⽤和操作系统中时, NCQ 的性能提⾼将会扩展到所有计算应⽤上。 ISV 通过采⽤异步 I/O ,可以在优化各种计算机的性能上提⾼⼀⼤步,这些计算机包括:笔记本电脑、台式机、⼯作站和⼊门级服务器,在它们当中, NCQ 硬盘和主机硬件正在获得越来越⼴泛地使⽤。