From 818a64c77613a9c2152739f1cddad78d61e4a94f Mon Sep 17 00:00:00 2001 From: LoGin Date: Tue, 12 Mar 2024 15:33:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E7=A6=81=E7=94=A8load=20bala?= =?UTF-8?q?nce=20(#591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因见issue: https://github.com/DragonOS-Community/DragonOS/issues/571 --- kernel/src/sched/cfs.rs | 1 + kernel/src/sched/core.rs | 27 +++++++++++++++------------ kernel/src/sched/rt.rs | 2 ++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/kernel/src/sched/cfs.rs b/kernel/src/sched/cfs.rs index 31b027c7d..915e16765 100644 --- a/kernel/src/sched/cfs.rs +++ b/kernel/src/sched/cfs.rs @@ -100,6 +100,7 @@ impl CFSQueue { } } /// 获取运行队列的长度 + #[allow(dead_code)] pub fn get_cfs_queue_size( queue: &SpinLockGuard>>, ) -> usize { diff --git a/kernel/src/sched/core.rs b/kernel/src/sched/core.rs index 71cae37b0..a55d38ead 100644 --- a/kernel/src/sched/core.rs +++ b/kernel/src/sched/core.rs @@ -6,7 +6,6 @@ use core::{ use alloc::{sync::Arc, vec::Vec}; use crate::{ - include::bindings::bindings::smp_get_total_cpu, kinfo, mm::percpu::PerCpu, process::{AtomicPid, Pid, ProcessControlBlock, ProcessFlags, ProcessManager, ProcessState}, @@ -51,6 +50,7 @@ impl CpuExecuting { // 获取某个cpu的负载情况,返回当前负载,cpu_id 是获取负载的cpu的id // TODO:将获取负载情况调整为最近一段时间运行进程的数量 +#[allow(dead_code)] pub fn get_cpu_loads(cpu_id: ProcessorId) -> u32 { let cfs_scheduler = __get_cfs_scheduler(); let rt_scheduler = __get_rt_scheduler(); @@ -64,19 +64,22 @@ pub fn get_cpu_loads(cpu_id: ProcessorId) -> u32 { // 负载均衡 pub fn loads_balance(pcb: Arc) { // 对pcb的迁移情况进行调整 + + // 由于调度器问题,暂时不进行负载均衡,见issue: https://github.com/DragonOS-Community/DragonOS/issues/571 + let min_loads_cpu_id = ProcessorId::new(0); + // 获取总的CPU数量 - let cpu_num = unsafe { smp_get_total_cpu() }; + // let cpu_num = unsafe { smp_get_total_cpu() }; // 获取当前负载最小的CPU的id - let mut min_loads_cpu_id = smp_get_processor_id(); - let mut min_loads = get_cpu_loads(smp_get_processor_id()); - for cpu_id in 0..cpu_num { - let cpu_id = ProcessorId::new(cpu_id); - let tmp_cpu_loads = get_cpu_loads(cpu_id); - if min_loads - tmp_cpu_loads > 0 { - min_loads_cpu_id = cpu_id; - min_loads = tmp_cpu_loads; - } - } + // let mut min_loads = get_cpu_loads(smp_get_processor_id()); + // for cpu_id in 0..cpu_num { + // let cpu_id = ProcessorId::new(cpu_id); + // let tmp_cpu_loads = get_cpu_loads(cpu_id); + // if min_loads - tmp_cpu_loads > 0 { + // min_loads_cpu_id = cpu_id; + // min_loads = tmp_cpu_loads; + // } + // } let pcb_cpu = pcb.sched_info().on_cpu(); // 将当前pcb迁移到负载最小的CPU diff --git a/kernel/src/sched/rt.rs b/kernel/src/sched/rt.rs index d092a0426..e767c061d 100644 --- a/kernel/src/sched/rt.rs +++ b/kernel/src/sched/rt.rs @@ -81,6 +81,8 @@ impl RTQueue { } queue.push_front(pcb); } + + #[allow(dead_code)] pub fn get_rt_queue_size(&mut self) -> usize { let queue = self.locked_queue.lock_irqsave(); return queue.len();