发新话题
打印

请问关于local cache的问题

请问关于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具体是怎么实现的?

谢谢!
cache是什么?有何用?分配方法是如何实现的?
先要理清有关cache的数据结构链及相关的分配方法就能明白你的问题,基本原理一定要先弄清。

[ 本帖最后由 黄富强 于 2007-10-23 17:19 编辑 ]
这里的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 编辑 ]
按我的理解,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的第一个可分配对象的地址。
很高兴看懂了我提出的问题,也许是我表述不够清楚-
那等于说在每一个CPU内存中,放置了一个local cache描述符,然后在该描述符后面紧跟着该local cache,而该local cache实际上就是一个指针数组(avail是数组的维数),其中存放着指向其它普通cache(struct kmem_cache)中的free object。
还有我想知道的是在内存中普通cache描述符和local cache描述符存放在内存的什么位置,又是如何存放的?
发新话题