Chinaunix
标题:
SATA全速命令队列(NCQ)技术详解
[打印本页]
作者:
sata5753
时间:
2008-05-28 16:34
标题:
SATA全速命令队列(NCQ)技术详解
命令都会被分配一个唯一的标记值,用来识别主机和硬盘之间所有待执行的命令。标记值的范围是 0 到 31 (硬盘可以支持小于 32 的队列深度 ),使所有命令的状态都可以用一个 32 位的值来报告。
队列与非队列命令之间的区别在命令发出后就显示出来了。当非队列命令发出后,硬盘传送相关的数据,清除状态寄存器中的忙碌位( 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 硬盘和主机硬件正在获得越来越广泛地使用。
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u2/69856/showart_713503.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2