From bab69bdb4707498efc97bb3bf3d58d58553b4dbc Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Tue, 8 Oct 2013 04:53:30 +0200 Subject: [PATCH] kernel: Force high priority threads to yield less often --- src/system/kernel/scheduler/scheduler_simple.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/scheduler/scheduler_simple.cpp b/src/system/kernel/scheduler/scheduler_simple.cpp index c8517b64e1..950da57013 100644 --- a/src/system/kernel/scheduler/scheduler_simple.cpp +++ b/src/system/kernel/scheduler/scheduler_simple.cpp @@ -116,8 +116,9 @@ simple_get_effective_priority(Thread *thread) int32 effectivePriority = thread->priority; if (effectivePriority < B_FIRST_REAL_TIME_PRIORITY) { - if (schedulerThreadData->forced_yield_count - && schedulerThreadData->forced_yield_count % 16 == 0) { + const int kYieldFrequency = 1 << (min_c(thread->priority, 25) / 5 + 1); + if (schedulerThreadData->forced_yield_count != 0 + && schedulerThreadData->forced_yield_count % kYieldFrequency == 0) { TRACE("forcing thread %ld to yield\n", thread->id); effectivePriority = B_LOWEST_ACTIVE_PRIORITY; } else