我已经接受了 Linux 上的 NTFS(-3g) 性能会比 Windows 上的 NTFS 性能慢这一事实。我可以在 Windows 上以大约 100+ MB/s 的速度写入外部 NTFS 格式的 USB 3.0 HDD,而在 Debian (Wheezy) 机器上则必须满足 30 MB/s(给予或接受)。
然而,这不是问题。我发现(根据经验),如果我想将 20 个文件从我的盒子复制到 HDD,复制开始时为“正常”30 MB/s,但逐渐减慢到 4 MB/s!然而,如果我一次(连续)复制 5 个文件,复制速度将保持在 30 MB/s所有四个复制进程。顺便说一下,这并不是 Debian 特有的。我在 Fedora 和 Ubuntu 上观察到类似的行为。
我的问题是,这种行为正常吗?我应该担心吗?如果出现问题,我应该如何调试/修复它?
答案1
运行并行副本时,您会看到驱动器磁头寻道延迟的影响。
对于大多数文件系统(包括 NTFS 和 ext[234]),数据存储在驱动器上的不同位置。这里是文件系统信息,那里是块分配数据,那里是文件数据方式。
当写入单个文件时,元数据变化相对较少,因此磁头大多位于写入数据块的正确位置。当运行 20 个并发写入时,磁头必须在块分配区域和数据区域之间移动大约 20 倍的频率,并且磁盘磁头寻道的测量时间为数十毫秒。
当写入本机文件系统时,可以对完成的查找量进行一些自由操作(例如,在内存中保留部分空闲列表的副本,并且只不频繁地写出该副本,从而节省大量查找)。我预计这同样适用于 Windows 下的 NTFS,但 NTFS Linux 文件系统开发人员不能如此漫不经心,选择一致性而不是性能。