Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11604043
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-06-08 03:38:19

但是,随着超线程技术的出现,多线程应用将逐渐在PC领域普及,对硬盘端排队能力的需求渐趋迫切,SATA Ⅱ本机命令排队可谓生逢其时。 FPDMA反客为主既然PATA DMA的总线从属性是命令排队有名无实的“元凶”,SATA Ⅱ本机命令排队就通过单方DMA(First Party DMA,FPDMA)的机制来解决这个问题。虽然继续了PATA的非对等“传统”,但SATA利用FPDMA促成主机控制器为排队命令的数据传输选择适当的目标或源物理内存区域(答应硬盘经由Scatter/Gather列表直接寻址)并初始化DMA引擎,进而可以自己安排传输数据的时间和顺序。为了实现硬盘与主机之间的数据和状态通信,SATA 1.0定义了三种类型的帧信息结构(FIS),分别是FPDMA Setup、DMA Active和Set Device Bits,SATA Ⅱ本机命令排队直接使用它们而无需修改现有SATA协议,不过增加了Read FPDMA Queued和Write FPDMA Queued这两条命令。 SATA Ⅱ本机命令排队答应支持和不支持该协议的硬盘连接在一个主机控制器上,当然更能够共存于同一磁盘子系统中。主机控制器驱动程序通过识别设备(Identify Device)功能检测硬盘是否支持SATA Ⅱ本机命令排队,本身还要支持Read FPDMA Queued和Write FPDMA Queued,因此必须做出相应的改动。
5月7日,Intel在WinHEC 2003会议上发布了高级主机控制器接口0.95版规范(Advanced Host Controller Interface,AHCI),为驱动程序和系统软件提供了发现并实施命令队列、热插及电源治理等高级SATA功能的标准接口。AHCI最终规范预计在2004年早期推出,而基于0.95版规范的AHCI SATA独立主机控制器则力争于2003年年底上市。 SATA在DMA方式上的改进,不仅避免了PATA命令排队的协议开销,还提高了无序数据传送的效率。由于PATA DMA的总线从属性和轮询间隔造成的等待,PATA硬盘只有在收到Service命令后,才能将数据写入缓存,然后整块传输;在SATA中,硬盘决定何时开始传输数据,也就是说,从盘片中读取数据后,不等主机完成读时序和置Service位启动DMA设置,马上就可以利用非零偏移(no-zero offset)数据传输。以磁头错过起始LBA的32扇区数据传输为例,SATA硬盘不是以无序数据传送方式将数据写入高速缓存,然后再启动32扇区DMA传输,而是建立一个部分DMA传输——譬如后16个扇区的DMA传输,等起始LBA旋转到磁头下方,硬盘马上发出针对前16个扇区的新一条Read FPDMA Queued命令。由于FPDMA可以充分利用无序数据传送,即使队列深度为1,SATA也可以提高性能。利用明显高于硬盘持续传输率的接口带宽,SATA能通过非零偏移FPDMA Setup先传输第一批数据扇区的数据,然后断开与主机控制器的连接避免无谓地占用带宽,待起始LBA到达磁头下方再启动第二个FPDMA Setup传输其余数据。这实质上就是利用了命令排队的功能,而且在数据传输过程中主机控制器也的确可以插入其他命令。 小结:(硬盘内部)命令排队的本质是什么?就是让硬盘来决定何时及以怎样的形式执行每一条命令以达到节省时间、提高效率的目的。可是在PATA中,硬盘只有排列命令顺序的能力,最要害的时间因素却把握在主机(控制器)手里,硬盘预备好的数据(往往)不能立即传输给主机,由此产生的无谓等待和命令开销很轻易地就将命令排队所能带来的优势化解为无形,接到命令立即执行成为了PATA硬盘的主旋律。SATA的FPDMA方式帮助硬盘“夺回”对时间因素的控制权,真正可以自主决定何时传输数据,是本机命令排队得以发挥作用的必要保障。 差距源于定位虽说看起来SATA Ⅱ本机命令排队比PATA要简洁高效许多,但那主要应归功于DMA方式的改变,命令排队本身的功能仍然受到了PATA“遗传”的局限,譬如排队命令与非排队命令不能混合使用、发生错误将导致硬盘放弃队列中的全部命令(主机必须治理恢复过程),不过与SCSI命令排队最大的区别还是队列类型及深度。 SCSI命令排队支持三种队列类型,分别是简单队列(Simple Queue)、有序队列(Ordered Queue)和队列头(Head of Queue)。ATA命令排队只是简单队列,即硬盘享有以任意顺序排列和优化命令的完全自主权。队列头属性赋予某一命令以优先权,让它排在某个现有队列的前头,以优先响应紧急的I/O请求。假如出现了新的更为紧急的I/O请求,只需发出相应的命令并赋予队列头属性即可,后进先出(LIFO)排序方案随后就会限定优先执行这一新的命令。不过,SATA Ⅱ本机命令排队虽然不能对队列排定优先级,但却可以发出一条虚拟的队列头命令来打乱现有队列,给新的命令让路——代价是队列中未完成的命令必须重新发送。有序队列要求以命令的接收顺序执行命令,杜绝了在硬盘内部调整执行时间和进行优化的可能性。作为SCSI命令排队中的特例,有序队列用于多启动程序(发起者)/多目标环境,启动程序忽然将必须严格遵守的命令排序方案发送给硬盘,随后就释放总线,直到满足该I/O请求为止。通过发送一个由上述三种类型队列组成的混合队列,SCSI命令排队可以提供比SATA Ⅱ本机命令排队更为强大的功能。至于队列深度的规定,ATA最大为32级,SCSI为256级,两种新兴的串行接口(SATA和SAS)也不例外。对于PC和入门级服务器、网络存储设备,SATA的32级深度已经足够,而SCSI面向的多主机/多设备应用环境则要求更深的队列深度。不过,由于队列越深(实现)成本也就越高,并且满深度利用队列时大量的待处理命令反倒可能成为性能瓶颈,因此并行SCSI硬盘通常“只能”达到64级深度。Marty Czekalski认为,多数SAS硬盘将采用支持128级深度的设计,从而与FC-AL硬盘相当。在单主机/单硬盘配置中,由于单主机产生不了足够的待处理请求,SCSI的队列深度得不到充分利用,只能靠主轴转速的优势提高性能。随着作业的复杂程度不断提高,SCSI的优势才愈加明显。虽然SAS 1.0的命令排队功能与并行SCSI相比没有什么变化,但是它却具有无需经过共享总线仲裁的优点,并可以利用串行点对点连接赋予的全双工能力在突发数据传输的同时反向接受命令,为命令排队功能提供了更为广阔的发展空间。本页部分内容改编自希捷科技TP-342号技术论文《全速命令排队》(2003年2月)为什么要排队?所谓命令排队(Command Queuing),通常包括两个层次的含义:首先,硬盘(缓冲区)内部能够容纳来自主机控制器的多条命令,待处理命令的数目即队列深度;其次,硬盘控制器可以重新安排这些命令的执行顺序,从而获得最大的输出。我们知道,硬盘是机、电、磁一体化的设备,其中动作最慢的机械部分是硬盘性能提升的瓶颈所在。硬盘的磁道是以主轴为圆心的一个个同心圆,当磁头悬停在磁道上方拾取数据的时候,机械动作的影响降至最低点(总不能让主轴不转吧?),相应地硬盘可以向外输出数据的流量也达到了最高的水平,即持续传输率(为简化问题起见,忽略磁道间切换的开销)。当然,由于外圈磁道长度占优,其传输率的数值也更高。高转速的硬盘通常在持续传输率上领先,譬如目前主流15000RPM SCSI能达到75MB/s~56MB/s(见表);7200RPM ATA由于盘片直径较大,外圈传输率也有61MB/s。这样的指标虽然比内存低两个数量级,但也还算说得过去。
然而在实际应用中持续传输很少出现,高端企业级计算更是如此。以
索引操作为例,对象在盘片上的分布位置并不连续,迫使磁头移动去读写一次只有几KB的小数据块,是典型的随机访问。磁头要先移动到数据所在磁道(寻道),然后再等待要读取的区块旋转过来(延迟),即使按照平均值(即平均访问时间,等于平均寻道时间与平均延迟时间之和)来计算,也要花费10ms左右的时间(以附表为例,SCSI读5.2ms,ATA读12.7ms),相比之下真正读取数据的时间几乎可以忽略不计(512字节只需几十μs)。假如是每次仅读取512字节的完全随机访问,硬盘输出数据的流量将骤降至0.1MB/s以下!事实上,每秒(随机)I/O操作的次数,即IOPS(I/O per second),早已成为衡量企业级存储设备性能的标准,这也是最高转速总是来自于SCSI硬盘的主要原因。毫秒级对微秒级,千倍左右的差距,无疑使优化机械部件的移动次序(随机访问操作)比提高电磁器件的响应速率(单纯拾取数据)更为重要,所以一定要对命令进行排队。典型ATA和SCSI硬盘的性能指标 光大祖业 奉子成婚——SAS与SATA-Ⅱ(图十七) 
阅读(1480) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~