SMR 驱动器似乎最适合一次写入、多次读取。我在 SMR 设备上存储了大量硬链接重复目录结构,并希望删除最新的目录结构,但这个过程似乎非常缓慢。要么是出现了故障,要么这是预期的行为。
我可以想象出导致这种情况的几个原因,是否有具体的信息来解释这种情况?
想法:
- 更新文件表需要修改磁盘的早期部分,并且需要按照 SMR 重写大量数据。
- 链接文件需要修改文件表的引用计数更新,这再次需要大量重写数据。
更一般地讲,SMR 上的文件系统如何有效运行?数据分布在磁盘上,但文件表必须保持独立,否则叠瓦会降低性能。驱动器管理的 SMR 如何知道文件表在哪里,以便以任何特殊方式处理它?在这种情况下,某些文件系统是否比其他文件系统更好?
具体内容:
- 硬盘:Seagate Archive 6TB
- 操作系统:CentOS 7 内核 3.10.0
- 文件系统:BTRFS
- 驱动器使用率:66%
答案1
BTRFS 是写时复制(CoW),这意味着(一般来说)数据块严重碎片化(我使用 ZFS,同样的问题),包括文件表。
很可能每个被修改的扇区都会影响整个叠瓦单元,这解释了为什么您会看到糟糕的性能:例如,您正在写入 10 个数据块 (10x4=40 KiB)?由于缺乏局部性,您实际上可能正在读取 10x 10 MiB (40 MiB),然后再写入 40 MiB。再加上该过程的各个步骤中都存在寻道延迟,性能就会大打折扣。
除了切换到非 SMR 驱动器或非 CoW 文件系统之外,可能没有解决方案。
编辑: 附加信息 https://lwn.net/Articles/637035/(SMR 感知文件系统)
http://www.tomsitpro.com/articles/shingled-magnetic-recoding-smr-101-basics,2-933.html#p3“HGST 在其首批产品中使用了 256MB 带宽。Seagate 表示,带宽的大小可以根据自定义驱动器工作负载和应用程序进行调整”,因此您修改的每个扇区 (4 KiB) 的读写量可能为 256 MiB。