簡單理解Memcached的Slab Allocation

五柳-先生發表於2016-06-06

簡單理解Memcached的Slab Allocation包含如下內容:

  1. Slab Allocation
  2. Growth Factor
  3. Slab Allocation的缺點

slab Allocation

Slab Allocation的原理——將分配的記憶體分割成各種尺寸的塊(chunk), 並把尺寸相同的塊分成組(chunk的集合),每個chunk集合被稱為slab。

Memcached的記憶體分配以Page為單位,Page預設值為1M,可以在啟動時通過-I引數來指定。

Slab是由多個Page組成的,Page按照指定大小切割成多個chunk。其結構圖如下:

Memcache's slab page and chunk

Growth Factor

memcached在啟動時通過-f選項可以指定 Growth Factor因子。該值控制slab之間的差異,chunk大小的差異。預設值為1.25。

通過memcached-tool檢視指定memcached例項的不同slab狀態,可以看到各Item所佔大小(chunk大小)差距為1.25

Memcache Slab Growth Factor

Slab Allocation的缺點

Slab Allocation可以有效的解決記憶體碎片問題,但是在如下情況下,會導致記憶體的浪費:

  1. 每個slab的chunk大小是固定的,當item的佔用空間實際小於chunk大小時,會出現記憶體浪費
  2. 每個slab的大小是固定的(因為page是固定的),當slab不能被他所擁有的chunk整除時,會出現記憶體浪費
  3. 按照Growth Factor因子生成指定大小的slab,而某slab id根本未被使用時,會出現記憶體浪費

參考資料

memcached全面剖析–2.理解memcached的記憶體儲存
Memcache記憶體分配策略

Memcached二三事兒

轉載:http://www.xiaoxiaozi.com/2013/04/29/2432/

相關文章