株式会社ミクシィ 研究開発グループの前坂です。前回の記事でmemcachedは分散に長けた高速なキャッシュサーバであることが紹介されました。今回はmemcachedの内部構造がどう実装されているのか,
メモリを整理して再利用するSlab Allocationメカニズム
昨今のmemcachedはデフォルトでSlab Allocatorというメカニズムを使ってメモリの確保・
Slab Allocatorの仕組みを見てみましょう。以下がmemcachedのドキュメントから引用したslab allocatorの目標です:
the primary goal of the slabs subsystem in memcached was to eliminate memory fragmentation issues totally by using fixed-size memory chunks coming from a few predetermined size classes.
つまりSlab Allocatorの基本は確保したメモリをあらかじめ決められたクラスサイズに応じた固定長の固まりに分けて,
Slab Allocationの仕組みは簡素で,
図1 Slab Allocationのイメージ

また,
Slab Allocatorの主な用語
- Page
デフォルトで1MB確保され,
Slabに割り当てられるメモリ領域。Slabに割り当てられた後に, slabのサイズに応じたchunkに切り分けられる。 - Chunk
レコードをキャッシュするためのメモリ領域。
- Slab Class
特定のサイズのchunkをまとめるクラス。
Slabにレコードをキャッシュする仕組み
クライアントから送信されたデータを,
memcachedは受けとったデータのサイズを参照し,
図2 レコードを格納するクラスの選択方式

ここまで紹介したSlab Allocatorですが,