Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> LinuxのマルチCPUロードバランシング - スレッド移行

LinuxのマルチCPUロードバランシング - スレッド移行

  

move_tasks()は、いくつかの場所で呼び出されます。1. load_balance()2. migrate_thread()--- scheduler_tick()による各ビートでのmigration_threadloadバランス---> Rebalance_tick()を呼び出します。 Rebalance_tickは、ベースドメイン(ローカル実行キューのsdフィールド)から最上位ドメインまでのすべてのスケジューリングドメインでループを開始します(「スケジュールスケジュール」の意味を理解するには、286ページを参照してください)。 Load_balanceは、このスケジューリングドメイン内で最も混雑しているグループのプロセスをローカルCPU上の実行キューに移行しようとします。 load_balanceのmove_task呼び出しが失敗した場合は、ディスパッチドメインのチェーン検索に沿って(最も使用頻度の高い実行キューのベースドメインから最上位までの)CPUをアイドル状態にするために、移行スレッドを起動します。 load_balanceウェイクアップに加えて、いくつかのケースで移行スレッドが呼び出されます。1. do_execシステムコール、新しいプロセスをロードするための空きcpuの検索2. cpu affinity affinityの変更3. cpuが増減するときのmigration_call() 5. cpuドメインを更新するとき、(cpuホットプラグをサポートするため)5. load_balance_newidlemove_taskは最初に優先順位に従って最も混雑しているrq期限切れプロセスをスキャンし、次にプロセスに商品をスキャンします。相手側から削除してから)enqueue_task()を呼び出します(ローカルに挿入します)。新しいプロセスが現在のプロセスよりも高い優先順位を持っている場合は、reschedule_task()を呼び出してローカルCPUをプリエンプトします。ここで渡されるパラメータmax_nr_moveは、移行プロセスの最大数を制限するために使用されます。移行できる条件はいくつかあります。Linuxカーネル3rd.sched_getaffinity()およびsched_setaffinity()の289ページを参照してください。プロセスを許可するCPUのビットマスクを設定します。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved