复制几分钟后,它变得越来越慢。为什么?
例如,它以20 MB /秒开始,然后以10 MB /秒的速度结束。
各种文件,大,小等
更新:问题是关于各种操作系统的,所以这是一个“一般性问题”
复制几分钟后,它变得越来越慢。为什么?
例如,它以20 MB /秒开始,然后以10 MB /秒的速度结束。
各种文件,大,小等
更新:问题是关于各种操作系统的,所以这是一个“一般性问题”
Answers:
此行为并非特定于您的闪存驱动器,您也可以在硬盘驱动器上看到此行为。它与大多数操作系统和磁盘使用的缓存机制有关,以加快小写速度。
您看到的20mb / s是正在写入磁盘缓存的数据(通常快但内存很小)。一旦此缓存已满,则必须将其刷新到磁盘-现在,您将被速度较慢的磁盘所困扰。
示例1:当您拥有一个具有大缓存的控制器(例如良好的RAID5控制器)时,这种效果确实很明显,在可以将大约500mb的数据快速刷新之前,必须将其刷新到磁盘上。
示例2:如果在文件复制“完成”的同时拔出闪存驱动器,则可以看到正在运行的缓存。此时,文件将在磁盘和缓存之间分割-因此就操作系统而言,副本已“完成”,但是磁盘控制器仍需要将缓存中剩余的内容写入磁盘。如果您将闪存驱动器放回原处并检查文件,您会发现文件并不完整。
免责声明:如果未在操作系统中/磁盘上启用写缓存,则这些示例将不起作用。
此外,如果不是磁盘缓存在起作用,那么您看到的很可能是碎片的影响。随着磁盘越来越满,可用的连续可用空间越来越少,文件系统必须更加努力地寻找放置文件的位置。
虽然缓存确实会造成这种情况,但这并不是唯一的因素。如果仅是缓存因素,那么我们希望写入速度会很快从几百MB / s下降到驱动器的实际写入速度,并在其余的写入过程中保持不变。但是,这与在磁盘之间进行大容量传输(例如刻录启动映像)时,我没有观察到这种情况。相反,我观察到的是速度在整个操作过程中逐渐降低。
这种减慢是由用于存储数据的闪存芯片上的数据剩余量引起的,因此有必要多次写入某些块。
在闪存芯片内部,有可以写入的数据块。写入时,计算机只能执行两件事:可以擦除整个块,或将块中的某些(或全部)位从0更改为1。
但是,其中一些块要比其他块好,尤其是在较低质量的闪存驱动器中,因此,向其中写入新数据时,某些位有时在写入后立即自行切换回0,然后没改变。因此,在写入块时,操作系统需要检查以确保所有数据均已正确写入,如果不是,则必须通过将相同数据写入同一块两次或三遍来重做该块。直到数据记录。
因此,当您的计算机将大量数据写入闪存驱动器时,下面是一个解释(不完全准确,但足够好):
当计算机正在写入驱动器时,它将报告其第一次将块写入驱动器的速率。由于还必须同时重写较早的块,因此可用于原始块的总吞吐量会下降,因为还需要进行重写的次数增加。因此,表观写入速度随时间降低。
将文件写入驱动器(无论是USB闪存驱动器还是硬盘驱动器)时,不会/永远不会读取数据以查看其是否匹配。那将永远。写入验证由硬件完成(循环冗余校验),如果发生错误,则从硬件检测到错误后将其回发到应用程序。CPU写入速度快于设备处理的速度,从而导致发生的停顿和减慢(甚至暂停)。您不会发现内部硬盘驱动器发生这种情况。您将永远不会看到Windows操作系统上真正发生的事情,但是在Linux上您实际上可以看到CPU暂停,直到USB硬件说“确定”才能继续。