我想将 Linux SSD 缓存(dm-cache 或 bcache)与 Debian Jessie 生产服务器一起使用。(内核 3.16)
我的问题:dm-cache 和 bcache 模块在 Linux 3.16 中可靠吗?我需要将内核升级到较新的版本吗?
我还发现了有关 bcache 的令人担忧的消息:https://lkml.org/lkml/2015/12/22/154
请注意,我完全理解缓存模式选择(写回/写通)在可靠性和数据丢失方面的含义,我的问题更多是关于这些模块中的软件错误
2018 年 2 月,在持续集成服务器上使用 bcache 一年多之后进行跟进(jenkins 实例运行了大量密集型作业!)
服务器配置(本质上是存储堆栈)
硬件:
- 2 x 480GB SSD(三星 SM863 企业级 MLC)
- 2 x 4TB 硬盘 (希捷 Constellation ES.3 SATA)
- 戴尔 R730 - 双 Xeon E52670 - 128GB RAM
- 不硬件 RAID,无需电池/闪存支持的硬件写入缓存,这就是 bcache 的写回功能变得有趣的地方。
软件:
- 2016 年 9 月配置,从未重启
- 带有 4.6 内核的 Debian Jessie(来自上次更新时的官方 jessie-backport)
- 软件 MD raid 10
- 1 个 raid10 设备用于 2 个 SSD
- 1 个 raid10 设备用于 2 个 HDD
- 2 个 RAID 设备上的 2 个 LVM VG
- 在 SSD_RAID10 VG 上的逻辑卷上创建 bcache “缓存”设备
- 在 HDD_RAID10 VG 上的逻辑卷上创建 bcache“备份”设备
- bcache 缓存配置为写回
工作量
- 许多詹金斯作业(持续集成)
- CPU 密集型作业与 I/O 密集型作业混合使用
- 在使用 bcache 之前,I/O 平均延迟会定期上升到 5 秒以上(!!!)
- 该服务器的实际工作量仅从 1 年前开始(~2017 年 2 月)
根据 /proc/diskstats 在 bcache 设备上发出的 I/O 量)
- 写入350TB
- 6TB 读取(我仔细检查了一下,我认为大量的 RAM 对在 VFS 层缓存读取有很大帮助)
结果
- 非常稳定!机器从未重启过(正常运行时间 525 天),没有检测到损坏。
- 命中率很高!历史平均命中率为 78%,并且还在上升:最近几个月命中率超过 80%
- 写回有很大帮助:磁盘延迟现在降低了几个数量级,遗憾的是我没有对此进行准确的测量,但计算不再因写入突发而停滞。脏数据量超过 5GB,而硬件 RAID 写入缓存的大小通常在 512MB 到 1GB 之间)
结论
- bcache 在这个配置上非常稳定(但是 1 台机器,1 种配置,1 台机器年,不足以概括,但这是一个好的开始!)
- bcache 在这种工作负载下性能非常出色,并且写回模式似乎可以有效地取代硬件 RAID 写缓存(但请记住,断电时的可靠性尚未经过测试)
- 我个人认为 bcache 被低估了,使用它来打包一些有趣的解决方案也不错,但请注意,原作者现在开发了 bcachefs(一个基于 bcache 工作的文件系统),并且不再改进 bcache
答案1
我认为,SSD 存储成本的下降以及可用容量和选项范围的增加,使得在需要时使用固态存储并放弃选择性(可能有缺陷的)缓存的想法成为一个很好的理由。
如果您填写一些有关环境、容量需求和其他任何内容的详细信息,可能会有助于得到更好的答案。
答案2
我在看你的链接并检查了所有补丁,并手动验证了每个补丁都已合并到 vanilla kernel 4.9.0 中,最后一个补丁合并于 2016-10-27 04:31:17 UTC。最后一个补丁出现在 2016-12-11 19:17:54 UTC 发布的 4.9.0 中。所有这些补丁也都出现在从 16.04 反向移植的 Ubuntu 14.04 上的 4.4 内核中linux-lts-xenial_4.4.0-67.88
。
而且我不会过多关注“SSD 存储成本降低”,因为 HDD 存储成本也会降低。您仍然可以同时使用两者来省钱。或者,您可以用 NVMe 来代替 SSD,速度更快。
虽然由错误导致的损坏率可能仍然不为零,但是即使还有错误,其损坏率也足够低,因此您不必担心是否有备份,无论您使用缓存还是 RAID,都应该有备份。