注册
登录
首页
网站近况
会员
标签
统计
帮助
LUPA论坛
»
内核问题答疑
» 请问关于local cache的问题
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
请问关于local cache的问题
godmatrix
初来乍到
个人空间
发短消息
加为好友
1
#
发表于 2007-10-23 16:56
只看该作者
请问关于local cache的问题
多处理器系统中,在结构struct kmem_cache中有个域是struct array_cache *array[NR_CPUS],在《Understanding the Linux kernel》这本书中,作者说这个结构是per-CPU
data structure,它对应这每个CPU的local cache。我想请问一下,这个local cache是通常见到的kmem_cache结构的cache吗?它是怎么实现的?还有local cache中的avail用来指向
free objects具体是怎么实现的?
谢谢!
UID
72349
帖子
16
精华
1
积分
查看
阅读权限
10
在线时间
10 小时
注册时间
2007-10-12
最后登录
2008-1-4
查看详细资料
TOP
加入LUPA互动社区,结交开源爱好者
黄富强
版主
开源志愿者
个人空间
发短消息
加为好友
2
#
发表于 2007-10-23 17:16
只看该作者
cache是什么?有何用?分配方法是如何实现的?
先要理清有关cache的数据结构链及相关的分配方法就能明白你的问题,基本原理一定要先弄清。
[
本帖最后由 黄富强 于 2007-10-23 17:19 编辑
]
http://fuqiang_huang88.lupaworld.com
http://blog.sina.com.cn/m/fuqiang_huang
http://fuqiang.blog.ccidnet.com/
http://forum.ubuntu.org.cn/weblog.php?w=99
UID
18733
帖子
704
精华
2
积分
查看
阅读权限
100
来自
哈尔滨
在线时间
638 小时
注册时间
2006-4-8
最后登录
2008-9-30
查看个人网站
查看详细资料
TOP
加入LUPA互动社区,结交开源爱好者
godmatrix
初来乍到
个人空间
发短消息
加为好友
3
#
发表于 2007-10-25 09:21
只看该作者
这里的cache是指内存中用来保存相同类型object的,其类型是kmem_cache,而在《ULK》书提出了所谓local cache是每个CPU用来存放free objects的,其类型为arrar_cache。我想弄清楚的就是这个local cache到底如何组织和实现。在函数kmem_cache_alloc和kmem_cache_free里都会用到这个local cache。如果我表述还不清楚的话,请麻烦翻看《ULK》8。2。11小节,自然就明白我说的意思。还是恳请各位大牛帮我解释一下这个问题!
[
本帖最后由 godmatrix 于 2007-10-25 09:35 编辑
]
UID
72349
帖子
16
精华
1
积分
查看
阅读权限
10
在线时间
10 小时
注册时间
2007-10-12
最后登录
2008-1-4
查看详细资料
TOP
加入LUPA互动社区,结交开源爱好者
kylintime
初来乍到
个人空间
发短消息
加为好友
4
#
发表于 2007-10-31 16:36
只看该作者
按我的理解,array_cache就是local cache的描述符,或者说是一个头部结构。内核对每个cpu的local cache的组织形式是先放置一个描述符,也就是array_cache结构,然后紧接着该结构会存放很多local cache,每个local cache就是一个地址结构,用于存放属于该cpu的本地cache的object地址,其数量由array_cahce中的数量域决定。avail域是代表该cpu的本地cache中空闲的对象数量,而每次分配对象的时候都是从最后一个对象开始分配,因此,从array_cache+1处再加上avail的值便可得到该cpu的第一个可分配对象的地址。
UID
56079
帖子
4
精华
0
积分
查看
阅读权限
10
在线时间
15 小时
注册时间
2007-7-11
最后登录
2008-1-9
查看详细资料
TOP
加入LUPA互动社区,结交开源爱好者
godmatrix
初来乍到
个人空间
发短消息
加为好友
5
#
发表于 2007-11-1 09:42
只看该作者
很高兴看懂了我提出的问题,也许是我表述不够清楚-
那等于说在每一个CPU内存中,放置了一个local cache描述符,然后在该描述符后面紧跟着该local cache,而该local cache实际上就是一个指针数组(avail是数组的维数),其中存放着指向其它普通cache(struct kmem_cache)中的free object。
还有我想知道的是在内存中普通cache描述符和local cache描述符存放在内存的什么位置,又是如何存放的?
UID
72349
帖子
16
精华
1
积分
查看
阅读权限
10
在线时间
10 小时
注册时间
2007-10-12
最后登录
2008-1-4
查看详细资料
TOP
加入LUPA互动社区,结交开源爱好者
‹‹ 上一主题
|
下一主题 ››
控制面板首页
编辑个人资料
积分记录
公众用户组
勋章
访问推广
基本概况
流量统计
客户软件
发帖量记录
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
管理统计