我一直在思考如何加速磁盘 I/O,而我不断遇到的瓶颈之一就是日志。使用 SSD 来存储日志有一个明显的好处——除了只写缓存当然,除非我禁用带有写入缓存的日志(毕竟 devicemapper 似乎不支持屏障)。为了从在控制器上使用 BB 写入缓存中获得好处,我需要禁用日志 - 但这样操作系统应该会在中断后尝试对系统进行 fsck。当然,如果操作系统知道电池备份内存中有什么,那么它可以使用它作为日志 - 但这意味着它必须作为块设备公开,并且只能在操作系统的控制之下。
然而,我还没有找到合适的低成本设备(不,Flash 的写入均衡对于日志来说是不够的,至少对于使用智能媒体)。
虽然闪存设备、带有 BB 写缓存的磁盘/阵列控制器无穷无尽,但到目前为止我还没有发现任何东西能给我提供可作为块存储设备寻址的非易失性存储器。
答案1
您能解释一下为什么使用 SSD 进行日志存储具有明显的优势吗?所有 FS 都将日志存储为某种环形缓冲区,无论如何访问都是连续的。只需禁用 BBWC 上的屏障,它就可以达到最佳效果。
EXT3 和 EXT4 文件系统用于以“有序”模式挂载日志。在较新的内核中,默认为“回写”模式。在“有序”模式下,日志更新在写入任何数据之前提交到磁盘。在“回写”模式下,日志更新根据正常的 IO 调度程序策略写入磁盘,数据写入磁盘不是日志更新被阻止。从性能角度来看,你基本上看不到日志的参与。
您需要禁用屏障(并可能屏蔽 FUA 和 SCSI_CACHE_SYNCHRONIZE SCSI CDB),否则您的性能会受到影响。您可以使用 BBWC 在日志和数据上获得屏障的语义(或刷新到磁盘并等待确认的任何内容)。
没有操作系统 (VFS) 适当支持的 NVRAM 无法帮助您解决 BBWC(无论如何,它也是某种 NVRAM)无法解决的问题。在 Linux 2.4 中,支持某些 NVRAM 设备来加速同步运行的 NFSv2/3,但 BBWC 已使它们过时。
正确使用闪存设备的方式是不要将它们视为块设备,而是将其用作 NAND 闪存。但这需要重新设计我们认为文件系统应该如何以更通用的方式与底层存储进行通信。目前内核中还没有合适的 API 来使用 NAND 闪存。
答案2
目前唯一的答案是 Nils 的 - 但根据我的评论,还有 iRAM 和超光速设备。所以我就此结束
答案3
SSD 驱动器不应用于频繁的写入操作。为什么不简单地将日志放到由普通磁盘(至少 4 个“小”磁盘)组成的单独防错 RAID 系统(5 或 10)上呢?