|
队列深度 (QueueDepth) 对硬盘性能的影响
[复制链接]
在做性能测试的时候,主机端有时会成为瓶颈。 有时,可能即使弄了很猛的主机,但是
测试结果还是达不到最优,可以注意一下主机端对于挂过来的卷的 Queue Depth 设置。
下面的文章是将硬盘的 NCQ 技术的,有涉及到这方面的一些基础东西:
NCQ 技术深度解析:
纵观我们电脑中的储存设备,对机械设备驱动性能要求最强的当属硬盘了。机械设备所
固有的属性在很大程度上制约了数据的读取速度,从而影响了硬盘的性能。要想提升硬盘的
性能,我们通常会想到两个最为有效的方法:对硬盘机械的物理性进行改进和硬盘机械的流
程顺序添加智能化。
第一种有效方法的实现是以大幅增加产品成本为代价的;而第二种则不同,产品成本的
增加在大规模生成的时候几乎可以忽略不计。而本文所要讨论的命令排序就是属于第二种有
效提升硬盘性能的技术。 NCQ 技术为 SATAⅡ规范中重要组成部分,也是 SATAⅡ唯一对性能
有关系的技术。 NCQ 为 Native Command Queuing(本地命令队列) 的缩写,其实它仅仅是在
以前运用于 SCIS 的 TCQ(Tagged Command Queuing)技术改进而来得。好了,闲话就不多说了。
让我们一起进入 NCQ 的旅程中。
NCQ、 SCSI TCQ、 PATA TCQ 和 SATA TCQ 四者的关系:
当读者看到 TCQ 的时候,可能会感到有些陌生。 TCQ 和本文所要谈的 NCQ 相同,也是
一种命令排列技术,而且从严格意义上来讲, NCQ 技术也就是在 ATA TCQ 技术上改进而来的,
两者同样支持 32 级的命令深度,但是 NCQ 对 ATA TCQ 在技术上存在的缺陷进行了改进从而
与 TCQ 相区分。
说到这里,我们要对"命令深度"进行一下简单的说明,其实这个概念很简单,它就是指
硬盘需要处理的寻址命令的个数;而下面我们提到的"命令深度级数"就是将"命令深度"具体
化,比如 NCQ 最高可以支持命令深度级数为 32 级,那么换句话说就是, NCQ 可以最多对
32 个命令指令进行排序。接着上面说,我们需要注意的是, NCQ 为 SATA 专有的技术而 TCQ
的运用范围就较广了——TCQ 运用在 SCSI 硬盘和 PATA 硬盘上。其实, TCQ 最初是使用在 SCSI
硬盘上,而 PATA TCQ 也就是在 1997 年才被加入到了 ATA/ATAI-4 规范中。 ATA TCQ 与最初
使用在 SCSI 硬盘上的 TCQ 存在了很大的差别:首先, SCSI TCQ 支持三种队列类型,他们分
别是简单队列( Simple Queue)、有序队列( Ordered Queue)和队列头( Head of Queue)而
ATA TCQ 仅仅支持简单队列( Simple Queue),这样的设计还是很合理的,毕竟简单队列是最
为常用的队列排序,在高端服务器上当命令深度达到 256 级的时候其余两者队列排序也很难
用到,更何况 ATA TCQ 和 NCQ 都定位在主流市场,最大命令深度只能支持到 32 级呢。其次,
SCSI TCQ 在队列深度上能够支持 256 级而 ATA TCQ 只能支持到 32 级,支持队列深度越高其
造成成本也就越大——硬盘缓存的提升是必不可少的,在支持 NCQ 技术的硬盘上全部采用
了 8M 或者更多的缓存上可以看见,而且如果当深度过大会造成大量指令等待执行,反而会
造成系统的瓶颈,所以定位于主流市场的 ATA TCQ和 NCQ支持 32级命令深度已经很合适了;
再其次,当 ATA TCQ 出现错误的时候,将会导致硬盘放弃队列中的全部指令而等待主机对其
进行重新管理和恢复,并且排队指令与非排队指令不能混合使用。那么排队指令与非排队指
令不能混合使用会给我们的性能带来哪些影响呢?显然,硬盘对命令指令的排序需要时间的,
当命令深度级数不是很大的时候可能这个排序的时间很短,但是随着命名深度级数的增大,
这个时间就会显得尤为突出。在有的情况下,系统对数据的请求对应硬盘的 LBA 是连续的,
此时并不需要对命令指令进行排序就可以达到排序后的效果,这样就为系统争取到了宝贵的
时间使得性能得以提升。 SCSI TCQ 技术支持该功能显然比 ATA TCQ 不支持要强劲,毕竟它定
位不同。
而 PATA TCQ 与 SATA TCQ 的关系就更为密切了。众所周知,现有的 SATA 硬盘可以分为
两大类——本地 SATA( Native SATA)和桥接 SATA( Bridge SATA),而本地 SATA 对应了 NCQ;桥接 SATA 对应了 SATA TCQ。在前文我们已经提到,在 1997 年业内厂商便把 PATA TCQ 加入到了 ATA/ATAI-4 规范中,而纵观 ATA 时代的产品也就只有 IBM 硬盘支持该技术。造成这种情况的原因主要有两个:( 1)当时的 Intel 并不支持超线程技术;( 2)当是绝大多数的软件都是绝大多少属于同步 I/O 软件,也就是说程序的 I/O 功能的再次调用直到上次实际的 I/O 操作的完成后才进行,这样在硬盘中仅仅只有一个命令而再将命令排序执行就没有什么意义了。但随着 Intel 的超线程技术的普及和应用环境的多任务化,以及异步 I/O 软件的大量涌现,市场对于命令队列技术有了需求。而且现在已经是 SATS 结构时代,于是 SATA TCQ 便应运而生了。我们都知道,桥接 SATA 硬盘上有一颗桥接芯片,该芯片除了提供将串行数据转换成为并行数据的功能外,有些还可以支持 TCQ 技术(如, Marvell 88i8030 桥接芯片),只要再有一块硬盘控制器便能够实现对 TCQ 技术的支持,所以 SATA TCQ 的产生和发展也就成为必然了。可能这时读者会说到, PATA TCQ 与 SATA TCQ 就是一回事。不错, PATA TCQ 与 SATATCQ 原本就是一回事,只是硬盘的接口不同而已。支持队列类型 队列深度 排队指令与非排队指令混用SCSI TCQ 简单队列、有序队列、队列头 256 级 YESPATA TCQ 简单队列 32 级 NOSATA TCQ 简单队列 32 级 NONCQ 简单队列 32 级 NO小知识:三种队列比较( 1)简单队列( Simple Queue)是最为常用的一个技术,属于本地命令排序技术,是三种队列类型中性能最高的一种;( 2)有序队列( Ordered Queue)则与简单队列( Simple Queue)不同,其属于主机命令排列技术——命令指令可以在硬盘控制器方面进行一次排序,等指令到了本地设备的时候将会调用简单队列( Simple Queue)对前面的一次排序进行矫正,这样可以缩短简单队列( Simple Queue)在本地对命令指令排序的时间;( 3)队列头( Head of Queue)则可使一个系统在接口内重新安排命令顺序和重新确定某些命令的优先级,和有序队列( Ordered Queue )一样,当指令到达本地以后还是会调用简单队列( Simple Queue)对其排列的指令进行矫正。揭开命令排队的秘密在我们了解硬盘的 NCQ 技术以前,有必要对硬盘读写数据的过程进行简单的了解。当我们需要调用硬盘上的某个数据的时候,硬盘将会依次做出如下反映:寻找该数据的目标磁碟( platter,每个硬盘所拥有的磁碟数量不同)并且访问该磁碟,然后开始寻找该数据的目标磁道( track)找到后对其进行访问,下一步则寻找该数据的目标簇( cluster),然后在该簇内寻址该数据的目标扇区(sector),最后我们的数据就可以在目标扇区中被找到并且传送给硬盘控制器。当我们向硬盘写入数据的时候与数据的读取相同。可以看出,平时一个看似很简单的读取数据在实际的操作中是很复杂的。如果当我们使用异步 I/O 向硬盘提取或者写入数据的时候(使用具有 HT 技术的处理器或者多任务软件的时候可以出现这样的情况),我们的硬盘缓存中就可能同时存在了两个或者两个以上的命令等待操作。而往往这些指令所对应的数据分布到了硬盘的不同地方,要完成这些命令的读取就得依次对这些命令进行执行,这样问题就出现了!为了能够清楚的阐述这个问题,我们引入具体的事例为大家说明。我们可以将硬盘上所存储数据的逻辑块地址(LBA, Logical Block Address)当作是一个地区内的你几个朋友地的房子,作为磁头的你在一天中受到几个朋友的邀请去"做客"。如果你不懂得安排,那么你就可能会按照收到请帖的顺序对朋友进行访问,这个时候你就可能会沿着绿房子→蓝房子→橙房子→红房子的顺序去朋友家做客(如图 1 所示);但是如果你知道安排的话,就会提前想想几个朋友家的具体位置,计划出一个行程表,此时你就会沿着绿房子→红房子→蓝房子→橙房子的路线去朋友家做客了(如图 2 所示)。显而易见,采用安排的方法可以为你节约大量的时间。而 NCQ 就是那一张神奇的行程表的自动生成器——当硬盘接收到软件发出的数据请求的时候, NCQ 技术可以按照数据的逻辑块地址的位置进行重新的排列,避免出现那种不科学的访问方法。显然,经过重新排序以后可以大大减少了磁头臂来回移动的时间,使数据读取速度更快。但是需要提醒大家的是,并不是只要使用了具有 NCQ 技术的硬盘就可以使系统的性能有较大幅度的提升,出现这种现象的原因是由于应用软件的模式所造成的。就目前的应用软件而已, 绝大多少属于同步 I/O 软件,也就是说程序的 I/O 功能的再次调用直到上次实际的I/O 操作的完成后才进行,这样在硬盘中仅仅只有一个命令而排序就无从谈起。为了大家能够更清楚的理解,我们接着上面的事例继续给大家讲述。你仍然作为"磁头"去几个朋友家"做客",但是此时的情况与上次就不同了——当一个朋友向你发出请求的时候,其余的朋友会保持"沉默",直到你已经从朋友那里回到家以后,第二个朋友才开始向你发出邀请,依此类推下去。这个时候,你在同一段时间中就只有一个"任务",根本谈不上安排。而当我们使用了具有 HT 技术的处理器或者异步 I/O 软件的时候情况就不同了, HT 技术或者异步 I/O 软件具有允许多个线程并发运行能力,可以让多个应用程序或者同一个程序同时向硬盘发出数据的请求,使得 NCQ 派上用场。随着超线程技术的普及和操作系统越来越多的运用到多线程软件,相信 NCQ 技术将会给我们带来意想不到的惊喜。另外,由于 NCQ 技术可以减少磁头来回做出不必要的移动,所以对于增加硬盘寿命也是很关键的。ATA TCQ VS NCQ由于 ATA TCQ 是一种非对等的协议,所以在命令中有一条 Service 命令。作为一种非对等协议,硬盘自然不能主动与硬盘控制器进行联系,必须由硬盘控制器定期对其询问。如果当硬盘接收到应用程序发出的两个或者两个以上请求的时候,这时硬盘必须通过设置 Service和标签来通知硬盘控制器。当硬盘控制器发现 Service 位后,就会发出一条 Service 命令,以便将硬盘将已找到的数据写入缓存进行传输。这样的数据传输的模式使硬盘完全失去了自主性,本来数据已经可以写入缓存进行传输,但是需要等待硬盘控制器的 Service 命令,所以NCQ 技术通过减少磁头来回移动所争取来的时间轻易被抵消掉。工程师们清楚地发现了这
|
|