class AdaptiveLru

Bases: Namable

A basic LRU-type algorithm, except that it is adaptive and attempts to avoid evicting pages that have been used more frequently (even if less recently) than other pages.

The interface is designed to be identical to that for SimpleLru, so that it may be used as a drop-in replacement.

Inheritance diagram

explicit AdaptiveLru(std::string const &name, std::size_t max_size)
void begin_epoch(void)

Marks the end of the previous epoch and the beginning of the next one. This will evict any objects that are pending eviction, and also update any internal bookkeeping.

void consider_evict(void)

Evicts a sequence of objects if the queue is full.

std::size_t count_active_size(void) const

Returns the total size of the pages that were enqueued since the last call to begin_epoch().

void evict_to(std::size_t target_size)

Evicts a sequence of objects until the queue fits within the indicated target size, regardless of its normal max size.

std::size_t get_max_size(void) const

Returns the max size of all objects that are allowed to be active on the LRU.

int get_max_updates_per_frame(void) const

Returns the maximum number of pages the AdaptiveLru will update each frame.

std::size_t get_total_size(void) const

Returns the total size of all objects currently active on the LRU.

PN_stdfloat get_weight(void) const

Returns the weight value used to compute the exponential moving average.

void output(std::ostream &out) const
void set_max_size(std::size_t max_size)

Changes the max size of all objects that are allowed to be active on the LRU.

If the size is (size_t)-1, there is no limit.

void set_max_updates_per_frame(int max_updates_per_frame)

Specifies the maximum number of pages the AdaptiveLru will update each frame. This is a performance optimization: keeping this number low limits the impact of the AdaptiveLru’s adaptive algorithm.

void set_weight(PN_stdfloat weight)

The following methods are specific to AdaptiveLru, and do not exist in the SimpleLru implementation. In most cases, the defaults will be sufficient, so you do not need to mess with them.

Specifies the weight value used to compute the exponential moving average.

bool validate(void)

Checks that the LRU is internally self-consistent. Returns true if successful, false if there is some problem.

void write(std::ostream &out, int indent_level) const