- 论坛徽章:
- 0
|
> 问题1和问题2中提到“每一个cache set的大小为32k/8 = 4K” “slab先在内存中分配page页面(4K)” ,这里的cache set和page大小都是4k(slab大小为1页),问题1可以转述为:这两个值相等或者成比例是不是必然的,是不是也可以说是着色的前提条件?
在分配新slab对象的时候,如果当前cache中已没有可用对象(即空闲空间),系统会从内存池中申请新page,最多可达10个page,在创建cache时系统会根据slab object的大小计算并选择最优值。前面举例中只是假设分配了一个page, 两个值没有直接关联。着色的前提是 有“用不着的剩余空间”,如果slab object正好是PAGE_SIZE/2的话,就没有“剩余空间”了,毕竟slab的根本目的还是为了减小内存碎片。
> slab未必在所有情况下都有性能的提升,那么最理想的被优化的情境是不是这样:某种slab对象大小刚好大于page大小的一半,这样page内部不会容纳另外的同类别对象,同时也有足够的空间去着多种颜色(除去对象大小的一小半page)。可以这样理解吗?
slab着色的目的是为了最大化的利用cache line,可以提升操作 同一个slab cache 的性能。但当所有的人都去竞争有限的资源时,“有限的资源”才真正决定着整合性能。建议读一下内核代码,内核在分配slab对象时除了着色外还会考虑地址对齐、内存使用率、管理数据的安排等多种因素。
|
|