注意

本文档适用于 Ceph 开发版本。

写回限速

之前,文件存储在处理大量小 I/O 时存在问题。我们通过日志隐式地限流脏数据,但大量 inodes 可能在不填满日志的情况下被标记为脏,导致同步时间在最终同步时非常长。刷新器并不是解决这个问题的合适方案,因为它过于急切地强制写回小写操作,从而损害了性能。

WBThrottle 按每个 hobject_t 追踪未刷新的 I/O,并在任何脏字节数、脏 I/O 数或脏 inodes 超过开始刷新阈值时,按 LRU 顺序追踪 ::fsync。当这些中的任何一个超过硬限制时,我们在 _do_op 中阻塞于 throttle()。

请参阅 src/os/WBThrottle.h、src/osd/WBThrottle.cc

为了在写回过程中跟踪打开的 FD,现在有一个 fdcache 来缓存打开的 FD。lfn_open 现在返回一个缓存的 FDRef,一旦所有引用过期,它隐式地关闭 FD。

文件存储同步会 Flush 所有 wbthrottle 中的未完成对象。

当最后一个链接被移除时,lfn_unlink 清除未链接对象的缓存 FDRef 和 wbthrottle 条目,并断言该对象的所有未完成 FDRef 都已失效。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.