规格表测的是另一种任务
包装盒上的数字是高队列深度下的顺序吞吐:一个大文件被背靠背地读写,同时有大量命令在途。而真实的拷贝很少是这种任务。搬一个装满文档、源代码或照片的文件夹,意味着成千上万个相互独立的文件——每一个都是一次独立的读、一次独立的写,外加中间一堆簿记工作;限制这项工作的是延迟,不是吞吐。一块顺序写入能撑3500 MB/s的盘,遇到海量小文件的工作负载时,有效速度照样可能爬到只剩几MB/s。
这些并不意味着你的盘慢,而是意味着度量单位不同。决定拷贝体感速度的是延迟、队列深度、文件大小分布和元数据开销,而营销数字只覆盖这幅图景的一个角落。把这些因素拆开看,谜团基本就散了。
- 顺序吞吐——盒上的数字——只适用于背靠背搬动的大号单文件
- 决定成千上万个小文件跑多快的是4K随机延迟,不是吞吐
- 每个文件都要缴一笔元数据税:MFT记录、权限、时间戳、可选流
- 实时杀毒在文件出门时读一遍,进门时往往再读一遍
- 拷贝到同一块盘上,读写余量会被自己跟自己抢
- 廉价QLC盘只有在SLC缓存耗尽之前才能全速写入
秒数究竟去了哪里
小文件是经典的杀手:10,000个50 KB的文件要把单文件成本付上一万次,盘花在簿记上的时间比搬运字节还多。资源管理器的拷贝对话框也偏保守——它遍历源目录树、计算目标、逐文件汇报进度,于是出现了原始块级拷贝根本不会有的可见停顿。实时杀毒让工作翻倍:数据离开源时扫一遍,落地时再扫一遍。拷贝到同一块物理盘上,余量就被花两次——每个字节都是同一介质上的一次读加一次写。
这个规律在SSD之外同样成立。千兆链路无论两端多快都会卡在110–118 MB/s附近,Wi-Fi在实际条件下只能交付其中一小部分。廉价U盘把慢速闪存和对小文件极不友好的文件系统凑成一对,于是“高达150 MB/s”的U盘在照片文件夹上可能只跑出个位数均速。持续写入还可能触发紧凑M.2盘的热降频,把大拷贝的后半程拖慢。
真正有帮助的做法
对大量小文件,诚实的答案是robocopy:/MT开关并行拷贝多个文件,经常能把资源管理器里爬行的拷贝变得轻快——可以从/MT:16试起。让SSD保持大约十分之一的空余,因为接近满员的盘会失去写缓存余量,而且恰恰最先倒在这类负载上。避免把多个并行拷贝叠到同一个目标上,尤其是U盘:一条深队列胜过三条互相争抢的。拷贝缓慢时看看任务管理器的“性能”选项卡——队列很短而活动时间却钉在100%,说明你受制于延迟而非吞吐。
怪硬件之前,先用基准测试工具测一次:如果顺序速度落在标称值附近,而慢拷贝涉及的都是小文件或多个接收端,那么盘是好的,只是工作负载确实难。把一切都先塞进RAM的拷贝加速软件,承诺的多、兑现的少,崩溃时还拿数据冒险。大多数情况下,解决办法不是更快的盘,而是一条形状更好的拷贝命令。
常见问题与解答
为什么在高速SSD上拷贝大量小文件还是那么慢?
每个文件都要支付一笔与顺序速度无关的固定延迟和元数据成本,所以10,000个小文件可能比一个10 GB的大文件动得还慢。robocopy的/MT能把这项开销并行化。
怎么判断我的SSD是不是真的低于标称?
跑一次基准测试:如果大文件顺序读写落在标称值附近,那么盘是健康的,慢拷贝只是正常的小文件开销,不是缺陷。
继续阅读
联系我们: [email protected]