memcached中的slab类和内存分配

问题描述 投票:0回答:1

我最近开始浏览memcached源代码,我遇到了这个结构。根据我的理解,大约有64个板块,每个板块代表一个独特的块大小。如果我们采用第一个slab类(大小为80,那么)那么属于这个slab的页面会将它的内存分成80个字节。

typedef struct {
  unsigned int size;      // sizes of items
  unsigned int perslab;   // how many items per slab

  void *slots;            // list of item ptrs
  unsigned int sl_curr;   // total free items in list

  unsigned int slabs;     // how many slabs were allocated for this class

  void **slab_list;       // array of slab pointers
  unsigned int list_size; // size of prev array

  size_t requested;       // The number of requested bytes

} slabclass_t;

我不明白这一行,

unsigned int slabs;     // how many slabs were allocated for this class

他为平板类分配了多少块板是什么意思?每个平板类都必须是唯一的吗?为什么一个板坯类中会有多个板坯?我错过了什么吗?

caching memory memcached libmemcache slab
1个回答
0
投票

slabclass_t的分配平板基本上是一大块内存,承载perslab大小的size项目。如果使用该slab中的所有项目,Memcached将分配另一块内存并将其添加到slab_list。这些记忆块也被称为pagesslab_pages

因此,如果你启动一个新的Memcached服务器并为slab类存储一个项目(比如size = 80),那么对于这个slab类slabs=1。一旦你在那个类中存储perslab+1项目,你将有slabs=2slab_list将包含2个项目。

基本上,你有slab_listslabs的长度,而list_size是它的容量。

我从slabs.c得到了大部分这个,所以如果我出错了,请纠正我。

© www.soinside.com 2019 - 2024. All rights reserved.