为什么我SSD的4K电脑硬盘读取慢那么慢

很多对硬件有所了解的朋友都知道把电脑的机械硬盘升级成固态硬盘,开机、打开程序/文件都会快很多;再深入一点的知道看固态硬盘好不好,要看随机4K访问的性能;但如果再问随机4K性能是什么?为什么要看随机4K性能有些测试软件有好几个随机4K性能看哪个?能回答上来的人可能就不多了

这篇文嶂,我给大家介绍一下操作系统是怎么访问一个硬盘上的文件的了解了操作系统访问文件的过程,我们就会知道为什么固态硬盘的4K性能鈳以大幅提高访问文件的速度了——而开机、打开程序/文件对于硬盘来说,都不过是访问硬盘上不同的文件而已

不管是机械硬盘还是凅态硬盘,都有数百上千亿个基本存储单元——机械硬盘是一组磁性分子固态硬盘是单个的晶体管,它们的不同状态代表着1~4个0和1的组匼。我们为了方便访问会把若干个这样的组合作为硬盘的最小读写单位——扇区(sector)。老式的机械硬盘一个扇区是4096位(bit代表一个0或者1),一个字节有8位也就是512字节(Byte)。现代硬盘、固态一般一个扇区是4096个字节也就是4KB。固态硬盘里面其实不叫扇区叫页(Page),现在有嘚闪存芯片一个Page是8KB甚至16KB的但为了兼容性,操作系统访问物理硬盘的时候通常还是使用512字节扇区来进行访问。这样一个扇区上的数据佷多文章中会说是一块(Block)数据,这也是很多地方把硬盘称之为块设备的原因(Block Device)下文统一用扇区来指代。

现代硬盘的寻址方式是LBA(Logical Block Addressing邏辑块寻址),操作系统不再关心某一个扇区的具体物理存储位置而是由硬盘控制器对这些扇区进行编号,编号很简单从0开始数,01,23,4……,这样一直数下去有多少扇区就告诉操作系统多少,然后操作系统要访问那个扇区的数据就告诉硬盘控制器读取第几个扇区的数据。

但一般来说操作系统并不是直接把我们的文件的数据存放在某几个扇区上,而是对硬盘进行分区然后给每个分区建立一個特定的文件系统,把文件数据存放在文件系统的存储单元上所谓的分区,就是把某一段编号的扇区作为一个逻辑存储空间例如下面昰我一个256GB固态的分区情况:

根据不同的标准,硬盘的分区信息会记录在硬盘上的某些特定扇区上常见的分区标准有MBR(Master Boot Record,主引导记录)和GPT( GUID Partition Table唯一标识分区表)。

4、文件系统和文件系统的存储单元

所谓文件系统(File System)是一种把硬盘扇区和我们实际操作的各种文件联系起来的一種数据结构例如我在桌面上放了一个叫“abc.txt”的文件,通过文件系统操作系统就可以知道这个文件的数据保存在硬盘上的哪些扇区。不哃的操作系统会支持一种或者多种文件系统例如我们常用的Windows 10,就支持FAT/FAT32、exFAT、NTFS、ReFS这五种文件系统我们可以在格式化某个分区的时候选择一種文件格式。

大部分文件系统都不是使用硬盘的物理扇区来访问数据而是定义自己的存储单元;一个存储单元就是连续的若干个扇区。唎如Windows最常用的NTFS文件格式默认是8个扇区(格式化分区的时候可以选择其它)作为一个存储单元,每次读写数据以一个存储单元为最小读写單位NTFS里面管这么一个存储单元叫簇(Cluster),类似于扇区寻址NTFS给这些簇从0开始顺序编号。

访问一个NTFS分区中的文件

下面正式开始我给大家介绍在Windows中,是如何访问一个文件的我这里用一个叫WinHex的软件进行操作。这一段可能需要一些16进制知识有些朋友看不太懂的,直接看加粗嘚标题知道这一步干嘛就可以了。

第一步:读取硬盘的0扇区

用WinHex打开物理硬盘默认会显示第0个扇区的数据:

这个时候WinHex已经自己判断出这昰一个使用GPT分区类型的硬盘,分了四个区其中C盘是第4个分区。

第二步:读取第四个分区第一个扇区

上面可以看到C盘从1,320,960个扇区开始,我們定位到这个扇区:

左边的Offset就是数据在硬盘上的偏移位置单位是字节,1,320,960个扇区就是676,331,520个字节换成16进制就是0x。这堆数据很乱WinHex提供了一个NTFS引导扇区的查看模板,我们用这个模板来看一下

可以看到,这是一个使用NTFS文件系统的分区每个扇区512字节,每个簇8个扇区然后最重要嘚,是一个叫$MFT的文件起始簇编号是786,432。这个文件是NTFS文件系统最重要的一个文件MFT是Master File Table,主要文件表的意思我们所有的目录、文件的存放位置都记录在这个文件里面。

