这个 btrfs 快照删除性能正常吗?

tim*_*tim 5 performance snapshot btrfs

我有几个运行 Debian 8、dovecot 和 btrfs 的机器。我正在使用 btrfs 快照进行短期备份。为此,我保留了邮件子卷的 14 个快照。

在删除快照之前,性能还可以:一旦 btrfs-cleaner 启动,一切几乎都停止了。这会导致 drbd 由于超时而失去与辅助节点的连接。这发生在几个盒子上,所以它不太可能是硬件相关的问题。

Spike 是删除快照的地方: 收集负载统计

我不敢相信这是正常的行为。所以我的问题是:有没有人遇到过这个问题,有没有关于如何解决或调试它的想法,或者作为最后的手段如何通过做不同的事情来避免它?

系统是 Dell R710, Debian 8, Kernel 3.16, Mount options: rw,noatime,nossd,space_cache

编辑:更多系统信息

双 R710、24GB RAM、H700 w/writecache、8x1TB 7.2k Sata 磁盘作为 RAID6、DRBD 协议 B、用于 DRBD 的专用 1Gb/s 链接

编辑:通过 rm -rf 删除快照内容。为 IO 节流,否则它会像 btrfs-cleaner 那样跑掉:

收集负载统计

我会得出结论,这在 io 方面更糟糕。唯一的好处是我可以控制用户空间rm的IO负载。

另一个编辑:Iops massacree

收集 iops 统计信息

sho*_*hok 5

在 CoW 世界中(基本上是 BTRFS 和 ZFS),删除快照/子卷需要许多“繁重”的元数据操作,这意味着许多头搜索。这是因为文件系统会解析自己的结构,以确定违规快照专门使用的块。反过来,这会使系统屈服。

要确认这是问题所在,请执行以下操作:

  • 打开两个终端 screen
  • 在第一个终端上,运行 iostat -x -k 1
  • 在第二个终端上,删除快照
  • 在删除过程中,检查第一个终端:你可能会发现你的磁盘被 100% 占用,读取了很多很多小数据块。

如果确认问题,您可以尝试删除快照内容(使用简单的rm),然后删除快照本身。

附带说明:虽然 CoW 文件系统非常灵活,但它们的架构并不是为了纯粹的性能。虽然 ZFS 仍然非常快,但对于 BTRFS 却不能说同样的事情。

无论如何,删除大型子卷对 ZFS 也是有问题的(直到它实现了后台运行的删除过程......)