Fstrim 破坏了 bcache 的性能

Fstrim 破坏了 bcache 的性能

自 Ubuntu 18.04 以来,我使用的两台机器(一台台式机和一台笔记本电脑)都开始偶尔出现启动速度非常慢的情况,并且启动后所有程序的性能都非常慢。两台机器都通过 bcache 使用小型 SSD 和更大的 HD。

除了这些情况外,它们都很快。与其他仅配备 SSD 的 PC 相比没有明显差异。Bcache 很棒。而且通常在缓慢启动后重新启动会使一切恢复正常。这就是我花了这么长时间深入研究它的原因。

按照我在 askubuntu 上找到的说明,我systemd-analyze发现是 fstrim 导致了这个问题。

$ sudo systemd-analyze blame
2min 9.448s fstrim.service
...

使用以下命令找到该包:

$ dpkg -S fstrim
util-linux: /sbin/fstrim
util-linux: /usr/share/man/man8/fstrim.8.gz
util-linux: /lib/systemd/system/fstrim.service
util-linux: /lib/systemd/system/fstrim.timer
util-linux: /usr/share/bash-completion/completions/fstrim

我猜想这个 fstrim 会破坏 bcache 的性能。它计划每周运行一次,这与观察到的行为一致。它可能认为 bcache 设备是一个巨大的 SSD,并导致启动速度非常慢,这也会扰乱缓存,因此此后的每次访问都是缓存未命中。

这个问题在我的计算机上已经修复,因为我按照说明禁用了 fstrim 及其计时器这里并且没有再发生启动缓慢的情况。

rm /var/lib/systemd/timers/stamp-fstrim.timer
systemctl stop fstrim.service fstrim.timer
systemctl disable fstrim.service fstrim.timer
systemctl mask fstrim.service fstrim.timer

但可能有更好的解决方案。例如:应该有一种方法可以仅对一个分区编辑 fstab 禁用 fstrim。
有,或许……我刚刚发现它正在阅读ArchLinux 的维基和一个链接到 kernel.org从那里开始。您只需nodiscard在 fstab 中添加该 bcache 文件系统的行即可。我还没有测试过。在我的情况下,它将是:

...
# /home was on /dev/bcache0 during installation
UUID=0880deae-1eeb-4c07-af01-a3db9d2d6282 /home           ext4    defaults,nodiscard        0       2
...

更好的办法是将 bcache 报告为没有 trim 支持,lsblk --discard或者将 fstrim 识别 bcache 分区并避免它。

有什么建议吗?我应该提交错误报告吗?在哪里?

相关内容