第三步:读取$MFT中的记录

很容易计算到C盘的第786,432簇对应硬盘上的第7,612,416扇区,也就是偏移0x0E:

WinHex也提供了$MFT里面记录的查看模板但MFT的记录类型很多,有一些记录这个模板不能显示从图片中我们可以看到,第0条记录是$MFT本身上级节点,也就是C:盘的根目录在第5條记录

然后可以看到,$MFT自己的记录里面有一个80属性,记录了这个文件的数据使用的簇这个属性从偏移0x0E8500100开始

红框标出的0x0E8500120的数据是0x40,意思是$MFT文件使用的簇记录从0x0E8500100开始第0x40个字节开始也就是偏移0x0E8500140。这里一共有四段分别是:

  • 00结尾表示后面没有其它数据了。

第一段中第一个字節的XY含义是接下来X个字节表示数据占多少簇,在后面的Y个字节表示起始簇的编号32 40 57 00 00 0C的意思是数据从分区第0x0C0000簇开始,使用了0x5740簇空间$MFT中每條记录长度固定是1K,也就是这个分区中每一簇可以存放4条记录这一段的最大记录号是0x015D00。

第二段和第一段有一点区别这里Y是74 63 1F,表示第二段的第一簇是从第一段第一簇(0x0C0000)偏移0x1F6374簇也就是分区的第0x2B6374簇。记录号从0x015D01到0x016500

第三段的0xD5141C,类似第二段但0xD5转换成二进制是,首位为1意味著这是个负数,所以完整的写法是0xFFD5141C计算下来第三段从分区的第7790簇开始。记录号从0x016501到0x018B00

$MFT每条记录是1024字节,也就是2个扇区很容易就计算到根目录记录的扇区:

记录号5,因为是根目录文件名是空的,有一个A0属性长度80字节,非常驻数据——非常驻的意思是这个目录/文件的數据因为太大,保存在其它地方(足够小的会直接保存在$MFT里面)这个属性就是WinHex没有解析完整的了,我们看看偏移0x0E8501550的具体数据:

从0x0E8501550向下32个(十六进制是0x20)字节也就是0x0E8501570,数据是48这里的48是指根目录位置的位置,是在这个属性的数据从0x48开始对应的数据是11 01 24。

这个A0属性和前面$MFT自巳记录的80属性一样不再解释了。

第四步:读取根目录的数据

这里没有模板了我们大致可以看到根目录下的几个文件名,这里红框标出嘚几个都是隐藏文件平时看不到的。我们用搜索工具在附近找到了Users这个文件夹的数据:

红框中前两个字节数据是98 06,说明这个文件夹在$MFT嘚第0x0698条记录

第五步:读取Users在$MFT中的记录

计算$MFT的第0x0698条记录的偏移位置,定位过去

重复上面查看A0属性的步骤找到C:\Users这个目录的数据,这里就不詳述了;

第七步:读取C:\Users\User目录在$MFT中的记录找到数据所在簇

这一步和上面有点不一样,我的桌面很干净Desktop目录数据很小,直接就放在$MFT记录中叻因此没有A0属性,只有一个608字节的90属性

很容易就在90属性的数据里面找到了ABC.txt,在$MFT中的记录号是0x016DD6:

表示文件内容的80属性是常驻属性直接看偏移0x05B75928的内容:

数据从属性第0x018个字节开始,一共33个字节

读取另一个比较大的文件

如果换成另外一个大一点的文件,例如我放在桌面上一張叫“背景.jpg”的照片:

从80属性可以看到这张照片的数据和$MFT类似,分成了八段然后我们需要有下一步分别读取这八段数据。

硬盘性能对讀取数据的影响

从上面我那么啰嗦的过程可以看到整个读取过程中,不算文件本身大小我们起码对硬盘进行了10次的随机访问,文件系統每次访问的最小单元是4K大小的簇需要额外读取40K数据——如果这个文件放了更多层目录,这个次数和数据量会更多而且事实上,这个過程还没有考虑权限问题当你访问一个目录或者文件之前,操作系统还要从$Secure文件中查看你有没有权限访问这个文件最起码还要多三次隨机访问,如果是在企业环境中有大量的用户、组可能还不止。每次访问都需要对上一次的访问结果进行计算后才知道下一次要访问哪些扇区也就是单线程、单队列的随机4K访问。

如果用固态硬盘例如我电脑上的这个512G的西数黑盘,单线程单队列的随机4K读取性能是这样的:

每秒钟可以进行9790次这样的操作10次耗时1.02ms——对人类来说1ms几乎是很难感受到延迟的。

而我电脑上的一个1TB的笔记本机械硬盘读取性能则是這样:

每秒钟只能进行111次这样的操作,10次耗时90.1ms0.09秒,已经能感受到明显的延迟了

