![SSD 阵列上的 ext4 与 btrfs 性能对比](https://linux22.com/image/1420882/SSD%20%E9%98%B5%E5%88%97%E4%B8%8A%E7%9A%84%20ext4%20%E4%B8%8E%20btrfs%20%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94.png)
我观察到一些无法解释的事情。我正尝试使用 HP P420i 控制器和 SSD 来设计一个良好的文件系统配置。出于好奇,我尝试了 BTRFS(仍然不稳定,所以我不能指望它真的能用),并注意到读取速度约为 ext4 的 150% - 而写入速度相当。
需要说明的是,我使用的是 RAID0,带有两个 SSD,条带大小为 256Kb。我有 6 个磁盘,因此我创建了 3 个逻辑磁盘,每个磁盘 2 个 SSD - 仅用于测试。然后我使用 ext4、XFS 和 BTRFS 格式化它们。
当我写入(类似 dd if=/dev/zero of=test2 bs=512k count=20000 conv=fdatasync,fsync)并使用 iostats 观察系统时,我发现 BTRFS 和 EXT4 的写入速率大致相同,并且写入请求数量也相似:
(ext4-写入) 设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 统计数据库 0.00 0.00 0.00 1791.00 0.00 895.00 1023.43 141.73 78.97 0.56 100.00 (btrfs-写入) 设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 常量 0.00 0.00 0.00 1786.00 0.00 893.00 1024.00 137.87 77.21 0.56 100.10
当我阅读时,我观察到不同的画面:
设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util (ext4-读取) 常度存款 0.00 0.00 4782.00 0.00 597.75 0.00 256.00 1.57 0.33 0.18 84.10 (btrfs-阅读) 设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 常量 207.00 0.00 1794.00 0.00 886.40 0.00 1011.90 10.59 5.90 0.56 100.00 (xfs-阅读) 设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 顺差 0.00 0.00 4623.00 0.00 577.88 0.00 256.00 1.71 0.37 0.21 97.00
如果我尝试使用 dd 读取块设备,就会看到以下内容:
(读取块设备) 设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 常住人口 132055.00 0.00 4259.00 0.00 532.38 0.00 256.00 1.61 0.38 0.23 99.80 sdc 131750.00 0.00 4250.00 0.00 531.25 0.00 256.00 1.58 0.37 0.24 100.00 sdc 142476.00 0.00 4596.00 0.00 574.50 0.00 256.00 1.61 0.35 0.20 92.40
对于所有 3 个逻辑卷,所有设置似乎都相同(I/O 调度程序、预读……)。
因此,在其他所有条件相同的情况下,我清楚地看到 btrfs 每秒的读取次数要少得多,并且每秒读取的字节数明显更多。 rrqm/s 的数量 - 这是合并请求的数量。 我只能在使用 btrfs 格式化的设备上看到它。
内核:3.8.13-35.3.5.el6uek.x86_64 #2 SMP 2014 年 8 月 8 日星期五 21:58:11 PDT x86_64 x86_64 x86_64 GNU/Linux
困惑。btrfs 有什么特别之处(而 ext4 和 xfs 没有)以至于造成如此大的差异?
PS 否,使用挂载选项 compress=no 禁用压缩
答案1
BTRFS 大量使用内存缓存,这可能是导致此行为的原因。我观察到我的 Xeon E3-1220 系统上的读取速度高达 8GB/s,这与我当前的内存配置大致相同。请注意,实际硬件是 2 个 1.5TB 磁盘和 2 个 1TB 磁盘,页面文件位于 SSD 上(这也有所不同)。
[root@Helium ~]# dd if=/storage/btrfs-raid10/isos/ubcd533.iso.1 of=/dev/null bs=1M
592+1 records in
592+1 records out
621176832 bytes (621 MB) copied, 0.0770955 s, 8.1 GB/s