DEntry Cache
在文件系统(特别是HDFS)使用过程中,会产生大量的通过FullPath查询Inode的子请求,这类请求会转换成逐层目录的Posix语义Lookup(ParentInodeId, Name)操作。
- 例如:通过FullPath的GetAttr,path为/A/B/C/D,那么就需要转换成多次的Lookup数据库操作:
- Lookup(RootInodeId, a) = AInodeId
- Lookup(AInodeId, b) = BInodeId
- Lookup(BInodeId, c) = CInodeId
- Lookup(CInodeId, d) = DInodeId
上述转换由于串行查询数据库,会导致查询时延成倍增加。DEntry Cache就是使用缓存技术,将低查询数据库时延。
本文将介绍几种典型的DEntry Cache设计,并给出比较结果。
不同文件系统DEntry Cache设计
FS | 缓存位置 | 缓存内容 | 处理策略 | 淘汰策略 | 一致性 | 总结 | 分类 |
---|---|---|---|---|---|---|---|
HDFS | 单MDS全缓存 | (Pid, Name)->(InodeId) | 串行化遍历每一级目录。在内存中进行Lookup,有修改元数据操作时更新缓存 | 无 | 多客户端一致 | 全缓存DEntryCache | 全缓存 |
Lin |