中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Linux進(jìn)程管理中的CFS負(fù)載均衡有什么用

本篇內(nèi)容介紹了“Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

阿拉爾網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,阿拉爾網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為阿拉爾近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的阿拉爾做網(wǎng)站的公司定做!

 什么是負(fù)載均衡?

前面的調(diào)度學(xué)習(xí)都是默認(rèn)在單個CPU上的調(diào)度策略。我們知道為了CPU之間減少“干擾”,每個CPU上都有一個任務(wù)隊列。運行的過程種可能會出現(xiàn)有的CPU“忙的一筆”,有的CPU“閑的蛋疼”,于是便需要負(fù)載均衡。

將task從負(fù)載較重的CPU上轉(zhuǎn)移到負(fù)載相對較輕的CPU上執(zhí)行,這個過程就是負(fù)載均衡的過程。

在了解負(fù)載均衡前有必要了解soc上對CPU的拓?fù)潢P(guān)系。

我們知道一個多核心的soc片上系統(tǒng),內(nèi)部結(jié)構(gòu)是很復(fù)雜的,內(nèi)核采用CPU拓?fù)浣Y(jié)構(gòu)來描述一個SOC的架構(gòu)。內(nèi)核使用調(diào)度域來描述CPU之間的層次關(guān)系,對于低級別的調(diào)度域來說,CPU之間的負(fù)載均衡處理開銷比較小,而對于越高級別的調(diào)度域,其負(fù)載均衡的開銷就越大。

比如一個4核心的SOC,兩個核心是一個cluster,共享L2  cache,那么每個cluster可以認(rèn)為是一個MC調(diào)度域,每個MC調(diào)度域中有兩個調(diào)度組,每個調(diào)度組中只有一個CPU。而整個SOC可以認(rèn)為是高一級別的DIE調(diào)度域,其中有兩個調(diào)度組,cluster0屬于一個調(diào)度組,cluster1屬于另一個調(diào)度組??鏲luster的負(fù)載均衡是需要清除L2  cache的,開銷是很大的,因此SOC級別的DIE調(diào)度域進(jìn)行負(fù)載均衡的開銷會更大一些。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

CPU對應(yīng)的調(diào)度域和調(diào)度組可通過在設(shè)備模型文件 /proc/sys/kernel/sched_domain 里查看。

  • 調(diào)度域 sched_domain 主要的成員如下:

成員描述
parent 和 childsched domain會形成層級結(jié)構(gòu),parent和child建立了不同層級結(jié)構(gòu)的父子關(guān)系。對于base domain而言,其child等于NULL;對于top domain而言,其parent等于NULL。
groups一個調(diào)度域中有若干個調(diào)度組,這些調(diào)度組形成一個環(huán)形鏈表,groups成員就是鏈表頭
min_interval 和 max_interval做均衡也是需要開銷的,不能時刻去檢查調(diào)度域的均衡狀態(tài),這兩個參數(shù)定義了檢查該sched domain均衡狀態(tài)的時間間隔的范圍
balance_interval定義了該sched domain均衡的時間間隔
busy_factor正常情況下,balance_interval定義了均衡的時間間隔,如果cpu繁忙,那么均衡要時間間隔長一些,即時間間隔定義為busy_factor x balance_interval
imbalance_pct調(diào)度域內(nèi)的不均衡狀態(tài)達(dá)到了一定的程度之后就開始進(jìn)行負(fù)載均衡的操作,imbalance_pct定義了不均衡的water mark。
level該sched domain在整個調(diào)度域?qū)蛹壗Y(jié)構(gòu)中的level
span_weight該sched domain中cpu的個數(shù)
span該調(diào)度域的跨度
  • 調(diào)度組 sched_group 主要的成員如下:

成員描述
nextsched domain中的所有sched group會形成環(huán)形鏈表,next指向groups鏈表中的下一個節(jié)點
group_weight該調(diào)度組中有多少個cpu
sgc該調(diào)度組的算力信息
cpumask該調(diào)度組包含哪些cpu

CPU拓?fù)涫纠?/h4>

為了減少鎖的競爭,每一個cpu都有自己的MC domain、DIE domain(sched domain是分成兩個level,base  domain稱為MC domain(multi core domain),頂層的domain稱為DIE domain)以及sched  group,并且形成了sched domain之間的層級結(jié)構(gòu),sched  group的環(huán)形鏈表結(jié)構(gòu)??梢酝ㄟ^/sys/devices/system/cpu/cpuX/topology查看cpu topology信息。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

在上面的結(jié)構(gòu)中,sched domain是分成兩個level,base domain稱為MC domain,頂層的domain稱為DIE  domain。頂層的DIE domain覆蓋了系統(tǒng)中所有的CPU,小核cluster的MC  domain包括所有小核cluster中的cpu,大核cluster的MC domain包括所有大核cluster中的cpu。

通過DTS和CPU topo子系統(tǒng),可以構(gòu)建sched domain層級結(jié)構(gòu),用于具體的均衡算法。流程是:kernel_init() ->  kernel_init_freeable() -> smp_prepare_cpus() -> init_cpu_topology() ->  parse_dt_topology()

