mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-29 05:38:21 +00:00
scheduler: implement nice
This commit is contained in:
@@ -11,11 +11,12 @@ static void update_interactivity(thread_t *thread) {
|
||||
time_t run_time = thread->metrics.run_time_avg_us;
|
||||
|
||||
if (sleep_time > run_time)
|
||||
thread->metrics.interactivity_score = min((SCALING_FACTOR * run_time) / sleep_time, SCHED_MAX_INTERACTIVITY);
|
||||
thread->metrics.interactivity_score = (SCALING_FACTOR * run_time) / sleep_time;
|
||||
else
|
||||
thread->metrics.interactivity_score = min((SCALING_FACTOR * sleep_time) / run_time + SCALING_FACTOR, SCHED_MAX_INTERACTIVITY);
|
||||
thread->metrics.interactivity_score = (SCALING_FACTOR * sleep_time) / run_time + SCALING_FACTOR;
|
||||
|
||||
// TODO nice value impacting this
|
||||
thread->metrics.interactivity_score += thread->nice + (thread->proc ? thread->proc->nice : 0);
|
||||
thread->metrics.interactivity_score = min(thread->metrics.interactivity_score, SCHED_MAX_INTERACTIVITY);
|
||||
}
|
||||
|
||||
static void offset_times(thread_t *thread, time_t run_us, time_t sleep_us) {
|
||||
|
||||
@@ -310,15 +310,10 @@ void sched_reschedule_on_cpu(cpu_t *cpu, bool target) {
|
||||
if (cpu == current_cpu())
|
||||
goto leave;
|
||||
|
||||
long old_priority = current_thread()->priority;
|
||||
current_thread()->priority = 0;
|
||||
|
||||
sched_thread_stopping_callback(current_thread(), false);
|
||||
|
||||
arch_context_saveandcall(reschedule_yield, current_cpu()->schedulerstack, cpu);
|
||||
|
||||
current_thread()->priority = old_priority;
|
||||
|
||||
leave:
|
||||
interrupt_set(status);
|
||||
if (target == false)
|
||||
@@ -354,7 +349,7 @@ void sched_ap_entry() {
|
||||
__assert(current_cpu()->schedulerstack);
|
||||
current_cpu()->schedulerstack = (void *)((uintptr_t)current_cpu()->schedulerstack + SCHEDULER_STACK_SIZE);
|
||||
|
||||
current_cpu()->idlethread = sched_newthread(cpuidlethread, PAGE_SIZE * 4, 3, NULL, NULL);
|
||||
current_cpu()->idlethread = sched_newthread(cpuidlethread, PAGE_SIZE * 4, 100, NULL, NULL);
|
||||
__assert(current_cpu()->idlethread);
|
||||
current_cpu()->idlethread->class = THREAD_CLASS_IDLE;
|
||||
sched_queue(current_cpu()->idlethread);
|
||||
@@ -382,7 +377,7 @@ void sched_init() {
|
||||
__assert(current_cpu()->schedulerstack);
|
||||
current_cpu()->schedulerstack = (void *)((uintptr_t)current_cpu()->schedulerstack + SCHEDULER_STACK_SIZE);
|
||||
|
||||
current_cpu()->idlethread = sched_newthread(cpuidlethread, PAGE_SIZE * 4, 3, NULL, NULL);
|
||||
current_cpu()->idlethread = sched_newthread(cpuidlethread, PAGE_SIZE * 4, 100, NULL, NULL);
|
||||
__assert(current_cpu()->idlethread);
|
||||
current_cpu()->idlethread->class = THREAD_CLASS_IDLE;
|
||||
current_cpu()->thread = sched_newthread(NULL, PAGE_SIZE * 32, 0, NULL, NULL);
|
||||
|
||||
Reference in New Issue
Block a user