社区
Linux_Kernel
帖子详情
页高速缓存 address_space的问题
小魔菇
2010-01-13 03:22:58
每个inode都有一个address_space对象?由该address_space来维护该inode所拥有的所有页缓存?
不知道我的理解是不是对的
如果是对的 那么每个inode都需要一个address_space对象,每个inode维护一个基树,开销岂不是很大?
还是系统维护一个大的基树,然后每个inode的基树都挂在上面?
请高手指点。
...全文
276
5
打赏
收藏
页高速缓存 address_space的问题
每个inode都有一个address_space对象?由该address_space来维护该inode所拥有的所有页缓存? 不知道我的理解是不是对的 如果是对的 那么每个inode都需要一个address_space对象,每个inode维护一个基树,开销岂不是很大? 还是系统维护一个大的基树,然后每个inode的基树都挂在上面? 请高手指点。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小魔菇
2010-01-13
打赏
举报
回复
突然又想到了一个问题
基树的节点上挂的是页的描述符
那页存放在哪儿呢?
应该存放在专门一个缓冲区里面对吧 基树只是一个用来快速查找的工具
ULK2上面也没怎么说清楚 或者是我没看清楚吧 呵呵
小魔菇
2010-01-13
打赏
举报
回复
[Quote=引用 3 楼 deep_pro 的回复:]
lkd2上说
2.6以前的内核,页高速缓存是通过一个维护了系统所有的全局散列表进行检索,效率很低,
因为要用锁保护这么大的一片全局散列表,锁争用要更严重,同时散列表太大,但其实只需要跟当前文件相关的页,如果查找失败更糟糕,意味着需要遍历指定散列键值对应的整个链表。
这样看的话,“还是系统维护一个大的基树,然后每个inode的基树都挂在上面? ”是不会被使用的方法
我不懂这个基树的算法有多牛x,至少比以前的散列表好
如果文件很小的话,基树也会很小,查找起来也更迅速
在linux中有没有对小文件的页缓冲的机制?
---------------
不知道啊
[/Quote]
也对啊
如果只用一棵树的话 文件过多 这棵树就太大了
还是分开比较好 速度快一些
是不是有点空间换时间的感觉 呵呵
deep_pro
2010-01-13
打赏
举报
回复
lkd2上说
2.6以前的内核,页高速缓存是通过一个维护了系统所有的全局散列表进行检索,效率很低,
因为要用锁保护这么大的一片全局散列表,锁争用要更严重,同时散列表太大,但其实只需要跟当前文件相关的页,如果查找失败更糟糕,意味着需要遍历指定散列键值对应的整个链表。
这样看的话,“还是系统维护一个大的基树,然后每个inode的基树都挂在上面? ”是不会被使用的方法
我不懂这个基树的算法有多牛x,至少比以前的散列表好
如果文件很小的话,基树也会很小,查找起来也更迅速
在linux中有没有对小文件的页缓冲的机制?
---------------
不知道啊
小魔菇
2010-01-13
打赏
举报
回复
但是对小文件来说 每个文件都维护一个基树 得不偿失哦
在linux中有没有对小文件的页缓冲的机制?
deep_pro
2010-01-13
打赏
举报
回复
lz的理解很对
inode都有一个address_space对象,见inode的结构体定义,由该address_space来维护该inode所拥有的所有页缓存。
确实是每一个inode维护一个基树,这样在一个巨大文件中可以实现缓存页快速寻找
linux文件系统的
页
高速缓存
page cache中的核心数据结构
address
_
space
address
_
space
对象是文件系统中关于内存中
页
高速缓存
的核心数据结构。这篇博客以
address
_
space
对象为切入点,分析文件系统的
页
高速缓存
。 1背景 在文件系统中,内存中存在着dentry和inode结构,其中其分别的作用可以见我另一篇博客《dentry与inode》。由于这些结构要反复使用,所以内存里开辟了目录项
高速缓存
以及索引结点
高速缓存
,提高其访问速度。但这里要提到的是另一种
高速缓存
:
页
高速缓存
,它是一种对完整的数据
页
进行操作的磁盘
高速缓存
,即把磁盘的数据块缓存在
页
高速缓存
中。而ad
【
页
高速缓存
】
address
_
space
操作函数分析
在 radix Tree 源码分析这篇文档中对radix tree 进行了基础性的分析。 那么基于radix tree 的内核中的
页
高速缓存
会有什么样的操作函数呢?
页
高速缓存
的处理函数 对
页
高速缓存
操作的基本高级函数有查找,增加,和删除
页
。在以上函数的基础上还有另一个函数确保
高速缓存
包含指定
页
的最新版本。 1. 查找
页
函数find_get_page()接收的参数为指向
address
_...
页
高速缓存
(page cache学习)
最近要接触相关领域,学习一下共勉!!本文档使用linux为linux-4.4.4版本 磁盘
高速缓存
:是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保留在RAM中,以便对那些数据的进一步访问不用再访问磁盘而能尽快得到满足。 一种对完整的数据
页
进行操作的磁盘
高速缓存
。 几乎所有的文件读和写操作都依赖于
页
高速缓存
。只有在O_DIRECT标志被置位而进程打开文件的情况下才会出现例外:此时,IO数...
页
高速缓存
目录
页
高速缓存
address
_
space
对象 基树
页
高速缓存
的处理函数 查找
页
–find_get_page() 增加
页
–add_to_page_cache() 删除
页
更新
页
基树的标记 把块存放在
页
高速缓存
中 块缓冲区和缓冲区首部 管理缓冲区首部 缓冲区
页
分配块设备缓冲区
页
释放块设备缓冲区
页
在
页
高速缓存
中搜索块 __find_get_block()函数 __getblk()函数 __bread()函数 向通用块层提交缓冲区首部 submit_bh(
页
高速缓存
和
页
回写
1.
页
高速缓存
页
高速缓存
(cache)是Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体的讲,就是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。磁盘
高速缓存
的原因在于:一是访问磁盘的速度要远远低于访问内存的速度;第二,数据一旦被访问,就可能在短期内再次被访问到。
页
高速缓存
是由RAM中的物理
页
组成的,缓存中每一
页
都对应着磁盘中的多个
Linux_Kernel
4,469
社区成员
17,458
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章