磁头数,现在的机械硬盘中一般都包含了多个盘片并且分别使用独立的磁头。这样做的主要作用是在硬盘密度不变的情况下增加机械硬盘的容量。实际上这样的做法也可以增加一定的硬盘性能,因为读取存储在不同磁面上的文件时,它们的寻道时间可以相对独立。但是其对性能的提示只能是有限的,因为这些盘片共享同一个主轴马达。
机械硬盘的工作原理导致了它的工作性能会远逊于内存,现在主流的7200转硬盘外部传输速度的理论峰值大概也就是200MB/s。那么问题又来了,天才的硬件工程师难道就没有办法增加机械硬盘读写性能了吗?
答案是否定的,硬件工程师为机械硬盘集成了缓存,并采用预读机制读取当前扇区的临近扇区。举个例子,当硬盘读取一个文件所在扇区时,会将这个扇区临近的若干扇区上的数据一同读取出来并存储到硬盘缓存中。这样做的原因是依据计算机科学中得一个著名原理:局部性原理。
局部性原理包括三层含义。时间局部性,如果一个信息项正在被访问,那么在近期它很可能被再次访问。空间局部性,在近期将要被使用的信息很可能与现在正在使用的信息在空间地址上是临近的。顺序局部性,在典型程序中,除转移类指令外,大部分指令是顺序进行的。局部性是所有高速缓存设计的基本原理依据。
说人话,局部性原理在硬盘硬件设备设计中被应用的依据是:当一个文件被读取时,在它临近扇区所存储的文件数据也将在近期被读取。所以硬盘会预先读取后者到缓存中,以便在不久的将来,这些数据被请求读取时直接从缓存中向外部设备输出文件数据。ibm ssd
局部性原理不止适合高速缓存这样的硬件设计,它也适用于软件设计:一个程序90%的时间运行在10%的代码上。
上一小节已经提到硬盘的顺序读写和随机读写有非常大的性能差异,其中主要的原因是两者寻址操作上所耗费的时间存在巨大差异。那么顺序读写和随机读写的差异到底有多大呢?仅仅是靠上一小节的文字描述显然不能给读者数值化的认识,所以在本小节中我们将使用一款名叫CrystalDiskMark的测试软件,让读者具体体会一下两者的巨大区别:

以上是笔者编写文稿使用的某品牌笔记本上5400转机械硬盘的测试截图(题外话,这款笔记本用起来真想骂人),这个机械硬盘属于中低端硬盘,但是相同级别的硬盘在万元级以下的笔记本上却被大量使用,所以这个测试结果很能说明一些问题。首先解释一下以上截图中的几个主要项目:
在测试结果的上方写明了这是一个针对E盘符的测试,每一单项所测试的读写数据总量为500MB,并且每个单项测试分别执行5次。执行5次后综合每次的测试结果取平均值,最终形成这个单项的测试结果。
“Seq”和“Seq Q32T1”这两个选项分别代表没有IO队列的单线程顺序读写和一个深度为32的IO队列的单线程顺序读写,其中Q32代表队列深度为32,T1表示IO线程数为1。这个队列长度和IO线程数量都可以在CrystalDiskMark进行调整。
4K表示进行小文件读写测试时这些小文件的大小,这些4K文件将进行随机读和随机写测试。4K测试项是衡量固态硬盘性能的重要测试项,直接描述了固态硬盘的性能,这个我们将在下文进行说明。
从上图的测试结果来看,顺序读写的性能远远高于随机读写的性能,使用了IO队列的读性能又远远高于没有使用IO队列的读性能(且写性能基本持平)。当然以上的测试数值和选用的机械硬盘型号是密切相关的,但无论数值结果如何变化,最后都会符合以上所描述的性能规则。
固态硬盘的结构和工作原理和机械硬盘大不一样。它主要由大量NAND Flash颗粒、Flash存储芯片、SSD控制器控制芯片构成。他们三者的关系通过下图进行表示:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-89075-3.html
地产商不行贿能拿到地吗
是跟踪还是护航
亲