Blame slabs.h

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