免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: qtdszws

映射的冲突 [复制链接]

论坛徽章:
0
发表于 2007-06-21 14:42 |显示全部楼层
原帖由 思一克 于 2007-6-21 14:31 发表于 37楼  
我不是坚持,也不是认为,
而是用程序实验了结论:读FAT分区的普通文件后,每一个page(cached)都有buffer_head.

读EXT2的文件后没有。
所以”读普通文件不用buffer_head"至少在读FAT分区文件是不对的 ...

请讲述一下你是如何实验证明出每一个page都分配了buffer_head结构的。

论坛徽章:
0
发表于 2007-06-21 14:43 |显示全部楼层
好。

这中问题找材料没有大用处。因为1024也不是错的呀。比如在非常老的386上,也许默认安装成了1024块大小的文件系统。或者在好机器上安装时指定了块大小。

我说的是一般机器默认安装的情况下是4096。

原帖由 zx_wing 于 2007-6-21 14:40 发表于 39楼  

好的,等忙完手上的工作,我会在block_size函数中加printk看看。
但我仍会试着找到有决定性证明的资料。因为这种通过“看”得到的信息不可靠,很可能换个平台就不一样了。例如我一直认为x86平台上linux默认的 ...

论坛徽章:
0
发表于 2007-06-21 14:44 |显示全部楼层
原帖由 思一克 于 2007-6-21 14:40 发表于 40楼  
这是用一个程序输出的结果。

super blocks list for all file systems:
sb c12b8a00 type c03a8680        sysfs     -- blksize 4096 s_root c12b28c0 / bdev 00000000
sb c12b8800 type c03a9140        ...

很好,这个例子说明了不同文件系统中block size大小是不一样的。

论坛徽章:
0
发表于 2007-06-21 14:49 |显示全部楼层
看到的信息比”资料“更可靠。至少在你看的那个机器和系统版本上是无比正确的。

资料对于非对即错的问题有大帮助。对于可以调整参数“块大小”问题,基本没有多大意义。

原帖由 zx_wing 于 2007-6-21 14:40 发表于 39楼  

好的,等忙完手上的工作,我会在block_size函数中加printk看看。
但我仍会试着找到有决定性证明的资料。因为这种通过“看”得到的信息不可靠,很可能换个平台就不一样了。例如我一直认为x86平台上linux默认的 ...

论坛徽章:
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
发表于 2007-06-21 14:53 |显示全部楼层
我截获的不一定是默认值,而且对于linux下的那些工具也不怎么会使。

但是首先是默认的1024,
然后hardsect_size做一修改,这种修改除非hardsect_size>1024才发生
然后以1024为块大小读sb
然后以sb->sb->s_blocksize_bits再一次修改,可能修改为2048或者4096

最后当ext2_read_super做完如上的工作后,block_size得以最终确定,写到了blksize_size数组中,就不会再变化了。

论坛徽章:
0
发表于 2007-06-21 14:54 |显示全部楼层
读文件后,找到文件的address_space, 找到所以影射的pages,
如果
page_has_buffers(page)
为真,
打印出各buffer_head.  

page_bufers(page)

你可以试图做以下看。很有意思的。


原帖由 zx_wing 于 2007-6-21 14:42 发表于 41楼  

请讲述一下你是如何实验证明出每一个page都分配了buffer_head结构的。

论坛徽章:
0
发表于 2007-06-21 14:56 |显示全部楼层
那你那LDE看,块大小是存在硬盘上的(super block)。
多么简单的方法。


原帖由 塑料袋 于 2007-6-21 14:53 发表于 45楼  
我截获的不一定是默认值,而且对于linux下的那些工具也不怎么会使。

但是首先是默认的1024,
然后hardsect_size做一修改,这种修改除非hardsect_size>1024才发生
然后以1024为块大小读sb
然后以sb-> ...

论坛徽章:
0
发表于 2007-06-21 15:13 |显示全部楼层
原帖由 思一克 于 2007-6-21 14:54 发表于 46楼  
读文件后,找到文件的address_space, 找到所以影射的pages,
如果
page_has_buffers(page)
为真,
打印出各buffer_head.  

page_bufers(page)

你可以试图做以下看。很有意思的。



page_has_buffers??2.6内核中有这个函数吗?在哪儿?要检测一个页是否是buffer page,只要看PG_private标志就行了啊。
这个实验原理简单,但实现麻烦,还要专门写个module,如果版主能给出源码最好,没有就算了,我也不打算去做,没有时间。因为通过读read整个源码过程里面我没有看到和buffer head打交道的地方,加上ULK的佐证,我还是比较确信读regular file不需要bh。

论坛徽章:
0
发表于 2007-06-21 15:21 |显示全部楼层
不用MODULE,修改vfs_read

在file->f_op->read()
之后,根据file 可以找到一切。



原帖由 zx_wing 于 2007-6-21 15:13 发表于 48楼  

page_has_buffers??2.6内核中有这个函数吗?在哪儿?要检测一个页是否是buffer page,只要看PG_private标志就行了啊。
这个实验原理简单,但实现麻烦,还要专门写个module,如果版主能给出源码最好,没有就 ...

论坛徽章:
0
发表于 2007-06-22 08:55 |显示全部楼层
原帖由 qtdszws 于 2007-6-21 12:19 发表于 30楼  


是否可以说,
在v2.4.0中,对普通文件的读写的buffer_head不进入hash,对设备文件的读写和文件系统的metadata进行读写的buffer_head进入hash
在v2.4.32中,对普通文件的读写和对设备文件的读写的buffer_hea ...


请高手指点一下啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP