存储趣谈:为什么复制 1000 个 1MB 文件比复制 1 个 1GB 文件慢很多?

本文探讨了在复制大量小文件时,相比于单个大文件,所面临的额外开销,包括读取目录信息、分配目标空间、写入目录等操作。这些琐碎工作导致的磁盘同步和目录结构迭代成为主要耗时因素。即使在现代硬件如NVMe SSD上,这种差异依然存在。此外,不同的程序和工具在速度与内存使用之间有不同的权衡,例如Windows资源管理器、文件管理器和专业复制工具之间的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复制1个 1GB 文件的步骤:

  • 从磁盘目录中读取文件信息
  • 找到磁盘上的文件
  • 找到目标上的可用空间
  • 将文件的目录信息写入目的地
  • 读取尽可能多的文件以适合 RAM
  • 把你读过的东西写到目的地
  • 关闭目标文件
  • 在源上释放文件的句柄(handle)

复制 1000 个 1MB 文件的步骤:

  • 从磁盘目录中读取第一个文件的信息
  • 找到磁盘上的第一个文件
  • 找到目标上的可用空间
  • 在目的地写入第一个文件的目录信息
  • 将第一个文件读入 RAM
  • 把你读过的东西写到目的地
  • 关闭目标上的第一个文件
  • 释放源上第一个文件的句柄
  • 重复以上步骤 999 次

对于1000个小文件,真正花费时间的部分不是数据大小,而是所有关于读取目录信息、在目标上分配空间、写入目录信息等等琐碎的工作。

再往下了解,1000 个文件至少需要 2000 -6000次同步到磁盘刷新轨道缓冲区的操作,而单个大文件只需要 2-6 次。

此外,即使文件的目录结构类似于 B 树,每个新创建也会导致 log2(N) 迭代,其中 N 是树中新文件的深度。

更何况,有些程序在编写的时候就没有考虑到特意优化“复制1000个文件”这种情况,他们也可能认为在现代硬件(例如 NVMe SSD)上,速度的差异可以忽略不计。

就算有些程序写得很好,它们也必须在速度和内存使用之间表现出折衷。比如在 Windows 上,通常资源管理器复制速度比某些文件管理器(例如 Far)快,但比专用程序(例如 FastCopy)慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值