[深入理解文件系统之六]:Directory Name Lookup Cache

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:



作为BSD对文件系统最主要的三大贡献之一,Directory Name Lookup Cache 极大地提高了文件路径名解析的速度。那么什么是路径名解析和Directory Name Lookup Cache呢?


  • 路径名解析

考虑到现代文件系统中对多个文件系统的支持,可能存在一个绝对路径名,穿越了多个文件系统层的情况,因此现在没有办法像之前unix文件系统样用路径名之间找对应的inode/vnode节点,而应该逐层调用各自文件系统对应的vop_lookup()操作,伪码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if
     (absolute_pathname) {
     dirvp = rootdir
else  {
     dirvp = u.u_cdir
}
do
{
     name = extract string from pathname
     newvp = VOP_LOOKUP(dirvp, name, ...)
     if  not last component {
         dirvp = newvp
     }
}until basename of pathname reached
 
return  newvp
  • DNLC ( Directory Name Lookup Cache)

基于局部性原理,常用的文件可能会常常打开,这样就需要反复执行上面的程序,根据路径名找到vnode节点,为了避免这里带来的重复操作,DNLC(Directory Name Lookup Cache)建立起来了路径名和vnode的映射关系。更进一步,为了避免反复冗长的路径名解析,基于parent vnode和路径名生成了hash值, 然后建立这个hash值和当前vnode的映射关系。整个DNLC的数据结构和机制如下图所示:


wKioL1i8986z-ycbAABsjyMGzBo359.png


虽然最早在刚引入DNLC之后,在大量文件(500K~1000K)打开和关闭测试的情况下,命中率能够达到85%。但现在的DNLC的命中率应该可以达到90%以上,如果达不到,可以ncsize和最大进程数和用户数进行调节。



















本文转自存储之厨51CTO博客,原文链接: http://blog.51cto.com/xiamachao/1903607,如需转载请自行联系原作者





相关文章
|
Java API 数据处理
使用Java内存映射(Memory-Mapped Files)处理大文件
NIO中的内存映射 (1)什么是内存映射文件 内存映射文件,是由一个文件到一块内存的映射,可以理解为将一个文件映射到进程地址,然后可以通过操作内存来访问文件数据。说白了就是使用虚拟内存将磁盘的文件数据加载到虚拟内存的内存页,然后就可以直接操作内存页数据。
7089 0
|
4月前
|
Java
映射大量文件的正解,Description:Field commentMapper in zero.file.videoProject.controller.CommentController r
映射大量文件的正解,Description:Field commentMapper in zero.file.videoProject.controller.CommentController r
|
5月前
|
存储 缓存 API
file_cache: 使用文件缓存函数结果
file_cache: 使用文件缓存函数结果
61 15
|
存储 缓存 关系型数据库
ES优化文件系统缓存filesystem cache
ES优化文件系统缓存filesystem cache
314 2
|
存储 Web App开发 移动开发
📕Local Storage、Session Storage和Cache Storage之间的区别
你知道什么是Cache Storage、Local Storage和Session Storage吗?它们都是一些可以在你的浏览器里保存信息的介质,但是它们有什么不同呢?🤔
547 0
📕Local Storage、Session Storage和Cache Storage之间的区别
文件系统中,Path和Directory的区别
文件系统中,Path和Directory的区别
104 0
|
存储 索引
File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)
File Space Header & xdes(5)FSP HDR独立表空间结构(三十一)
|
Linux 编译器 C语言
Linux动态库常见问题之-"cannot open shared object file No such file or directory"的解决办法
Linux编写程序时,会经常的接触动态库,而在程序运行时可能会遇到类似于:libxxx.so cannot open shared object file No such file or directory的问题,这个代表什么含义,该怎么解决呢?
1165 0
下一篇
无影云桌面