Memory statistics specification - AnaNek/tarantool GitHub Wiki

tarantool>memstat()

В тарантуле две арены - tuple arena and runtime arena. В tuple arena (как ни странно) размещены таплы данных, а runtime в первую очередь индексы. Обе арены имеют лимит размера памяти. Арена по мере увеличения количество данных в тарантуле постепенно потребляет все больше памяти вплоть до лимита, однако никогда не освобождает использованную память.

Арена используется для выделения блоков памяти круглогом размера (в двоичном смысле, 2^n). Есть максимально возможный размер слаба. После освобождения такого слаба он гарантированно может быть переиспользован. Для выделения слабов меньшего размера выделяется максимально возможный слаб и дробится до нужного размера. При этом возникает фрагментация.

Слабы используются для mempool allocators, призванных выделять блоки памяти фиксированного размера. Mempool allocator использует slabs достаточно размера и разбивает их на блоки требуемого размера, излишки wasted. При этом память неизбежно фрагментируется.

Для таплов используется small allocator который состоит из набора mempool аллокаторов разных размеров, определяемых настройками тарантула. Для выделения памяти любого размера ищется mempool allocator наиболее подходящего размера и блок выделяется им, излишки wasted.

Существуют механизмы собственной дефрагментации.

Естественно для работы mempool и small аллокаторов дополнительно затрачивается память для служебных нужд.

Что бы хотелось увидеть в этой статистике: Лимит арен. Реально использованная память аренами. Нетронутая аренами память. Память свободных крупных (альфа) слабов. Количество wasted памяти. Количество wasted памяти при аллоцировании memepools. Количество wasted памяти при аллоцировании таплов. Количество (потенциально) fragmented памяти. Количество (потенциально) fragmented памяти на уровне некрупных слабов. Количество (потенциально) fragmented памяти на уровне mempool allocators. Количество памяти затраченной для служебных нужд.