Spec-Zone .ru
спецификации, руководства, описания, API

15.6.2.6. Выделение памяти в пределах memcached

Когда Вы сначала запускаете memcached, память, которую Вы сконфигурировали, автоматически не выделяется. Вместо этого memcached только начинает выделять и резервировать физическую память, как только Вы начинаете сохранять информацию в кэш.

Когда Вы начинаете хранить данные в кэш, memcached не выделяет память для данных на по пунктам основание. Вместо этого выделение плиты используется, чтобы оптимизировать использование памяти и предотвратить фрагментацию памяти, когда информация истекает от кэша.

С выделением плиты память резервируется в блоках 1 МБ. Плита делится во многие блоки равного размера. Когда Вы пытаетесь сохранить значение в кэш, memcached проверяет размер значения, которое Вы добавляете к кэшу, и определяет, какая плита содержит выделение правильного размера для элемента. Если плита с размером элемента уже существует, элемент пишется блоку в пределах плиты.

Если новый элемент больше чем размер каких-либо существующих блоков, то новая плита создается, делится в блоки подходящего размера. Если существующая плита с правильным размером блока уже существует, но нет никаких свободных блоков, новая плита создается. Если Вы обновляете существующий элемент с данными, которые больше чем существующее блочное выделение для того ключа, то ключ перераспределяется в подходящую плиту.

Например, размер значения по умолчанию для самого маленького блока составляет 88 байтов (40 байтов имеющие значение, и значение по умолчанию 48 байтов для ключа и данных флага). Если размер первого элемента, который Вы храните в кэш, составляет меньше чем 40 байтов, то плита с размером блока 88 байтов создается и сохраненное значение.

Если размер данных, которые Вы намереваетесь хранить, больше чем это значение, то размер блока увеличивается фактором размера блока, пока размер блока, достаточно большой, чтобы содержать значение, не определяется. Размер блока всегда является функцией масштабного коэффициента, окруженного к размеру блока, который является точно делимым в размер блока.

Для выборки структуры см. рисунок 15.7, "Выделение памяти в memcached".

Рисунок 15.7. Выделение памяти в memcached

Выделение памяти в memcached

Результат состоит в том, что Вам выделили многократные страницы в пределах диапазона памяти, выделенной memcached. Каждая страница составляет 1 МБ в размере (по умолчанию), и разделяется на различное число блоков согласно размеру блока, требуемому сохранить пары ключ/значение. Каждому экземпляру выделили многократные страницы, и страница всегда создается, когда новый элемент должен быть создан, требуя блока определенного размера. Плита может состоять из многократных страниц, и каждая страница в пределах плиты содержит равное количество блоков.

Размер блока новой плиты определяется основным размером блока, объединенным с фактором роста размера блока. Например, если начальные блоки составляют 104 байта в размере, и фактор роста размера блока значения по умолчанию используется (1.25), то следующий выделенный размер блока был бы лучшим питанием 2 пригодный для 104*1.25, или 136 байтов.

Выделение страниц таким образом гарантирует, что память не становится фрагментированной. Однако, в зависимости от распределения объектов, которые Вы храните, это может привести к неэффективному распределению плит и блоков, если у Вас есть существенно отличающиеся размерные элементы. Например, имея относительно небольшое количество элементов в пределах каждого размера блока может потратить впустую много памяти только с немногими блоками в каждой выделенной странице.

Можно настроить фактор роста, чтобы уменьшить этот эффект при использовании -f параметр командной строки, который адаптирует фактор роста, примененный, чтобы сделать более эффективное использование блоков и плит выделенным. Для получения информации о том, как определить текущую статистику выделения плиты, см. Раздел 15.6.4.2, "memcached Статистика Плит".

Если Ваша операционная система поддерживает это, можно также запустить memcached с -L параметр командной строки. Эта опция предварительно выделяет всю память во время запуска, используя страницы памяти большой емкости. Это может улучшить производительность, сокращая количество промахов в кэш-памяти ЦП.