From 61aaead7e2904a2756ed72a71e36eeeb21591733 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Wed, 17 Sep 2025 03:10:28 -0400 Subject: kern/amd64: cpu: Add process load balancing This commit introduces load balancing of processes between cores by using a scalable "CPU arbiter" which decides how to fetch the next core descriptor. Signed-off-by: Ian Moffett --- src/sys/include/sys/cpuvar.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/sys/include') diff --git a/src/sys/include/sys/cpuvar.h b/src/sys/include/sys/cpuvar.h index a41131b..e4f3cd1 100644 --- a/src/sys/include/sys/cpuvar.h +++ b/src/sys/include/sys/cpuvar.h @@ -33,6 +33,7 @@ #include #include #include +#include #if defined(_KERNEL) #include #include @@ -60,6 +61,35 @@ struct pcore { }; #if defined(_KERNEL) + +typedef enum { + CORE_ARBITER_RR, /* Round robin */ +} arbiter_type_t; + +/* + * The processor core arbiter assists in scheduling + * processor cores to be used for execution. + * + * @rr_id: Round robin ID; next processor to be scheduled + * @type: Arbitration policy (CORE_ARBITER_RR is default) + * @lock: Protects the ID + */ +struct core_arbiter { + size_t rr_id; + arbiter_type_t type; + struct spinlock lock; +} __aligned(COHERENCY_UNIT); + +/* + * Return a pointer to the next processor that + * is ready for queues to be assigned to them + * + * [MI] + * + * Returns NULL on failure + */ +struct pcore *cpu_sched(void); + /* * Configure a processor core on the system * -- cgit v1.2.3