Memcached內存管理機制

Slab 分配機制

 

Memcached 不是把所有大小的數據都放在一起的,而是預先分配一系列的 slab,每個

slab 負責一定範圍內的數據存儲。

初始時,Memcached 爲每一個 slab 分配 一個Page(1M) 的內存, slab內再把page切分

成一個一個 Chunk, 組成 Chunk數組,每個Chunk 的大小等於該 slab 的數據存儲範圍

的最大值。

 

 

緩存記錄的原理

memcached 根據記錄的大小選擇最適合的 slab, 從該 slab 中找一個空閒 chunk, 將數據緩存其中。

 

 

Slab 分配機制的缺點

由於 slab 內的 Chunk 大小是固定的,所以無法有效利用內存。例如將 100 字節的記錄緩存到

128 字節的 chunk, 就有 28 字節的內存浪費。

 

Slab的內存分配

memcached 啓動時通過 -m 參數指定最大使用內存, 不過這個最大內存不會一次性分配。

而是隨着使用不斷分配的。緩存一條記錄,首先找到合適的 slab, 然後從 slab 中找空閒

chunk,如果沒有空閒 chunk,則一次性分配一個 page(1M) 的內存給該 slab,slab

根據 chunk 的大小將 page 進行切分,組成 chunk 數組。如下圖,Slab 1 和 Slab 2 都分配

了 1 Page的內存,切分成 chunk 數組。

 

 

總結一下,memcached 內存分配的策略是,slab 按需分配,沒有空閒 chunk 就分配,每次分配 1個 page。

另外,memcached 分配出去的內存不會回收,不會釋放,slab 的空閒 chunk 不會借給其他 slab 使用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章