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:
Defines
Section titled “Defines”#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)