Arachne Kernel API
void setCoreRequestPriority(int prio)
// Q1: Do we want to have different priorities inside our request? Say, we
// really really need at least 2 cores but it would be nice to have 3 in total
// Q2: Should we try to discourage applications from just using the highest
// priority selfishly?
/**
* Set the desired number of cores dedicated to this process.
*
* This kernel will try to allocate the desired number of cores synchronously
* and then return the actual number of allocated cores.
*
* The actual level of parallelism doesn't necessarily match this number
* during the process's lifetime. First, the kernel may not have enough
* cores to fullfil this requirement. Second, there could be normal kernel
* threads in this process that are scheduled by the CFS scheduler running
* on other cores.
*/
int setDesiredNumOfCores(int n);
// IMPLEMENTATION NOTES: 1) The kernel allocates a core X by moving one of its
// binding KTs from the wait queue to the run queue. This way, when core X
// gets to run `pick_next_task` next time, the scheduler will schedule this
// runnable KT before any other threads because our Arachne scheduling class
// has the highest priority. 2) The kernel will save the desired number of cores
// in the proc struct because it may not have enough cores right now but still
// want to try again later.
// Q1: What more information/constraint about the cores do we want to convey
// to the kernel?
/**
* Return the actual number of cores allocated to this process.
*/
int getNumOfAllocCores();
// We use the existing syscall sched_yield() to relinquish the core. However,
// our own implementation in the Arachne scheduling class will put the calling
// thread into a wait queue to ensure it does not get scheduled automatically.
int sched_yield();
// NOTES: Relinquishing a core voluntarily does not affect the desired number
// of cores dedicated to the process.
Medium-term goals
Dedicate cores
Release cores
Preempt cores
Hypertwins
Long-term goals (after paper deadline)
Complex core topologies
Hypervisor kernel negotiation