18#include "xtc_export.h"
25typedef struct xtc_exec xtc_exec_t;
71XTC_API
int xtc_exec_init(xtc_exec_t **out,
int n_loops);
72XTC_API
int xtc_exec_fini(xtc_exec_t *exec);
73XTC_API
int xtc_exec_run(xtc_exec_t *exec);
109XTC_API
void xtc_exec_set_service_mode(xtc_exec_t *exec,
int on);
110XTC_API
int xtc_exec_get_service_mode(xtc_exec_t *exec);
131XTC_API
void xtc_exec_set_eager_rebalance(xtc_exec_t *exec,
int on);
132XTC_API
int xtc_exec_get_eager_rebalance(xtc_exec_t *exec);
133XTC_API
void xtc_exec_set_steal_backoff(xtc_exec_t *exec,
int on);
134XTC_API
int xtc_exec_get_steal_backoff(xtc_exec_t *exec);
136int xtc_exec_set_preempt(xtc_exec_t *exec, int64_t interval_ns);
137XTC_API
int xtc_exec_stop(xtc_exec_t *exec);
139XTC_API
int xtc_exec_n_loops(xtc_exec_t *exec);
146XTC_API
int xtc_exec_loop_id(
void);
153XTC_API
int xtc_shard_id(
void);
154XTC_API
int xtc_shard_count(
void);
157XTC_API xtc_loop_t *xtc_exec_loop(xtc_exec_t *exec,
int idx);
170typedef struct xtc_loop_stats {
176#define XTC_LOOP_STATS_INIT { .size = sizeof(xtc_loop_stats_t) }
181XTC_API
int xtc_exec_loop_stats(xtc_exec_t *exec,
int idx,
xtc_loop_stats_t *out);
187XTC_API
int xtc_exec_spawn(xtc_exec_t *exec, xtc_task_fn fn,
void *user,
188 xtc_task_t **out_task);
189XTC_API
int xtc_exec_spawn_on(xtc_exec_t *exec,
int loop_idx,
190 xtc_task_fn fn,
void *user, xtc_task_t **out_task);
191XTC_API
int xtc_exec_async(xtc_exec_t *exec, xtc_coro_fn fn,
void *arg,
192 xtc_task_t **out_task);
193XTC_API
int xtc_exec_async_on(xtc_exec_t *exec,
int loop_idx,
194 xtc_coro_fn fn,
void *arg, xtc_task_t **out_task);
228XTC_API
int xtc_exec_class_create(xtc_loop_t *loop,
int shares,
229 int64_t latency_ns, xtc_exec_class_t *out);
230XTC_API
int xtc_exec_class_shares(xtc_exec_class_t cls);
231XTC_API int64_t xtc_exec_class_latency(xtc_exec_class_t cls);
232XTC_API uint64_t xtc_exec_class_runs(xtc_exec_class_t cls);
233XTC_API uint64_t xtc_exec_class_vruntime(xtc_exec_class_t cls);
260typedef void (*xtc_stall_cb)(xtc_loop_t *loop, xtc_task_t *task,
261 int64_t ran_ns, int64_t budget_ns,
void *user);
262XTC_API
void xtc_loop_set_stall_budget(xtc_loop_t *loop, int64_t budget_ns);
263XTC_API
void xtc_loop_set_stall_cb(xtc_loop_t *loop, xtc_stall_cb cb,
265XTC_API
void xtc_exec_set_stall_budget(xtc_exec_t *exec, int64_t budget_ns);
266XTC_API uint64_t xtc_loop_stall_count(
const xtc_loop_t *loop);