在《一文讀懂 | 進(jìn)程怎么綁定 CPU》這篇文章中介紹過,在 Linux 內(nèi)核中會(huì)為每個(gè) CPU 創(chuàng)建一個(gè)可運(yùn)行進(jìn)程隊(duì)列,由于每個(gè) CPU 都擁有一個(gè)可運(yùn)行進(jìn)程隊(duì)列,那么就有可能會(huì)出現(xiàn)每個(gè)可運(yùn)行進(jìn)程隊(duì)列之間的進(jìn)程數(shù)不一樣的問題,這就是所謂的?負(fù)載不均衡?問題,如下圖所示:(圖1)最極端的情況是,一個(gè) CPU 的可運(yùn)行進(jìn)程隊(duì)列擁有非常多的進(jìn)程,而其他 CPU 的可運(yùn)行進(jìn)程隊(duì)列為空,這就是著名的?一核有難,多核圍觀,如下圖:(圖2)為了避免這個(gè)問題的出現(xiàn),Linux 內(nèi)核實(shí)現(xiàn)了 CPU 可運(yùn)行進(jìn)程隊(duì)列之間的負(fù)載均衡。接下來,我們將會(huì)介紹 CPU 間的負(fù)載均衡的實(shí)現(xiàn)原理。
本文使用的內(nèi)核版本為:Linux-2.6.23
CPU 間負(fù)載均衡原理
CPU 間負(fù)載不均衡的根本原因就是,CPU 的可運(yùn)行進(jìn)程隊(duì)列中的進(jìn)程數(shù)量不均衡導(dǎo)致的。所以,要解決 CPU 間負(fù)載不均衡的方法就是:將最繁忙的 CPU 可運(yùn)行進(jìn)程隊(duì)列的一些進(jìn)程遷移到其他比較空閑的 CPU 中,從而達(dá)到 CPU 間負(fù)載均衡的目的。當(dāng)然,在 2.6.0 版本的內(nèi)核的確是這樣實(shí)現(xiàn)的,我們可以看看其實(shí)現(xiàn)代碼:static?void? load_balance(runqueue_t?*this_rq,?int?idle,?cpumask_t?cpumask) { ????int?imbalance,?idx,?this_cpu?=?smp_processor_id(); ????runqueue_t?*busiest; ????prio_array_t?*array; ????struct?list_head?*head,?*curr; ????task_t?*tmp;
LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...
LED燈作為一種新型節(jié)能和無污染光源,由于其特有的發(fā)光照明特性,在現(xiàn)代照明應(yīng)用中發(fā)揮著革命性的作用。作為 LED 照明產(chǎn)業(yè)鏈中最為核心的部件之一,LED 驅(qū)動(dòng)電源的驅(qū)動(dòng)控制技術(shù)所存在的可靠性低、成本高等典型問題一直制約著...
早前有新聞稱,Cree在2018年開始宣布轉(zhuǎn)型高科技半導(dǎo)體領(lǐng)域,并一邊逐漸脫離照明與LED相關(guān)業(yè)務(wù),一邊持續(xù)投資半導(dǎo)體。在今日,Cree宣布與SMART Global Holdings, Inc.達(dá)成最終協(xié)議,擬將LED...