核心負載均衡透過 move_tasks() 遷移任務,主要調用路徑:
load_balance():每個時鐘節拍由 scheduler_tick() → rebalance_tick() 觸發,沿調度域層級從本地運行隊列向上遍歷,嘗試從最忙碌組遷移任務到本地 CPU。migrate_thread() (migration_thread 核心執行緒):當 load_balance 遷移失敗時喚醒,沿調度域鏈從最忙隊列向上搜尋閒置 CPU。亦在 do_exec、sched_setaffinity、CPU 熱插拔、load_balance_newidle 等場景被喚醒。pull_task():dequeue_task() 從遠端移除 → enqueue_task() 插入本地。reschedule_task() 搶佔本地 CPU。max_nr_move 限制單次最大遷移任務數。參考《Linux Kernel Development》第 3 版第 289 頁:任務必須可遷移(非綁定 CPU)、非正在運行、優先級適合等。
sched_getaffinity() / sched_setaffinity()
以位元遮罩設定任務允許運行的 CPU 集合。