免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2842 | 回复: 7
打印 上一主题 下一主题

[内存管理] free命令的buffer/cache [复制链接]

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-02 16:32 |只看该作者 |倒序浏览

tao ma童鞋在他的blog中对这个buffer/cache进行了分析

http://blog.tao.ma/?p=10


下边是我的实验:

root@kernel:~# free
             total       used       free     shared    buffers     cached
Mem:       2058704     626532    1432172          0      34028     275880
-/+ buffers/cache:     316624    1742080
Swap:      2093052          0    2093052
root@kernel:~# echo 3 > /proc/sys/vm/drop_caches
root@kernel:~# dd if=/dev/sda of=/dev/null bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000字节(1.0 GB)已复制,17.8285 秒,58.8 MB/秒
root@kernel:~# free
             total       used       free     shared    buffers     cached
Mem:       2058704    1417524     641180          0     750016     295728
-/+ buffers/cache:     371780    1686924
Swap:      2093052          0    2093052

为什么buffer从33.2MB变成了732.4MB?
看那个代码意思应该是把所有块设备的设备文件的大小加到一起,这700MB哪里来的?

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
2 [报告]
发表于 2012-06-02 19:01 |只看该作者
回复 1# embeddedlwp
不是块设备文件的大小,而是块设备address_space基树中拥有的页面的数量。

   

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
3 [报告]
发表于 2012-06-02 21:46 |只看该作者
不是很明白怎么得到这个数值的。

buffer page,从现在的实现上来说,是建立于裸block device的page cache之上的一种cache机制。纯粹用page cache的话,一个cache单位是由file + page offset标识的。但文件系统有时需要得到某个block device的某个block,这时根本没有文件的概念,需要使用另一种disk cache,即buffer cache,其中一个cache单位由block device  + block number来标识。

早期的disk cache只有buffer cache,每次想读block device:block number时,首先看看buffer cache里有没有,没有则先把目标数据读到buffer cache里;写则直接写到buffer cache,期待下次读或写时能直接操作buffer cache里的数据。page cache是后来发展出来抽象层次更高的cache机制。2.4时两种cache共存,2.6里则将buffer cache建立于page cache之上。

读一般文件时,只要一页的内容在磁盘上是连续的,数据就直接进了page cache;如果不是连续的,则将算出各个block在块设备上的page offset,将这些page带进raw块设备文件的page cache,再获取其中有用的部分。如果直接读写raw块设备文件,理论上来说,相当于读写一个数据在磁盘上完全连续的文件,应该可以认为,此时像读写一般连续文件一样,数据全部进了raw块设备的page cache里,但这个page cache却被视为构建buffer cache之处,当作buffer page处理了。最后的结果,却是跟有意生成buffer cache(显式通过buffer接口读取一个block)或者无意生成buffer cache(读写某文件在磁盘上不连续的一页),效果是一样的。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2012-06-03 09:09 |只看该作者
本帖最后由 embeddedlwp 于 2012-06-03 10:30 编辑

回复 3# tempname2


论坛徽章:
0
5 [报告]
发表于 2012-06-06 09:18 |只看该作者

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
6 [报告]
发表于 2012-06-06 10:12 |只看该作者
ls上的开心啥,貌似看了3楼的还是不知“为什么buffer从33.2MB变成了732.4MB?”怎么得出的啊!

论坛徽章:
0
7 [报告]
发表于 2012-06-09 07:27 |只看该作者
回复 6# embeddedlwp
LZ还没有毕业吧,进步神速,很牛啊。。

   

论坛徽章:
0
8 [报告]
发表于 2012-06-09 09:07 |只看该作者
这个是不是要看dd命令是怎么实现的。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP