#include <Pool.h>

Collaboration diagram for MemPools:

Public Member Functions

 MemPools ()
 
void flushMeters ()
 
MemImplementingAllocatorcreate (const char *label, size_t obj_size)
 
void setIdleLimit (ssize_t new_idle_limit)
 
ssize_t idleLimit () const
 
void clean (time_t maxage)
 
void setDefaultPoolChunking (bool const &)
 

Static Public Member Functions

static MemPoolsGetInstance ()
 

Public Attributes

MemImplementingAllocatorpools = nullptr
 
ssize_t mem_idle_limit = (2 << 20)
 
int poolCount = 0
 
bool defaultIsChunked = false
 

Detailed Description

Definition at line 116 of file Pool.h.

Constructor & Destructor Documentation

MemPools::MemPools ( )

Definition at line 84 of file Pool.cc.

References defaultIsChunked.

Referenced by GetInstance().

Member Function Documentation

void MemPools::clean ( time_t  maxage)
Main cleanup handler. For MemPools to stay within upper idle limits, this function needs to be called periodically, preferrably at some constant rate, eg. from Squid event. It looks through all pools and chunks, cleans up internal states and checks for releasable chunks.
Between the calls to this function objects are placed onto internal cache instead of returning to their home chunks, mainly for speedup purpose. During that time state of chunk is not known, it is not known whether chunk is free or in use. This call returns all objects to their chunks and restores consistency.
Should be called relatively often, as it sorts chunks in suitable order as to reduce free memory fragmentation and increase chunk utilisation. Suitable frequency for cleanup is in range of few tens of seconds to few minutes, depending of memory activity.
Todo:
DOCS: Re-write this shorter!
Parameters
maxageRelease all totally idle chunks that have not been referenced for maxage seconds.

Definition at line 224 of file Pool.cc.

References MemImplementingAllocator::clean(), Mem::Meter::currentLevel(), flushMeters(), MemPoolMeter::idle, MemImplementingAllocator::idleTrigger(), mem_idle_limit, memPoolIterate(), memPoolIterateDone(), and memPoolIterateNext().

Referenced by Mem::CleanIdlePools(), and memClean().

MemImplementingAllocator * MemPools::create ( const char *  label,
size_t  obj_size 
)
Parameters
labelName for the pool. Displayed in stats.
obj_sizeSize of elements in MemPool.

Definition at line 91 of file Pool.cc.

References defaultIsChunked, and poolCount.

Referenced by Mem::AllocatorProxy::getAllocator().

ssize_t MemPools::idleLimit ( ) const

Definition at line 75 of file Pool.cc.

References mem_idle_limit.

void MemPools::setDefaultPoolChunking ( bool const &  aBool)

Definition at line 101 of file Pool.cc.

References defaultIsChunked.

void MemPools::setIdleLimit ( ssize_t  new_idle_limit)

Sets upper limit in bytes to amount of free ram kept in pools. This is not strict upper limit, but a hint. When MemPools are over this limit, totally free chunks are immediately considered for release. Otherwise only chunks that have not been referenced for a long time are checked.

Definition at line 69 of file Pool.cc.

References mem_idle_limit.

Referenced by memClean(), and memConfigure().

Member Data Documentation

bool MemPools::defaultIsChunked = false

Definition at line 171 of file Pool.h.

Referenced by create(), MemPools(), and setDefaultPoolChunking().

ssize_t MemPools::mem_idle_limit = (2 << 20)

Definition at line 169 of file Pool.h.

Referenced by clean(), idleLimit(), memPoolGetGlobalStats(), and setIdleLimit().

int MemPools::poolCount = 0

The documentation for this class was generated from the following files:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors