Inicio » memcached » La asignación de memoria en Memcached.

La asignación de memoria en Memcached.

Memcached utiliza para la asignación de memoria lo que llama Slab allocation. Cuando inicializas memcached  parte la memoria asignada en pequeñas partes llamadas páginas. Cada página ocupa 1Mb (coincide con el tamaño máximo de un objeto que puede ser almacenado en memcached). Cada una de estas páginas puede estar asignada una slab-class o puede estar desasignada (ser un página free)  Una slab-class  decide el tamaño de los objetos a almacenar en una página en particular. Cada página que es asignada a una slab-class especificase divide en pequeñas partes llamadas chunks. Los chunks de slab tienen el mismo tamaño y no puede haber dos chunks de diferente tamaño dentro de una página. Por instancia puede haber una página con chunks de 80byte (slab class 1), una página con chunks de 100 bytes (slab class 2)y así en adelante hasta llegar a slab más grande que tiene un solo chunk (de 1MB). Puede haber múltiples páginas por slab-class, pero una vez que una página ha sido asignada a slab-class (y por tanto divida en chunks) no puede ser asignada a otra slab-class.

El chunk más pequeño comienza con un tamaño de 80 bytes y va aumentando con un factor de 1.25, con lo cual el siguiente tamaño de chunk sería de 100 y así en adelante. Se puede ver la distribución de los chunks con la opción –vv cuando inicias el memcached. Se puede modificar el factor de incremento del tamaño de los chunks con (.-f) pero no es muy recomendable.

slab class   1: chunk size        96 perslab   10922                                        slab class   2: chunk size       120 perslab    8738                                        slab class   3: chunk size       152 perslab    6898                                        slab class   4: chunk size       192 perslab    5461                                        slab class   5: chunk size       240 perslab    4369                                        slab class   6: chunk size       304 perslab    3449                                        slab class   7: chunk size       384 perslab    2730                                        slab class   8: chunk size       480 perslab    2184

Con la opción –vv se ve cuantas slab-class hay, el tamaño de los chunks dentro de ellas y cuantos chunks tiene (cuanto mayor sea el tamaño de los chuks, menor será el número de estos. Memcached crea inicialmente 1 página por slab-class y el resto de las páginas las deja libres. Cuando un slab necesita una página la coge, Una vez que memcached ha particionado la memoria, añade los datos al slab. Imagínate que tienes un objeto de 105 bytes, mencached lo almacena en el slab 3. Lo cual implica 23 bytes serán inutilizados. Nunca estos 23 bytes se podrán utilizar. Así evita mencached que la memoria se fragmente.

Cuando toda la página este uilizada (todos los chuncks están llenos) y necesitamos insertar más datos, se cogera un nueva página y se asignara al slab-class correspondiente, particionado lo en chunks y cogiendo el primer chunk disponible para almacenar los datos. Pero cuando no tengamos más páginas disponibles para asignarlas a nuestro slab-class, se utilizara el algoritmo LRU para limpiar uno de los chuks existentes y hacer sitio. Esto significa que cuando necesitemos un chunk de 128 bytes, eliminaremos un chunk de 128 bytes, a pesar de que pueda existir un chunk de 256bytes que sea más antiguo. Cada slab-class tiene su propio algoritmo de LRU.

Se puede obtener por telnet estadísticas de los slabs con el comando stats slabs

Esta información está traducida de este artículo. https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s