From 59893c116e9e4e5dd04c24c0ba2fd06fe1936500 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Thu, 4 Jul 2024 20:22:32 +0200 Subject: scheduler: Use get_uptime() since it caches the result Apparently getting the current TSC is a expensive operation. This change had a significant improvements for I/O heavy applications. --- kernel/init/kernel.c | 2 +- kernel/sched/scheduler.c | 2 +- kernel/timer.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'kernel') diff --git a/kernel/init/kernel.c b/kernel/init/kernel.c index 868cfb1..61e863b 100644 --- a/kernel/init/kernel.c +++ b/kernel/init/kernel.c @@ -131,7 +131,7 @@ void kernel_main(u32 kernel_end, unsigned long magic, unsigned long addr, } } for (;;) { - current_task->sleep_until = timer_get_ms() + 100000000; + current_task->sleep_until = timer_get_uptime() + 100000000; wait_for_interrupt(); } } diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index 10ecd73..a77e1e0 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -434,7 +434,7 @@ extern PageDirectory *active_directory; process_t *next_task(process_t *s) { process_t *c = s; - u64 ms_time = timer_get_ms(); + u64 ms_time = timer_get_uptime(); c = c->next; for (;; c = c->next) { if (!c) { diff --git a/kernel/timer.c b/kernel/timer.c index 21020b0..b00a24b 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -29,7 +29,7 @@ void timer_wait_for_init(void) { u64 timer_current_uptime = 0; // This gets updated by the PIT handler u64 timer_get_uptime(void) { - return tsc_calculate_ms(tsc_get()); + return timer_current_uptime; } void timer_get(struct timespec *tp) { -- cgit v1.2.3