負(fù)載均衡的軟件架構(gòu)

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

圖中可以看出左邊主要分為CPU負(fù)載跟蹤和task負(fù)載跟蹤。

  • CPU負(fù)載跟蹤:考慮每一個CPU的負(fù)載。匯聚cluster上所有負(fù)載,方便計算cluster之間負(fù)載的不均衡狀況。

  • task負(fù)載跟蹤:判斷該任務(wù)是否適合當(dāng)前CPU算力。如果判定需要均衡,那么需要在CPU之間遷移多少的任務(wù)才能達(dá)到平衡。

右邊是通過DTS和CPU topo子系統(tǒng),構(gòu)建的sched domain層級結(jié)構(gòu)。流程是:kernel_init() ->  kernel_init_freeable() -> smp_prepare_cpus() -> init_cpu_topology() ->  parse_dt_topology()

有了左右兩邊的基礎(chǔ)設(shè)施,那么什么時候觸發(fā)負(fù)載均衡呢?這主要和調(diào)度事件相關(guān),當(dāng)發(fā)生任務(wù)喚醒、任務(wù)創(chuàng)建、tick到來等調(diào)度事件的時候,就可以檢查當(dāng)前系統(tǒng)的不均衡情況,并酌情進(jìn)行任務(wù)遷移,以便讓系統(tǒng)負(fù)載處于平衡狀態(tài)。

何時做負(fù)載均衡?

CFS任務(wù)的負(fù)載均衡器有兩種。一種是為繁忙CPU們準(zhǔn)備的periodic balancer,用于CFS任務(wù)在busy cpu上的均衡;一種是為idle  cpu們準(zhǔn)備的idle balancer,用于把繁忙CPU上的任務(wù)均衡到idle cpu上來。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

周期性負(fù)載均衡(periodic load balance或者tick load  balance)是指在tick中,周期性的檢測系統(tǒng)的負(fù)載均衡狀況,找到系統(tǒng)中負(fù)載最重的domain、group和CPU,將其上的runnable任務(wù)拉到本CPU以便讓系統(tǒng)的負(fù)載處于均衡的狀態(tài)。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

nohz load balance是指其他的cpu已經(jīng)進(jìn)入idle,本CPU任務(wù)太重,需要通過 IPI  將其他idle的CPUs喚醒來進(jìn)行負(fù)載均衡。nohz idle load balance也是通過busy cpu上tick驅(qū)動的,如果需要kick idle  load balancer,那么就會通過GIC發(fā)送一個ipi中斷給選中的idle cpu,讓它代表系統(tǒng)所有的idle cpu們進(jìn)行負(fù)載均衡。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

new idle load balance 比較好理解,就是在CPU上沒有任務(wù)執(zhí)行,馬上要進(jìn)入idle狀態(tài)的時候,看看其他CPU是否需要幫忙,來從busy  cpu上拉任務(wù),讓整個系統(tǒng)的負(fù)載處于均衡狀態(tài)。

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

負(fù)載均衡的基本過程

當(dāng)一個CPU上進(jìn)行負(fù)載均衡的時候,總是從base domain開始,檢查其所屬sched  group之間的負(fù)載均衡情況,如果有不均衡情況,那么會在該cpu所屬cluster之間進(jìn)行遷移,以便維護(hù)cluster內(nèi)各個cpu  core的任務(wù)負(fù)載均衡。

load_balance是處理負(fù)載均衡的核心函數(shù),它的處理單元是一個調(diào)度域,也就是sched domain,其中會包含對調(diào)度組的處理。

在該domain中找到最忙的sched group

在最忙的group中挑選最忙的CPU runqueue,該CPU就成為任務(wù)遷移的src

從該隊列中選擇要遷移的任務(wù)(判斷的依據(jù)主要是task load的大小,優(yōu)先選擇load重的任務(wù))

向著作為dst的CPU runqueue遷移

Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用

“Linux 進(jìn)程管理中的CFS負(fù)載均衡有什么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

本文題目:Linux進(jìn)程管理中的CFS負(fù)載均衡有什么用
網(wǎng)站鏈接:http://www.rwnh.cn/article20/gcgejo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、動態(tài)網(wǎng)站、軟件開發(fā)、Google、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
辽阳县| 鄂托克前旗| 武鸣县| 武强县| 博乐市| 加查县| 玛沁县| 略阳县| 台东市| 鱼台县| 宜兴市| 太仆寺旗| 河南省| 伊吾县| 翁源县| 晋宁县| 舞钢市| 新蔡县| 苍梧县| 星座| 沅江市| 皋兰县| 重庆市| 苍梧县| 皋兰县| 玉树县| 布尔津县| 赫章县| 张家口市| 台北县| 财经| 凭祥市| 宜昌市| 天祝| 微山县| 阜南县| 西昌市| 安吉县| 贵溪市| 农安县| 休宁县|