本机命令队列运行机制和性能分析
2010-01-13
作者:李 冬1,2,汪东升2,王耀才1
摘 要: 分析了FPDMA数据传输、队列读/写命令的动态运行机制、支持高速特性的队列和协议性能,给出了NCQ的性能优势和存在的问题。
关键词: 本机命令队列 运行机制 性能
本机命令队列NCQ(Native Command Queuing)[1]是SATAⅡ接口中引入的命令协议,是对SATA 1.0所做的诸多功能扩展中惟一与性能密切相关的技术。其原型是1998年发布的ATA/ATAPI-4的命令队列(CQ)技术。在PATA(Parallel ATA)中采用非对等轮询访问结构,其控制器计算能力弱,无法支撑复杂的最优化命令排序算法,致使基于CQ的应用性能改善和协议增加的开销相当。随着ASIC、串行技术、多线程和超线程系统等技术的发展,在SATA中引入NCQ用于增强磁盘整体性能的条件已经具备。
1 NCQ结构
1.1 工作模型
NCQ处理的对象是队列命令,核心是队列机制,包括创建、排队和在主适配器与盘体控制器的协调等,工作模型如图1[2]所示。模型分为两个功能相对独立的部分,它们通过串行总线交换数据,通过FIS(Frame Information Structure)来交换LBA、地址偏移、命令和状态信息。其中,标记Tag是一个重要的元素,在驱动器缓存中有一个含有Tag的命令队列,在主机控制器缓存中有与它对应的Tag标志位表,值域[0,n],其中n(≤31)是队列的深度,每一条命令都有惟一的标记值,应用于队列化命令的数据操作。
1.2 功能部件
NCQ主要由命令队列建立部件、数据传输部件和命令完成状态返回部件组成。其中命令队列建立部件的功能是使磁盘控制器按照命令协议(如NCQ、DMA、PIO等)的语义(OpCode)确定是把该命令送到队列排队(Tag有效)还是立即执行(Tag无效);数据传输部件使用FPDMA(First Parity DMA)传输机制完成驱动器和主机数据的传输;命令完成状态返回部件的功能是当数据读写操作命令发送或在数据传输完毕后,将磁盘命令的执行状态返回给主机。
1.3 命令格式
FPDMA包含RFQ(Read FPDMA Queued)和WFQ(Write FPDMA Queued)两条命令,命令格式见参考文献[2]。格式中的扇区计数寄存器包含的Tag由主机驱动程序指定,命令域区分为RFQ和WFQ(RFQ.Command=60h,WFQ.Command=61h),支持LBA模式和48位地址格式。
1.4 内部寄存器结构
把NCQ队列机制应用于系统时采用AHCI[5](Advanced Host Controller Interface)接口技术,适配器建立在PCI-HBA基础上,AHCI内部的寄存器由HBA寄存器和系统内存两部分组成。HBA寄存器从结构上又可分为AHCI-PCI配置空间寄存器和HBA内存寄存器。其中前者定义了与PCI接口的标准PCI寄存器,后者用于通用主机控制和端口控制,它们通过AHCI-BAR或PCI配置空间的寄存器BAR联系。AHCI系统内存通过端口00~31和控制寄存器相连,每个端口控制寄存器同时指向内存的Px命令列表基址(PxCLB)和Px FIS基址(PxFB)。其中Px命令列表系统内存是为包括命令信息和PRD表的命令表地址的命令列表结构设计的,Px FIS系统内存是面向接收端口的FIS结构设计的。
2 NCQ运行机制研究
由图1的工作模型和SATA磁盘模型,可以抽象出如图2所示的NCQ支持SATA磁盘的原理分析模型。其中的命令排队逻辑和算法包括命令的读取、命令分析、排队策略、算法代码等;FPDAM引擎任务处理单元包括从控制器获得命令、从高速缓存获得空间或数据、与SATA总线进行数据交换等;磁盘任务处理单元包括从控制器获得命令,执行磁盘的旋转、寻道和定位等操作,与高速缓存进行数据交换等。其中与NCQ运行直接相关的部分在图2中用重背景标出。
2.1 FPDMA运行
PATA在内存和硬盘之间采用Ultra DMA数据传输机制。SATA充分借鉴了PATA的技术思路,引入了一种新型的数据传输机制FPDMA,其运行原理如下:
(1)设置主机非页面化内存中的FPDMA矢量表,这个表有32个入口,每个表入口含命令分散/聚合列表的物理地址(PRD表),它们都与Tag数字相对应。其中队列化命令的分散/聚集列表是描述数据传输的主机内存结构。(2)驱动程序把主机控制器的队列表基址寄存器设置为FPDMA矢量表的起始物理地址,主机驱动器软件填充队列化命令的PRD表,并在向设备发布一条命令前适当设置FPDMA的矢量入口。(3)当主机控制器从设备收到一DMA设置FIS后,它将使用Tag域作为对FPDMA 矢量表的索引,并设置DMA引擎PRD指针到FPDMA 矢量表中的特定值,同时应用DMA设置FIS中的D位来设置DMA的传输方向。(4)进行FPDMA数据传输,并返回传输状态信息。
2.2 RFQ/WFQ
读操作(RFQ)是由主机向磁盘控制器发出的数据请求,主机驱动软件一旦发出读寄存器FIS,主机控制器的硬件将自主执行FPDMA操作,不需要主机驱动软件的参与,直到本条命令执行完毕(即捕捉到执行完毕的中断请求位SActive)。
写操作完成队列化的命令把数据写回驱动器,命令操作原理与读操作类似。
2.3 错误处理
在SATA协议栈中,每层都有错误发现、错误控制和错误报告恢复功能[4]。NCQ工作于传输层,其错误处理机制简单有效。
在主机发送给设备的寄存器FIS中,状态寄存器BSY位出现了错误,设备将传输一个设置了ERR、BSY和错误寄存器为适当错误代码的寄存器FIS到主机控制器;然后,设备等待地址为10h的日志页读日志扩展(Read Log Ext)命令(若收到主机发送的复位寄存器FIS,将立即停止等待)。当收到该命令后,设备控制器将放弃所有未执行的队列命令、清空队列,返回详细的错误信息,发送Set Device Bits FIS清除主机所有的Sactive寄存器位。至此,主机可以重新发送放弃的命令和新的命令。
3 NCQ工作性能分析
3.1 队列性能
3.1.1 队列分析
NCQ的核心是队列机制,关键是命令的执行次序排列和重排。在NCQ中,命令在队列中的分布是采用旋转位置排序(Rotational Position Ordering,RPO)算法实现的。具体的策略是综合考虑减少磁盘的寻道和旋转延迟,得到一个全局时间最短、执行最优的命令执行序列。另外,为适应磁盘随机动态存储,NCQ支持RPO动态重排命令序列,弱化命令存取位置的“震荡”,保证设备最优性能状态的鲁棒性。常用的减少寻道延迟的策略有SSTF(Shortest Seek Time First)[7]、SCAN[6]~[8]。这些算法都是基于面向企业高中端的SCSI队列TCQ(Tagged Command Queue)设计的。而SATA定位于桌面、移动存储、低端服务器和网络存储模型的近线和低端层次,所以队列性能、精度、时间抖动等要求相对低一些,加上控制器计算性能的大幅提高,算法的运行开销远远小于磁盘寻道和定位的代价。所以,在磁盘本体上,使用SSTF、SCAN和其改进算法对队列中的命令进行排序和重排序是完全可行的。
需要注意的是:SSTF和SCAN算法的依据一般是数据块的逻辑块号;而SATF计算的依据是物理块号,但由于操作系统没有磁盘结构的物理信息,所以该类算法实现起来相对复杂。改进的策略一是通过逻辑块号-物理块号之间的关系转换,二是使用“最近块数优先”近似。但它们都削弱了算法性能,增大了时间误差。
3.1.2 队列仿真比较
使用UTSA的磁盘头调度模拟器(DiskHead)[9]模拟上述主要队列算法的NCQ性能情况。DiskHead既是一个磁盘负载产生器,也是一个负载调度器,通过仿真配置脚本程序,可以产生两个不同的负载源。第一个负载源(L1)包括16个块访问,集中于低磁道区(100~2000磁道);第二个负载源(L2)也包括16个块访问,集中于高磁道区(10 000~14 000磁道)。然后把负载按照周期性和随机性组合成四种类型的混合负载,输入模拟器进行仿真。为了显示队列的优势,削弱CACHE的影响,尽可能加大了负载的密度和震荡。
鉴于SCAN算法每次要回归0道,所以需要把相应的寻道时间和访问时间去除掉。仿真结果如图3、图4所示。
从图3、图4看出,是否支持队列的命令重排对存储系统的性能影响很大,不同的负载特性对系统的性能影响也不尽相同。另外,排队算法对随机负载的性能要优于周期负载,请求排队能大大减少寻道时间,从而提高存储系统的整体I/O性能。
3.2 协议性能
NCQ属于一种“轻型”的接口协议。与PATA比较,协议的优化性能具体表现在:
(1)引入性能优于Ultra DMA和DMA的FPDMA简单传输机制,其初始化设置由主机驱动器软件完成,设备自动选择DMA状态参数,完成驱动器和主机数据的传输。在传输数据的过程中不需要主机驱动器软件的参与。
(2)协议队列空间调整采用类“滑动窗口”策略,设备与主机之间的握手相对“弱化”。设备方收到设备命令请求后,就立即返回复位BSY信号,从而保持命令发送窗口的大小,而不是等待请求完成才返回,这样为系统实现局部并行化提供了条件。这与PATA的设备请求“封闭”运行完全不一样,它的设备请求命令执行严格的握手程序,只有整个命令请求完成后才返回中断信号,系统在接收到中断返回后,才能继续下一条设备命令的执行周期。
(3)命令的排序在设备中完成,只要有新的设备请求命令被送入设备队列,设备就要启动一次排序算法进行重排序,保持命令序列执行策略的一致性。算法的结果形成一个命令执行索引表,该表包含了队列命令新的执行顺序和相关参数。
(4)Race-free状态返回机制实现了命令完成返回信息的高度管线化。NCQ允许各磁盘随时返回命令执行状态,特别是使用中断聚合把数条命令的中断聚合在一起,达到数个命令执行状态同时返回的效果。
通过对协议的改进和优化,减少了接口事务,降低了协议运行开销,提高了NCQ协议工作的性能。
4 结束语
NCQ是SATA设备请求命令的队列协议,它应用了队列智能重排序、协议流化、硬件自动FPDMA设置等技术,减少了主机和设备的握手次数和接口事务数量,提高了队列负载性能,减少了寻道和旋转延迟时间,使协议操作高效化,大大提高了SATA磁盘系统的性能。Intel的测试数据表明:使用基于AHCI的SATA HDD是ATA HDD综合性能的1.51倍[5]。尽管如此,NCQ还存在排队命令与非排队命令不能混合使用,一旦发生错误,硬盘将放弃队列中的全部命令,专用的接口协议AHCI发布滞后等不足之处。
参考文献
1 Huffman A,Clark J.Serial ATA Native Command QueuingAn Exciting New Performance Feature for Serial ATA.www.serialata.org,2003
2 Intel Corporation.Serial ATA Ⅱ Native Command Queuing Overview www.intel.com,Apr 2003
3 Intel Corporation.Serial ATA:Advanced Host Controller Interface(Revision 1.0).www.intel.com,May 2004
4 Taylor R.Serial ATA:Application Consideration for the Enterprise[S].www.agilysys.com,Apr 2004
5 Huffman A,Garzik J.AHCI-Take advantage of Serial ATA Features.IDF Fall 2003,San Jose,Sep 2003
6 Worthington B L,Ganger G R,Patt Y L.Scheduling for modern disk drives and non-random workload.In:Michael Ley proceedings.Perfarmance Evaluation Review22(1).proc ACM SIGMETRICS conf.Vanderbilt University,Nashviue Tennessee,USA,1994
7 Geist R,Daniel S.A Continuum of Disk Scheduling Algorithms.ACM Trans On Computer System,1987;5(1)
8 Thomasian A,Liu C.Some New Disk Scheduling Policies and Their Performance.In:Marina Del Rey,Proceedings of the International Conference on Measurements and Modeling of Computer Systems(SIGMETRICS 2002),California USA,2002
9 Robbins S.A Disk Head Scheduling Simulator.In:Proc.35th SIGCSE Technical Symposium on Computer Science Education,Norfolk Virgina,2004