LWN:Fedora里的fstrim

关注了就能看到更多这么棒的文章哦~

Fedora and fstrim

By Jake Edge
December 31, 2019

原文来自:https://lwn.net/Articles/808278/

最近,在Fedora开发mailing list上有在讨论在Fedora 32系统上开始定期自动执行fstrim命令。fstrim命令会让文件系统通知底层的存储设备某些block里的数据不再有用了,从而提升在SSD等存储场景下的性能。讨论中提出了很多问题以及担忧,包括是否在Fedora早期版本升级时是否改变缺省的行为,还有kernel是否应该负责处理这个问题。

这个修改Fedora 32系统设置为“enable fstrim.timer by default”的提议是由项目经理Ben Cotton代表Fedora负责人Chris Murphy所提出的。fstrim.timer systemd文件会负责在mount上来的文件系统里每周定期运行fstrm.service(其中会触发fstrim)。他说“在有相关支持的硬件上(例如大多数SD卡,SSD,NVMe存储盘),LVM瘦存储,文件系统(ext4, XFS, Btrfs, f2fs,不过不包括FAT16/32),fstrim会通知底层物理存储设备的固件哪些block是不再使用的。这个提示信息会改善存储块的寿命平衡也会让块擦除更加高效。”

不过有些设备对trim(或者discard)操作的支持并不完善,哪怕那些能支持的设备也会需要耗费不少时间来响应trim命令,这样会导致此设备的其他I/O操作会被延后。这个定时timer设置在当地时间每周一的00:00,这主要就是希望减轻对大多数用户的影响,不过那些正处于睡眠或者关机状态的系统则会在唤醒或者启动后执行fstrim,这样的情况下对用户的性能影响还是很明显的,不过“预计大多数用户不会感知到”。

不过有人担心在进行软件包升级或者Fedora系统升级时如果改变这个行为会有风险。Stuart D. Gathman说,如果用户关闭了这个功能,在升级后就不应该再次打开。John M. Harris Jr认为应该只在新安装的系统上打开这个功能,不要在升级时打开。Murphy不太赞同:“我觉得在升级时也应该打开这个功能,因为大家升级时都是期望在不做纯净安装的前提下能得到新功能。不过我也不确定如果用户决定关闭了这个功能的话,如何在F32 > F33升级的时候不会在用户不知道的情况下又打开了。但是在F31 > F33升级的时候还是应该打开,因为Fedora支持跳过一个版本的升级。这里确实应该想想怎么做好。”

他也指出需要在/etc下面放置对这个timer和服务的配置信息,这样可以确保在系统升级的时候这些配置不会像/usr下面的文件那样被替换掉。Harris抱怨说这样用户就很难注意到这个变动了,不过其他人指出在release note里面会有说明,也会包含如何关闭这个功能的信息。

Lennart Poettering想知道为什么kernel不能直接处理好trim工作。由user space来告知kernel去做trim,看起来不是很高效:“如果这个功能确有必要,这么小的事情为什么不让kernel自己直接做了?”Vitaly Zaitsev猜测trim操作在某些设备上可能导致数据损害,而Poettering指出把这个动作放到user space在这一点上并没有帮助。除此以外,他还问道这个新增功能和ext4, XFS, Btrfs等文件系统支持的discard这个mount选项有什么区别;“既然文件系统本身就可以随时处理好,我们为什么需要userspace来发起这个同样的操作呢?”

Louis Lagendijk回答说这个mount选项会对每个被释放的block进行trim/discard操作,这会导致在不可预知的时间点发生意料之外的额外latency。此外,Murphy认为设备本身这边提供的信息不足以让kernel做正确决策。其他的发行版(以及操作系统)都会定期做一次空闲block的批量trim动作:“每周执行一次这个命令对人不会有什么损害的,对那些手头拥有相应设备的人来说还会有不少好处。个人看来这是最普遍适用的做法了。在这个方案里也提了,其他发行版在多年以前就有这个功能了。”

Murphy在另一封邮件里提到了5月份的一篇LWN文章(https://lwn.net/Articles/787272/  ),其中介绍了discard的一些问题。他不反对最终也许能找到个kernel解决方案,不过目前的乱摊子先要解决:“那么多种设备,其中的固件的flash translation layer (FSL)层行为各自都有差异。这些行为没有一个办法能够告知文件系统或者块设备层,因此kernel无法自适应处理。例如,FTL可能会在SSD快满的时候改变自己的行为。这样用户针对相同的workload、相同的SSD厂商、型号、固件,可能会碰到不同的问题,仅仅是因为SSD容量快用光了。kernel开发者会想到的一个方案是缺省打开文件系统的discard这个mount选项(online discard),这样一来被惹怒了的最终用户就会逼迫厂商来修复自己这个烂摊子。这很滑稽吧,现代社会里发明出来的最狗屁不通的文明方案是保质期。这个主意一定会导致很多指责。这些问题应该在9年前就解决,而不是2020年。”

还有一些讨论,是关于/etc/crypttab里面的discard选项的,这会允许LUKS加密过得device-mapper存储卷的discard操作可以传递到底层的存储设备去。Murphy说,在Fedora 27里面就已经设置了这个选项,不过,因为缺省没有周期性的fstrim操作,对大多数用户来说其实没有帮上忙。不过Zaitsev提到在LUKS存储卷上做discard操作的话,可能会导致一些信息泄露,对于那些重视安全性的用户来说还是会关闭这个选项的。

正如这个方案里面指出的,Ubuntu和openSUSE已经打开fstrim.timer一段时间了,Fedora算是晚的。估计2020年早期,Fedora Engineering Steering Committee (FESCo)就会介入。既然Fedora的目标是成为第一,那么FESCo应该不会愿意在这方面再多落后一段时间了。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值