我的4K速度有什么问题?为什么这么慢?还是应该这样?
这样的速度还好吗?为什么我的4K速度这么慢?
我的4K速度有什么问题?为什么这么慢?还是应该这样?
这样的速度还好吗?为什么我的4K速度这么慢?
Answers:
你正在运行到是典型的机械硬盘,而固态硬盘的的主要好处之一:硬盘有可怕的随机访问性能。
在CrystalDiskMark中,“ Seq”表示顺序访问,而“ 4K”表示随机访问(一次为4kB,因为单个字节太慢且不切实际1)。
大致而言,您可以使用两种不同的方式访问文件。
顺序访问意味着您一个字节接一个字节地读写文件。例如,如果您正在观看视频,则应从头到尾加载视频。如果要下载文件,则会从头到尾下载文件并将其写入磁盘。
从磁盘的角度来看,它看到诸如“读取块#1,读取块#2,读取块#3,读取字节块#4” 1之类的命令。
随机访问意味着没有明显的读取或写入模式。这不一定意味着真正的随机性。它的真正含义是“不是顺序的”。例如,如果您要立即启动大量程序,则它们需要读取分散在驱动器周围的大量文件。
从驱动器的角度来看,它看到诸如“读取块#56,读取块#5463,读取块#14,读取块#5”之类的命令。
我已经提到过很多次了。因为计算机处理的是如此大的大小(1 MB〜= 1000000 B),所以如果您必须向驱动器询问每个单独的字节,那么即使顺序访问也效率不高-太多的杂音。实际上,操作系统一次向磁盘请求数据块。
一个块只是一个字节范围;例如,块#1可能是字节#1-#512,块#2可能是字节#513-#1024,依此类推。这些块的大小为512字节或4096字节,具体取决于驱动器。但是,即使在处理块而不是单个字节之后,顺序块访问也比随机块访问要快。
顺序访问通常比随机访问快。这是因为顺序访问使操作系统和驱动器可以预测接下来将需要什么,并预先加载很大的块。如果您请求的块为“ 1、2、3、4”,则操作系统可能会猜测您接下来将要“ 5、6、7、8”,因此它告诉驱动器读取“ 1、2、3、4”一口气找到5、6、7、8英寸。类似地,驱动器可以一次性读取物理存储,而不是“搜寻1,读取1,2,3,4,搜寻5,读取5,6,7,8”。
哦,我提到要寻求一些东西。由于机械硬盘的物理布局方式,它们的寻道时间很慢:它们由许多重金属化的磁盘组成,其中物理臂来回移动以读取磁盘。这是一个打开的HDD的视频,您可以在其中看到旋转的磁盘和移动的臂。
图片来自http://www.realtechs.net/data%20recovery/process2.html
这意味着在任何时候,都只能读取臂末端头部下方的数据位。驱动器需要等待两件事:它需要等待机械臂移至磁盘的右环(“轨道”),并且还需要等待磁盘旋转,以便所需的数据处于读取状态头。这称为寻求2。旋转的手臂和活动的手臂都需要花费物理时间才能移动,因此,在不造成损坏风险的情况下,它们不会被加速得太多。
这通常会花费非常长的时间,比实际读数要长得多。我们说的是> 5ms只是为了到达请求的字节所在的位置,而该字节的实际读取平均每个顺序读取的字节大约为0.00000625ms(或每个512 B块为0.003125ms)。
另一方面,随机访问没有可预测性的好处。因此,如果您想读取8个随机字节(例如,从块“ 8,34,76,996,112,644,888,341”中读取),则驱动器需要转到“搜索8,读取8,搜索34,读取34,搜索76,读取76,...”。 。请注意,它需要如何针对每个块再次进行搜索?而不是每个顺序的512 B块平均0.003125ms,而是每个块的平均数(5毫秒寻道+ 0.003125毫秒读取)= 5.003125毫秒。那要慢很多很多倍。实际上,速度降低了数千倍。
幸运的是,我们现在有一个解决方案:SSD。
顾名思义,固态硬盘是固态硬盘。这意味着它没有运动部件。此外,SSD的布局方式意味着(实际上是3)无需查找字节的位置。它已经知道了。因此,SSD在顺序访问和随机访问之间的性能差距要小得多。
仍然存在差距,但这在很大程度上归因于无法预测接下来会发生什么并且无法在请求数据之前预加载该数据。
1更准确地说,出于效率考虑,使用LBA驱动器以512字节(512n / 512e)或4kB(4Kn)的块进行寻址。而且,实际程序几乎永远不会一次只需要一个字节。
2从技术上讲,搜寻仅指手臂的行程。等待数据在头部下方旋转的原因是查找时间之上的旋转延迟。
3从技术上讲,由于其他原因(例如磨损平衡),它们确实具有查找表和重新映射,但是与HDD相比,它们可以忽略不计...
Notice how it needs to look for every single byte?
替换byte
为block
(并相应地更改示例)。该驱动器寻找4k部分(可以进一步分散到512bytes块中,但不能低于此部分。它不会在每个字节之间寻找!如果下一个块不在紧随其后,它将在每个块之间寻找(这种情况经常发生)寻找(将磁头绕着磁盘移动,并等待该块在其下方通过)需要很长时间(几毫秒)
正如其他答案已经指出的那样,“ 4K”几乎可以肯定是指大小为4 KiB的块中的随机访问。
每次要求硬盘(不是SSD)读取或写入数据时,都会涉及两个重大延迟:
对于任何给定的驱动器,这两者的时间量都相对恒定。搜索等待时间是头部可以移动多快以及需要移动多远的函数,而旋转等待时间是磁盘旋转多快的函数。而且,在过去的几十年中,它们没有太大变化。制造商实际上通常使用平均搜索时间,例如在广告中;当该地区几乎没有发展时,他们几乎停止这样做。没有制造商,尤其是在竞争激烈的环境中,不希望他们的产品看起来比竞争对手的产品更好。
典型的台式机硬盘转速为7200 rpm,而典型的笔记本电脑驱动器转速约为5000 rpm。这意味着,每秒总共经过120转(台式机驱动器)或约83转(笔记本电脑驱动器)。由于平均而言,在所需扇区通过磁头之前,磁盘将需要旋转半圈,因此这意味着我们可以期望磁盘每秒能够处理大约两倍于许多I / O请求的速度。
因此,如果要求访问(读取或写入)数据的物理位置相对本地化,那么我们应该期望能够以每秒200 I / O的速度执行,从而导致旋转等待时间成为限制因素。在一般情况下,如果数据分散在一个或多个磁盘上,则我们期望驱动器能够以每秒100 I / O的速度执行,这需要大量的查找并将查找延迟作为限制因素。在存储方面,这是“ IOPS硬盘性能”,而不是顺序I / O性能,通常是实际存储系统中的限制因素。(这是SSD如此之快使用的一个重要原因:它们消除了旋转延迟,并且由于读/写头的物理移动成为闪存映射层表中的表查找(以电子方式存储),因此大大减少了查找等待时间。)
当涉及到缓存刷新时,写入通常会比较慢。通常,操作系统和硬盘会尝试对随机写入进行重新排序,以在可能的情况下将随机I / O转换为顺序I / O,以提高性能。如果存在显式的缓存刷新或写入障碍,则为了确保持久性存储中的数据状态与软件预期的一致,将取消此优化。基本上,在不涉及磁盘高速缓存的情况下,读取时会应用相同的推理,这是因为不存在磁盘高速缓存(今天在台式机系统上并不常见),或者由于软件故意绕过磁盘高速缓存(在测量I / O性能时通常会这样做)。这两种情况都将最大潜在IOPS性能降低到了更为悲观的情况,对于7200 rpm驱动器,则降低了120 IOPS。
恰好恰好与您的数字完全匹配。小块大小的随机I / O是旋转硬盘绝对的性能杀手,这也是为什么它是一个重要指标的原因。
至于纯顺序I / O,对于现代旋转硬盘而言,150 MB / s的吞吐量并不是完全不合理的。但是很少有现实世界中的I / O严格按顺序执行,因此在大多数情况下,纯粹的顺序I / O性能更多地是一项学术练习,而不是实际性能的指标。
4K指的随机I / O。这意味着要求磁盘在测试文件中的随机位置访问小块(大小为4 KB)。这是硬盘驱动器的弱点。跨磁盘不同区域访问数据的能力受到磁盘旋转速度和读写磁头移动速度的限制。顺序I / O可以方便地访问连续的块,因为驱动器可以在磁盘旋转时简单地读取或写入这些块。
固态驱动器(SSD)的随机I / O不会出现此类问题,因为它要做的就是查找数据存储在基础内存中的位置(通常是NAND闪存,可以是3D XPoint甚至是DRAM)并读取或在适当的位置写入数据。SSD完全是电子的,不需要等待旋转的磁盘或移动的读写头来访问数据,因此在这方面,它们比硬盘驱动器快得多。因此,升级到SSD可以大大提高系统性能。
旁注:SSD上的顺序I / O性能通常也比硬盘驱动器高得多。典型的SSD具有与闪存控制器并行连接的多个NAND芯片,并且可以同时访问它们。通过在这些芯片上分布数据,可以实现类似于RAID 0的驱动器布局,从而大大提高了性能。(请注意,许多更新的驱动器,尤其是价格便宜的驱动器,都使用一种称为TLC NAND的NAND类型,在写入数据时趋向于变慢。TLC NAND的驱动器通常使用较小的更快NAND缓冲区来为较小的写入操作提供更高的性能,但可以一旦缓冲区已满,速度就会大大降低。)