Blame slabs.h

Packit 4e8bc4
/* slabs memory allocation */
Packit 4e8bc4
#ifndef SLABS_H
Packit 4e8bc4
#define SLABS_H
Packit 4e8bc4
Packit 4e8bc4
/** Init the subsystem. 1st argument is the limit on no. of bytes to allocate,
Packit 4e8bc4
    0 if no limit. 2nd argument is the growth factor; each slab will use a chunk
Packit 4e8bc4
    size equal to the previous slab's chunk size times this factor.
Packit 4e8bc4
    3rd argument specifies if the slab allocator should allocate all memory
Packit 4e8bc4
    up front (if true), or allocate memory in chunks as it is needed (if false)
Packit 4e8bc4
*/
Packit 4e8bc4
void slabs_init(const size_t limit, const double factor, const bool prealloc, const uint32_t *slab_sizes, void *mem_base_external, bool reuse_mem);
Packit 4e8bc4
Packit 4e8bc4
/** Call only during init. Pre-allocates all available memory */
Packit 4e8bc4
void slabs_prefill_global(void);
Packit 4e8bc4
Packit 4e8bc4
/**
Packit 4e8bc4
 * Given object size, return id to use when allocating/freeing memory for object
Packit 4e8bc4
 * 0 means error: can't store such a large object
Packit 4e8bc4
 */
Packit 4e8bc4
Packit 4e8bc4
unsigned int slabs_clsid(const size_t size);
Packit 4e8bc4
unsigned int slabs_size(const int clsid);
Packit 4e8bc4
Packit 4e8bc4
/** Allocate object of given length. 0 on error */ /*@null@*/
Packit 4e8bc4
#define SLABS_ALLOC_NO_NEWPAGE 1
Packit 4e8bc4
void *slabs_alloc(const size_t size, unsigned int id, unsigned int flags);
Packit 4e8bc4
Packit 4e8bc4
/** Free previously allocated object */
Packit 4e8bc4
void slabs_free(void *ptr, size_t size, unsigned int id);
Packit 4e8bc4
Packit 4e8bc4
/** Adjust global memory limit up or down */
Packit 4e8bc4
bool slabs_adjust_mem_limit(size_t new_mem_limit);
Packit 4e8bc4
Packit 4e8bc4
typedef struct {
Packit 4e8bc4
    unsigned int chunks_per_page;
Packit 4e8bc4
    unsigned int chunk_size;
Packit 4e8bc4
    long int free_chunks;
Packit 4e8bc4
    long int total_pages;
Packit 4e8bc4
} slab_stats_automove;
Packit 4e8bc4
void fill_slab_stats_automove(slab_stats_automove *am);
Packit 4e8bc4
unsigned int global_page_pool_size(bool *mem_flag);
Packit 4e8bc4
Packit 4e8bc4
/** Fill buffer with stats */ /*@null@*/
Packit 4e8bc4
void slabs_stats(ADD_STAT add_stats, void *c);
Packit 4e8bc4
Packit 4e8bc4
/* Hints as to freespace in slab class */
Packit 4e8bc4
unsigned int slabs_available_chunks(unsigned int id, bool *mem_flag, unsigned int *chunks_perslab);
Packit 4e8bc4
Packit 4e8bc4
void slabs_mlock(void);
Packit 4e8bc4
void slabs_munlock(void);
Packit 4e8bc4
Packit 4e8bc4
int start_slab_maintenance_thread(void);
Packit 4e8bc4
void stop_slab_maintenance_thread(void);
Packit 4e8bc4
Packit 4e8bc4
enum reassign_result_type {
Packit 4e8bc4
    REASSIGN_OK=0, REASSIGN_RUNNING, REASSIGN_BADCLASS, REASSIGN_NOSPARE,
Packit 4e8bc4
    REASSIGN_SRC_DST_SAME
Packit 4e8bc4
};
Packit 4e8bc4
Packit 4e8bc4
enum reassign_result_type slabs_reassign(int src, int dst);
Packit 4e8bc4
Packit 4e8bc4
void slabs_rebalancer_pause(void);
Packit 4e8bc4
void slabs_rebalancer_resume(void);
Packit 4e8bc4
Packit 4e8bc4
#ifdef EXTSTORE
Packit 4e8bc4
void slabs_set_storage(void *arg);
Packit 4e8bc4
#endif
Packit 4e8bc4
Packit 4e8bc4
/* Fixup for restartable code. */
Packit 4e8bc4
unsigned int slabs_fixup(char *chunk, const int border);
Packit 4e8bc4
Packit 4e8bc4
#endif