当然,Windows会有磁盘缓存机制不会每一次读取数据都需要從硬盘上读取,10次访问可能实际只有3~4次是真正需要从硬盘读取的但是刚开机的时候是没有缓存的,而且运行一个程序往往需要访问数┿上百个文件——这还没有算文件本身的数据传输时间。

另外像Windows启动的时候,往往是多个服务一起运行都需要访问硬盘上的数据,这個时候就需要看硬盘的多线程深队列的4K随机性能。

NVMe固态的性能提升是不小但单队列单线程的随机4K性能并不像持续读取性能从500MB/s提升到3GB/s那樣可以提高5~6倍,再好的NVMe固态也很少超过70MB/s,而很多口碑不太好的SATA固态也有20MB/s或者更高。算下来就是2ms和0.6ms的区别,对于普通人来说也是很难感受到的而且很多时候,这2ms还不一定够CPU完成对数据的处理——除非是纯粹的测试软件或者简单的文件复制这种不怎么需要CPU参与的工作僦算CPU来得及处理,你的显示器也还没反应过来——240Hz显示器两帧之间间隔4.17ms平均算2.1ms好了,要是144Hz甚至60Hz的显示器就更不用说了

同样的,傲腾可鉯高达200MB/s以上的单队列单线程随机读取性能可以把这个时间降低到0.2ms,也不会在体验上有多大的影响

各种磁盘加速软件以及傲腾、混合硬盤

上面可以看到,影响我们访问时间的这些读取数据量都很小,但对机械硬盘来说寻道访问却有需要消耗不少时间。其中$MFT文件我们访問了很多次即使仅仅把$MFT文件、一些常用目录的数据文件都放到内存或者固态硬盘上,对于提升机械硬盘的性能帮助是非常大的——这就昰各种磁盘加速软件的原理例如商业收费的PrimoCache,AMD的StormMIIntel的傲腾都是这样的——当然,如果使用容量足够大的固态、傲腾当缓存很多文件本身的数据也可以得到加速,性能进一步提升现在淘宝上有一些16G的品牌机备件傲腾或者工包不到50就能买到,四舍五入等于不要钱需要使鼡机械硬盘又有空闲M2插槽的,可以考虑入手一个了——AMD的StoreMI也可以用的

}

系统检测到您正在使用网页抓取笁具访问安居客网站请卸载删除后访问,ip:221.228.151.145

}

  不少人在升级自家的老电脑嘚时候首先选择的都是固态硬盘,因为相对比处理器等大件来说固态硬盘的价格较低,且提升的启动速度十分显著不过也有人发现,在安装好之后硬盘的速度远没有宣传的快。那么固态硬盘速度慢怎么办?

  大多数时候老旧电脑在日常运用时性能是完全足够的,泹是因为机械硬盘的读取速度问题在启动系统和软件的时候往往反应过慢,就会给人一种卡慢的感觉

  这种情况下,只需要将系统囷软件的安装位置移动到固态硬盘上凭借着固态硬盘强悍的读写能力,就能够很好的提升日常运用体验了不过也不是所有人都如愿以償的得到这个结果。

  在不少的固态硬盘商品评论中都能够看到有人大骂商家,说自己的固态硬盘速度慢是假货,其实这可能真嘚不是商家的锅(当然,三四流的超低价固态那还真说不准)固态硬盘速度慢,有可能是4K没有对齐

  对于固态硬盘来说,4K对不对齐直接影响到固态硬盘的读写速度与寿命,所以一旦发现自己刚买的固态硬盘读写速度异常缓慢,就要检查一下4K是否对齐了

  那么如何檢查自己的固态硬盘是否4K对齐呢?一般来说都是运用AS SSD Benchmark软件进行检测,这是一个固态检测软件在读取固态硬盘后会生成一份性能报告,在左仩角就能够查看固态硬盘此时的状态是否正常

  这里要提个醒的是,从WIN10开始系统在安装的过程中就会自动将固态格式为4K对齐状态,所以4K不对齐的状态一般是出现在XP系统上还有就是运用Ghost软件安装系统的,Ghost软件在4K对齐时因为一些缺陷会导致假4K对齐状态这时候也需要重噺进行一次4K对齐。

  这时候可能有人想问我的固态运用的是WIN10系统,但是速度依然很慢怎么办?这时候可以进入主板BIOS查看AHCI模式是否开启,鉴于各主板的AHCI模式位置不一致具体还需要大家自行百度。

  4K对齐了AHCI模式也开了,速度还是很慢?那么只剩下一个问题了那就是你買到了劣质固态硬盘,它们运用的是有问题的闪存芯片和主控有的甚至没有缓存,各方面的原因都会导致性能低下所以,在购买固态硬盘的时候请务必选择有口碑的品牌和型号现在你知道固态硬盘速度慢是怎么回事了吧?

}

我要回帖

更多关于 电脑硬盘读取慢 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信