娛樂城
Linux內核的過現金網程負載平衡機制 - 財神娛樂城_捕魚達人_電子遊戲

Linux內核的過現金網程負載平衡機制

概述
在多核體系中,為了更好的行使多CPU并行本領,過程調度器可以將過程負載盡量的均勻到各個CPU上。再詳細完成中,若何選擇將過程遷徙到的方針CPU,除了思量各個CPU的負載均衡,還必要將Cache行使歸入衡量身分。同時,關于過程六合彩即時A叫醒過程B這個模子,還做了非凡的處置。本文闡發以Centos kernel 3.10.0-975源碼為藍本。
SMP負載平衡模子

成績

若是只是將CPU負載均勻的漫衍在各個CPU上,那末就無所謂必要調度域。然則因為Cache和內存Numa的存在,使得過程最佳能遷徙到與之前運轉地點CPU更’近’的CPU上。
以咱們經常使用的Intel X86為例。Cache根本視圖以下圖:

從Cache以及內存走訪的視角,若是過程負載平衡必要把過程A遷徙到另一個CPU上,

  • 若是方針CPU以及過程A之前地點CPU恰好是統一個物理CPU統一個焦點上(超線程),那末Cache行使率最佳,畢竟L1,L2以及L3中仍是’暖’的。
  • 若是方針CPU以及過程A之前地點CPU恰好是統一個物理CPU但不同焦點上(多核),那末Cache行使率次之,L3中還有’暖’數據。
  • 若是方針CPU以及過程A之前地點CPU恰好是統一個NUMA然則不同物理CPU上(多NUMA布局),固然Cache已經經是’寒’了,但最少內存走訪仍是在本NUMA中。
  • 若是方針CPU以及過程A之前地點CPU在不同NUMA中,不只Cache是’寒’的,跨NUMA內存還有賞罰,此時內存走訪速率最差。

SMP構造

為了更好天時用Cache,內核將CPU(若是開啟了超線程,那末以邏輯CPU為單元,不然以物理CPU焦點為單元)構造成了調度域。

邏輯視角

假定某機械為2路4核8焦點CPU,它的CPU調度域邏輯上以下圖:

 

2路NUMA最為簡略,若是是4路NUMA,那末這個視圖在NUMA層級將會龐大許多,由于跨NUMA走訪依據走訪間隔致使走訪延時還不雷線上麻將朋友同,這部門最地下運彩ptt初接頭。

分層視角

一切CPU一共分為三個條理:SMT,MC,NUMA,每層都包括了一切CPU,然則劃分粒度不同。依據Cache以及內存的相關性劃分調度域,調度域內的CPU又劃分一次調度組。越去基層調度域越小,越去上層調度域越大。過程負載平衡會盡量的在底層調度域外部辦理,如許Cache行使率最優。
從分層的視角闡發,下圖是調度域現實構造方式,每層都有per-cpu數組保管每個CPU對應的調度域以及調度組,它們是在初始化時已經經提早調配的內存。值得注重的是

  • 每個CPU對應的調度域數據布局都包括了有用的內容,譬如說SMT層中,CPU0以及CPU1對應的不同調度域數據布局,內容是截然不同的。
  • 每個CPU對應的調度組數據布局紛歧定包括了有用內容,譬如說MC層中,CPU0以及CPU1指向不同的struct sched_domain,然則sched_domain->groups指向的調度組確是一樣的數據布局,這些調度組構成了環。
 

單CPU視角

從單個CPU的視角闡發,下圖是調度域現實構造六合彩坐車方式。

每個CPU的過程運轉行列步隊有一個成員指向其地點調度域。從最低層到最高層。
咱們可以在/proc/sys/kernel/sched_domain/cpuX/ 中望到CPU現實使用的調度域個數和每個調度域的名字以及設置參數。

負載平衡時機

  • 周期性挪用過程調度法式scheduler_tick()->trigger_load_balance()中,經由過程軟中止觸發負載平衡。
  • 某個CPU上無可運轉過程,__schedule()預備調度idle過程前,會測驗考試從別的CPU上pull一批過程過來。

周期性負載平衡

CPU對應的運轉行列步隊數據布局中記載了下一次周期性負載平衡的時間,當跨越這個時間點后,將觸發SCHED_SOFTIRQ軟中止來進行負載平衡。

  1. void trigger_load_六合彩二星三星balance(struct rq *rq, int cpu) 
  2.         /* Don’t need to rebalance while attached to NULL domain */ 
  3.         if (time_after_eq(jiffies, rq->next_balance) && 
  4.             likely(!on_null_domain(cpu))) 
  5.                 raise_softirq(SCHED_SOFTIRQ); 
  6. #ifdef CONFIG_NO_HZ_COMMON 
  7.         if (nohz_kick_needed(rq) && likely(!on_null_domain(cpu))) 
  8.       &nb麻將onlinesp;         nohz_balancer_kick(cpu); 
  9. #endif 

【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。