Skip to content

CLIMB framework

struct climb_handle {
char *name;
struct list_head list;
climb_pressure_t pressure;
climb_pressure_t applied_pressure_internal;
enum climb_pressure_kind kind;
struct climb_source *pressure_source;
struct thread *given_by;
struct thread *given_to;
};

struct climb_handle referenced types:

struct climb_thread_state {
climb_pressure_t direct_pressure;
climb_pressure_t indirect_pressure;
climb_pressure_t pressure_ewma;
int32_t wanted_boost;
fx16_16_t boost_ewma;
int32_t effective_boost;
int32_t pressure_periods;
struct list_head handles;
bool on_climb_tree;
struct rbt_node climb_node;
struct climb_handle handle;
};

struct climb_thread_state referenced types:

struct climb_source {
char *name;
climb_pressure_t base;
};

struct climb_source referenced types:

enum climb_pressure_kind {
CLIMB_PRESSURE_DIRECT,
CLIMB_PRESSURE_INDIRECT,
};
typedef fx16_16_t climb_pressure_t;

type alias climb_pressure_t referenced types:

struct climb_handle climb_handle_init(struct climb_handle *ch, struct climb_source *cs, enum climb_pressure_kind k);

climb_handle_init referenced types:

#define CLIMB_BOOST_LEVELS 20
#define CLIMB_MIN_GLOBAL_BOOST 1
#define CLIMB_REINSERT_THRESHOLD 2
#define CLIMB_GLOBAL_BOOST_SCALE(nthread) (CLIMB_BOOST_LEVELS / nthread)
#define CLIMB_PRESSURE_KEY_SHIFT 15
#define CLIMB_MAX_DECAY_PERIODS 20
#define climb_thread_state_from_tree_node(tn) \ (container_of(tn, struct climb_thread_state, climb_node))
#define CLIMB_PRESSURE_THREAD_BASE FX(0.05)
#define CLIMB_PRESSURE_IO_BASE FX(0.20)
#define CLIMB_PRESSURE_LOCK_BASE FX(0.10)
#define CLIMB_PRESSURE_MAX FX(1.0)
#define CLIMB_PRESSURE(x) FX(x)
#define CLIMB_PRESSURE_MAX FX(1.0)
#define CLIMB_DIRECT_PRESSURE_MAX FX(1.0)
#define CLIMB_INDIRECT_PRESSURE_MAX FX(1.0)
#define CLIMB_INDIRECT_MIN_SCALE FX(0.10)
#define CLIMB_INDIRECT_WEIGHT FX(0.85)
#define CLIMB_BOOST_LEVEL_MAX 20
#define CLIMB_BOOST_EWMA_ALPHA FX(0.75)
#define CLIMB_PRESSURE_EXPONENT 3 /* cubic */
#define CLIMB_PRESSURE_TO_BOOST_SCALE FX(8.0)
#define CLIMB_SOURCE_EXTERN(name) extern struct climb_source __climb_src_##name
#define CLIMB_SOURCE_CREATE(n, strname, b) \ struct climb_source __climb_src_##n = {.name = strname, .base = b}
#define CLIMB_SOURCE(name) &(__climb_src_##name)