为什么复制时我的闪存驱动器速度变慢?


27

复制几分钟后,它变得越来越慢。为什么?

例如,它以20 MB /秒开始,然后以10 MB /秒的速度结束。

各种文件,大,小等

更新:问题是关于各种操作系统的,所以这是一个“一般性问题”


您要复制多少与计算机中有多少可用内存?
KCotreau

PC-> USB-FLASH驱动器:几百GB可用->几GB可用
LanceBaynes 2011年

1
我怀疑您首先将文件缓存在内存中,以便它们快速传输,然后一旦它们开始从硬盘驱动器移动,它的速度就会变慢。不过,我不确定您的情况。
KCotreau

所以您建议我更频繁地使用“同步”命令?
LanceBaynes

我不明白sync命令的意思。您对此问题没有任何背景。我什至不知道什么操作系统。
KCotreau

Answers:


25

此行为并非特定于您的闪存驱动器,您也可以在硬盘驱动器上看到此行为。它与大多数操作系统和磁盘使用的缓存机制有关,以加快小写速度。

您看到的20mb / s是正在写入磁盘缓存的数据(通常快但内存很小)。一旦此缓存已满,则必须将其刷新到磁盘-现在,您将被速度较慢的磁盘所困扰。

示例1:当您拥有一个具有大缓存的控制器(例如良好的RAID5控制器)时,这种效果确实很明显,在可以将大约500mb的数据快速刷新之前,必须将其刷新到磁盘上。

示例2:如果在文件复制“完成”的同时拔出闪存驱动器,则可以看到正在运行的缓存。此时,文件将在磁盘和缓存之间分割-因此就操作系统而言,副本已“完成”,但是磁盘控制器仍需要将缓存中剩余的内容写入磁盘。如果您将闪存驱动器放回原处并检查文件,您会发现文件并不完整。

免责声明:如果未在操作系统中/磁盘上启用写缓存,则这些示例将不起作用。

此外,如果不是磁盘缓存在起作用,那么您看到的很可能是碎片的影响。随着磁盘越来越满,可用的连续可用空间越来越少,文件系统必须更加努力地寻找放置文件的位置。


还请记住,这是一个闪存驱动器。它的硬件从未针对速度进行过优化,而只是承受得起。
surfasb 2011年

我认为这不能解释为什么在长文件复制期间性能会下降。相反,性能会随着驱动器的使用寿命而降低,是吗?
ta.speot.11年

这是很合理的。它们针对突发速度而不是持续运行进行了优化。考虑一下要加载到闪存驱动器中的文件的平均大小。您是针对30秒长的文件传输进行优化还是针对2秒长的传输进行优化?将其添加到您的两个示例中,它可以解释很多内容。
surfasb 2011年

就像您试图一次在一个普通的门上塞满两个人一样。首先,您可以计算。哇,我从零人穿过那扇门,一次又变成了两个。我的速度很棒。然后,这条线变长了,您的采样也变得更好,您最终意识到小样本=不良数学。。。
surfasb 2011年

@ ta.speot。我想您提到的磁盘高速缓存是由硬盘上的操作系统处理的,并且与硬盘内部具有的硬件高速缓存不同吗?
sepehr 2014年

1

虽然缓存确实会造成这种情况,但这并不是唯一的因素。如果仅是缓存因素,那么我们希望写入速度会很快从几百MB / s下降到驱动器的实际写入速度,并在其余的写入过程中保持不变。但是,这与在磁盘之间进行大容量传输(例如刻录启动映像)时,我没有观察到这种情况。相反,我观察到的是速度在整个操作过程中逐渐降低。

这种减慢是由用于存储数据的闪存芯片上的数据剩余量引起的,因此有必要多次写入某些块。

在闪存芯片内部,有可以写入的数据块。写入时,计算机只能执行两件事:可以擦除整个块,或将块中的某些(或全部)位从0更改为1。

但是,其中一些块要比其他块好,尤其是在较低质量的闪存驱动器中,因此,向其中写入新数据时,某些位有时在写入后立即自行切换回0,然后没改变。因此,在写入块时,操作系统需要检查以确保所有数据均已正确写入,如果不是,则必须通过将相同数据写入同一块两次或三遍来重做该块。直到数据记录。

因此,当您的计算机将大量数据写入闪存驱动器时,下面是一个解释(不完全准确,但足够好):

  1. 拿出要写入的第一组块,然后全部写入。
  2. 读回我们刚刚编写的所有块,并列出不匹配的块
  3. 编写下一组块以及上次未正确编写的块。
  4. 重复2-3,直到所有块均已正确写入。

当计算机正在写入驱动器时,它将报告其第一次将块写入驱动器的速率。由于还必须同时重写较早的块,因此可用于原始块的总吞吐量会下降,因为还需要进行重写的次数增加。因此,表观写入速度随时间降低。


我正在将12 Gig 7zip文件写入格式为NTFS的全新USB 3.0闪存驱动器。最初一分钟的速度约为100 MB / s,然后一分钟下降至25ish MB / s,然后约10分钟下降至11左右。这不是一个逐渐下降的斜坡,而是三个不同的高原。
埃里克(Eric)'18年

我从装有16 Gig RAM的旧i7笔记本电脑上复制了档案。在具有32 Gig RAM的新Xeon笔记本电脑上,从相同的ThumbDrive复制相同的7zip存档需要2分钟,并且速度没有下降。
埃里克(Eric)

0

将文件写入驱动器(无论是USB闪存驱动器还是硬盘驱动器)时,不会/永远不会读取数据以查看其是否匹配。那将永远。写入验证由硬件完成(循环冗余校验),如果发生错误,则从硬件检测到错误后将其回发到应用程序。CPU写入速度快于设备处理的速度,从而导致发生的停顿和减慢(甚至暂停)。您不会发现内部硬盘驱动器发生这种情况。您将永远不会看到Windows操作系统上真正发生的事情,但是在Linux上您实际上可以看到CPU暂停,直到USB硬件说“确定”才能继续。


不同存储设备的写入速度差异可能非常大,例如,将旧SD卡的写入速度与SATA III SSD的写入速度进行比较。
卡雷尔

3
请避免个人侮辱。尽管您的帖子可能是正确的,但您必须对其进行编辑以符合我们的社区标准。
本N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.