忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 543 | 回复: 3

[文件系统] 请教一个页高速缓存的问题。 [复制链接]

论坛徽章:
0
发表于 2017-02-12 16:17 |显示全部楼层
5可用积分
本帖最后由 ymc4444 于 2017-02-12 16:22 编辑

问题一:
ULK3 P607“在linux内核的旧版本中,主要有两种不同的磁盘高速缓存,页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS(管理磁盘文件系统)访问的块的内容保留在内存中。
"后者把通过VFS...."这一句能否给举个例子,一直不太明白。

以下为个人理解:
如读一个磁盘文件file1时,分为如下两步:(1)首先要读包含file1 inode结点的磁盘块;(2)读file1的内容;
那么(1)中读的内容放在块高速缓存中,其树根是与块设备相关的bdev文件系统中索引节点的address_space对象?
     (2)中读的内容放在页高速缓存中,其树根是file1 inode对象的address_space中?



问题二:
ULK3 P610

“下面是内核创建缓冲区页的两种普通情况:”
(1)当读或写的文件页在磁盘块中不相邻时。发生这种情况是因为文件系统为文件分配了非连续的块,或因为文件中”洞“。
(2)当访问一个单独的磁盘块时(例如,当读超级块或索引节点块时)。
“当读或写的文件页在磁盘块中不相邻时。”这一句不太理解,能否给解释一下?文件页是个什么概念?


问题三
通过dd if=/dev/sda1 of=/tmp/file1 count=1024 blocksize=1M,这样读sda1时,读到的内容也放在bdev文件系统中块设备文件的高速缓存吗?

打赏鼓励一下!

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2017-02-24 20:40 |显示全部楼层
你分这么多,我分这么少,你好意思3问题才给5分么?

1) 他的旧版说的是2.4,当时page cache用做文件页的缓冲,page的键值是(inode, pgoff );  buffer cache用做文件系统metadata的缓冲,buffer的键值是( bdev, 块号)

2) page cache中的页4K,文件系统的块1K,那么一个文件页很可能对应到4个离散的磁盘块。

3) 是的

评分

参与人数 1信誉积分 +5 收起 理由
ymc4444 + 5 很给力!

查看全部评分

论坛徽章:
0
发表于 2017-02-28 13:46 |显示全部楼层
多谢仁波切

论坛徽章:
0
发表于 2017-02-28 14:21 |显示全部楼层
问题一:

如读一个磁盘文件file1时,分为如下两步:(1)首先要读包含file1 inode结点的磁盘块;(2)读file1的内容;
那么
(1)中读的内容放在块高速缓存中,其树根是与块设备相关的bdev文件系统中索引节点的address_space对象?
address_space 是文件物理“内容”的  连续内存的逻辑体现。
。。。我没看懂你问题。
           inode和本身存储空间 和 inode描述空间 不一样  。
           inode本身的空间应该由 buffer head 描述,属于文件的metadata
           inode描述对应的address_space 就是文件内容。

(2)中读的内容放在页高速缓存中,其树根是file1 inode对象的address_space中?
          看上面。
          树根是啥东西?



问题二:
ULK3 P610

“下面是内核创建缓冲区页的两种普通情况:”
(1)当读或写的文件页在磁盘块中不相邻时。发生这种情况是因为文件系统为文件分配了非连续的块,或因为文件中”洞“。
(2)当访问一个单独的磁盘块时(例如,当读超级块或索引节点块时)。
“当读或写的文件页在磁盘块中不相邻时。”这一句不太理解,能否给解释一下?文件页是个什么概念?

我感觉我上面的问题应该回答你了。
文件在内存中是连续的(address_space) 在磁盘中不一定连续 。怎么实现?没啥魔法  文件系统的作者要 搞定他,自己实现readpage function 提取一个文件1或者n个page的内容 到指定page就好了。
所以在pagecache启动 的时候。 你读写文件都是先添完善addressspace 往里面加page ,然后在填充 page内容 。 组成连续的内容。







问题三:
通过dd if=/dev/sda1 of=/tmp/file1 count=1024 blocksize=1M,这样读sda1时,读到的内容也放在bdev文件系统中块设备文件的高速缓存吗?

运行之后如果内存够用。  所有的内容都在 pagecache里面
“bdev文件系统中块设备文件的高速缓存”  这个概念不对。
pagecache就是个 表。  可以包含多个bdev设备 。。。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP