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

他所说的为一个slab类分配了多少个slab是什么意思?每个slab类都必须是唯一的,对吧?为什么一个slab类中会有多个slab?我错过了什么吗?

4

1 回答 1

1

一个已分配的类slabslabclass_t基本上是一块内存,它承载了perslab许多大小的项目size。如果使用了该slab 中的所有项目,Memcached 会分配另一块内存并将其添加到slab_list. 这些内存块也称为pagesor slab_pages

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

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

我从slabs.c中获得了大部分内容,所以如果我有什么问题请纠正我。

于 2019-03-12T07:09:57.517 回答