基于相關(guān)性的任務(wù)優(yōu)化部署方法
【專利摘要】本發(fā)明提供了一種基于相關(guān)性的任務(wù)優(yōu)化部署方法,采用的對稱多處理器系統(tǒng)包括多個CPU,每個CPU都有專用的親和性隊列,包括:若有新任務(wù)就緒時,判斷新任務(wù)是否具有親和性;將具有親和性的新任務(wù)放到親和性隊列中,判斷親和性CPU上正在運行的任務(wù)是否具有CPU親和性,若CPU上正在運行的任務(wù)不具有CPU親和性時,則搶占CPU同時退出,若CPU上正在運行的任務(wù)具有CPU親和性時,則退出;將不具有親和性的新任務(wù)放到全局就緒隊列中,尋找運行最低優(yōu)先級任務(wù)的CPU,若尋找到比新任務(wù)優(yōu)先級低的任務(wù)運行的CPU時,則搶占CPU,否則直接退出。本發(fā)明合理分配操作系統(tǒng)任務(wù)調(diào)度,使多個CPU負載平衡,充分利用硬件資源。
【專利說明】基于相關(guān)性的任務(wù)優(yōu)化部署方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及對稱多處理器系統(tǒng),具體地,涉及一種基于相關(guān)性的任務(wù)優(yōu)化部署方 法。
【背景技術(shù)】
[0002] 隨著科學技術(shù)的進步,人們對數(shù)據(jù)的處理速度的要求越來越高,比如生物學家正 在試圖理解人類基因的含義,天文學家正在了解宇宙,游戲玩家追求流暢、高清游戲帶來的 成就感與震撼力,這些都需要更多的CPU(處理器)周期。
[0003] 單處理器工藝已經(jīng)發(fā)展到極致,獲得更高速度的一種處理方式是大規(guī)模使用并行 計算。共享存儲多處理器應(yīng)運而生,其中兩個或更多的CPU核全部共享訪問一個公用的 RAM(內(nèi)存)。
[0004] 多處理器的運行需要多處理器操作系統(tǒng)。當前,國產(chǎn)嵌入式多核計算系統(tǒng)中運行 的嵌入式實時操作系統(tǒng)有兩類,一類是操作系統(tǒng)和任務(wù)運行在一個處理器上,其它處理器 不運行任何程序,處于空轉(zhuǎn)狀態(tài);另一類是操作系統(tǒng)運行在一個處理器上,應(yīng)用任務(wù)經(jīng)過操 作系統(tǒng)布置,分別置于其它處理器上運行(AMP,非對稱多處理器)。第一種方法只使用一個 處理器,處理器性能與單一處理器性能相當,但系統(tǒng)的功耗、成本、體積卻上升較大;第二種 方法將其它的處理器當作系統(tǒng)的計算資源,對每一個計算資源進行任務(wù)分配,比第一種方 法效率提高,但由于操作系統(tǒng)運行于其中一個處理器上,并未完全開發(fā)出多處理器的并行 計算能力。
【發(fā)明內(nèi)容】
[0005] 針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于相關(guān)性的任務(wù)優(yōu)化部署方 法保證了國產(chǎn)嵌入式實時操作系統(tǒng)在多處理器上并行運行的能力,實現(xiàn)各個CPU的負載平 衡,保證各個CPU之間的協(xié)調(diào)運行,使多處理器的利用率達到最1?,提1?系統(tǒng)響應(yīng)的實時 性。
[0006] 根據(jù)本發(fā)明提供的一種基于相關(guān)性的任務(wù)優(yōu)化部署方法,采用的對稱多處理器系 統(tǒng)包括多個CPU,每個CPU都有專用的親和性隊列,包括如下步驟:
[0007] 步驟1 :當有新任務(wù)就緒時,判斷新任務(wù)是否具有親和性,若新任務(wù)具有親和性, 則進入步驟2,否則進入步驟3 ;
[0008] 步驟2 :將新任務(wù)放到親和性隊列中,判斷親和性CPU上正在運行的任務(wù)是否具有 CPU親和性,若CPU上正在運行的任務(wù)不具有CPU親和性,則置deferredCpuSet [CPU] = 1, nextCpuSet[CPU] = l,deferredCpuSet[CPU] = 1表示重新調(diào)度時需要為被調(diào)度搶占的任 務(wù)尋找新的CPU運行,nextCpuSet [CPU] = 1表示CPU需要進行重調(diào)度,同時退出;若CPU 上正在運行的任務(wù)具有CPU親和性,則退出;
[0009] 步驟3 :將新任務(wù)放到全局就緒隊列中,尋找運行最低優(yōu)先級任務(wù)的CPU,若尋找 到比新任務(wù)優(yōu)先級低的任務(wù)運行的CPU,則置ne XtCpUSet[CPU] = 1,同時退出,否則直接退 出。
[0010] 優(yōu)選地,所述步驟1之前還包括如下步驟:
[0011] -獲取CPU的索引號。
[0012] 優(yōu)選地,所述步驟2包括如下步驟:
[0013] 步驟2. 1 :根據(jù)新任務(wù)的親和性屬性獲得CPU的索引號ix ;
[0014] 步驟2. 2 :將新任務(wù)插入到CPU ix的親和性隊列中,CPU ix表示索引號為ix的 CPU ;
[0015] 步驟2. 3 :判斷親和性CPU ix上正在運行的任務(wù)是否具有CPU親和性,若CPU ix 上正在運行的任務(wù)不具有CPU親和性,貝u置deferredCpuSet[CPU] = 1、nextCpuSet[CPU] = l、execTasks[ix]=新任務(wù),向CPU ix發(fā)送調(diào)度請求同時退出,其中,execTasks[ix]= 新任務(wù),表示使CPU ix指向新任務(wù);若CPU ix上正在運行的任務(wù)具有CPU親和性,則退出。
[0016] 優(yōu)選地,所述步驟3包括如下步驟:
[0017] 步驟3. 1 :將新任務(wù)插入到全局隊列中;
[0018] 步驟3. 2 :找到運行最低優(yōu)先級任務(wù)的CPU iy,其中,CPU iy表示索引號為iy的 CPU ;
[0019] 步驟3. 3 :判斷新任務(wù)的優(yōu)先級是否比正運行的任務(wù)高;若新任務(wù)的優(yōu)先級比正 運行的任務(wù)高,貝1J置nextCpuSet[CPU] =l、execTasks[iy]=新任務(wù),向CPU iy發(fā)送調(diào)度 請求,其中,execTasks[iy]=新任務(wù),表示使CPU iy指向新任務(wù)。
[0020] 優(yōu)選地,步驟2或3中還包括如下步驟:查看execTasks[cpu_id]指向的新任 務(wù)是否是編號為cpu_id的CPU上正在運行的任務(wù),若不是,則執(zhí)行CPU的切換,其中, execTasks[cpu_id],表示使CPU cpu_id指向新任務(wù),cpu_id表示CPU的索引號。
[0021] 優(yōu)選地,對稱多處理器系統(tǒng)采用的是全局隊列和局部隊列混合的就緒隊列編排模 式的方法。
[0022] 優(yōu)選地,對稱多處理器系統(tǒng)中設(shè)定一個CPU為預(yù)留CPU,預(yù)留CPU僅調(diào)度綁定在預(yù) 留CPU上的任務(wù),而不參與全局調(diào)度。
[0023] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
[0024] 1、本發(fā)明合理分配操作系統(tǒng)任務(wù)調(diào)度,使多個CPU負載平衡,充分利用硬件資源;
[0025] 2、本發(fā)明通過任務(wù)調(diào)度隊列的分配,使用全局隊列和局部隊列混合的就緒隊列編 排模式,同時滿足實時調(diào)度中全局調(diào)度與綁定調(diào)度的需求;
[0026] 3、本發(fā)明根據(jù)任務(wù)協(xié)同性與通信關(guān)系,引入CPU預(yù)留和綁定調(diào)度,使關(guān)鍵路徑上 的任務(wù)盡快執(zhí)行結(jié)束,提1?系統(tǒng)響應(yīng)實時性。
【專利附圖】
【附圖說明】
[0027] 通過閱讀參照以下附圖對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、 目的和優(yōu)點將會變得更明顯:
[0028] 圖1為本發(fā)明中SMP多處理器模型的示意圖;
[0029] 圖2為本發(fā)明的流程圖;
[0030] 圖3為本發(fā)明中對稱多處理任務(wù)調(diào)度流程圖。
【具體實施方式】
[0031] 下面結(jié)合具體實施例對本發(fā)明進行詳細說明。以下實施例將有助于本領(lǐng)域的技術(shù) 人員進一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當指出的是,對本領(lǐng)域的普通技術(shù) 人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進。這些都屬于本發(fā)明 的保護范圍。
[0032] 在本實施例中,本發(fā)明提出的基于相關(guān)性的任務(wù)優(yōu)化部署方法,能夠合理分配操 作系統(tǒng)任務(wù)調(diào)度,真正實現(xiàn)任務(wù)的并發(fā)運行,提高系統(tǒng)響應(yīng)實時性,這就是對稱多處理器系 統(tǒng)(Symmetric Multiprocessor, SMP)〇
[0033] 如圖1所示,對稱多處理器系統(tǒng),消除了當前兩個操作系統(tǒng)的不對稱型。在存儲器 中有一個操作系統(tǒng)的副本,但任何CPU都可以運行它。這種模型動態(tài)地平衡進程和存儲器, 因為它只有一套操作系統(tǒng)數(shù)據(jù)表。還消除了主CPU的瓶頸,因為不存在主CPU ;但是這個模 型需要對臨界區(qū)進行保護,即當有多個進程同時訪問這個臨界區(qū)時,只有獲得使用權(quán)的進 程才可以繼續(xù)運行,其他的進程需要等待已經(jīng)獲得使用權(quán)的進程釋放他的使用權(quán)后再去相 互競爭這個使用權(quán)。這使得操作系統(tǒng)分割成互不影響的臨界區(qū),每個臨界區(qū)由互斥信號量 保護,所以一次只有一個CPU可以執(zhí)行。采用這種方式,可以實現(xiàn)更多的并行操作。
[0034] 對稱多處理器系統(tǒng)性能優(yōu)劣很大程度上取決于調(diào)度器的性能。本發(fā)明提供的基于 相關(guān)性的任務(wù)優(yōu)化部署方法采用的是全局隊列和局部隊列混合的就緒隊列編排模式。對稱 多處理器系統(tǒng)任務(wù)調(diào)度器的工作被分散到各個處理器中,每個處理器的負責本處理器所執(zhí) 行任務(wù)的調(diào)度工作。默認情況下,任務(wù)可以運行在任意處理器上,但本發(fā)明提供的基于相關(guān) 性的任務(wù)優(yōu)化部署方法允許將任務(wù)綁定到指定處理器上運行,即任務(wù)的CPU親和性,直到 其運行結(jié)束,這可保證具有相關(guān)性的任務(wù)在同一個CPU上運行。對于未設(shè)置CPU親和性的 任務(wù),則采用全局隊列機制將其調(diào)度到任一 CPU上。
[0035] 在本發(fā)明提供的基于相關(guān)性的任務(wù)優(yōu)化部署方法中,采用N+1全局調(diào)度方法,其 中N為系統(tǒng)中CPU的數(shù)目。每個CPU都有專用的親和性隊列,具有CPU親和性的任務(wù)都放置 到親和性隊列中,系統(tǒng)中有N個親和性隊列;沒有CPU親和性的任務(wù)放置到全局隊列當中。
[0036] 首先定義幾個全局變量:
[0037] execTasks□:指向可能會切換到各個CPU上運行的任務(wù),例如execTasks[id]為 指向可能會切換到CPU id上運行的任務(wù);taskIdCurrent[]:正在CPU上運行的任務(wù),例如 taskIdCurrent[id]指向正在CPU id上運行的任務(wù);nextCpuSet :需要被調(diào)度的CPU集合, 每一位對應(yīng)一個CPU ;deferredCpuSet :需要為被切換出去的任務(wù)分配處理器的CPU集合。
[0038] 在調(diào)度方法中nextCpuSet和deferredCpuSet這兩個位圖是非常重要的,當任務(wù) A搶占正在CPU上運行的任務(wù)B時,需要將該CPU在nextCpuSet中對應(yīng)位置為1,表示CPU 需要進行重調(diào)度。而若任務(wù)B沒有指定親和性,則需要為任務(wù)B尋找新的可運行CPU,這時 需要將該CPU在deferredCpuSet中相應(yīng)位也置為1,表示重新調(diào)度時需要為被調(diào)度搶占的 任務(wù)尋找新的CPU運行。
[0039] 如圖2、圖3所示,本發(fā)明提供的基于相關(guān)性的任務(wù)優(yōu)化部署方法,對稱多處理器 系統(tǒng)包括多個CPU,每個CPU都有專用的親和性隊列,包括如下步驟:
[0040] 步驟1 :當有新任務(wù)就緒時,判斷新任務(wù)是否具有親和性,當新任務(wù)具有親和性 時,則觸發(fā)步驟2,否則觸發(fā)步驟3 ;
[0041] 步驟2 :將新任務(wù)放到親和性隊列中,判斷親和性CPU上正在運行的任務(wù)是否具有 CPU親和性,當CPU上正在運行的任務(wù)不具有CPU親和性時,則置deferredCpuSet [CPU]= l,nextCpuSet[CPU] = l,deferredCpuSet[CPU] = 1表示重新調(diào)度時需要為被調(diào)度搶占的 任務(wù)尋找新的CPU運行,nextCpuSet[CPU] = 1表示CPU需要進行重調(diào)度,同時退出,當CPU 上正在運行的任務(wù)具有CPU親和性時,則退出;
[0042] 步驟3 :將新任務(wù)放到全局就緒隊列中,尋找運行最低優(yōu)先級任務(wù)的CPU,當尋找 到比新任務(wù)優(yōu)先級低的任務(wù)運行的CPU時,貝u置nextCpuSet[CPU] = 1,同時退出,否則直接 退出。
[0043] 所述步驟1之前還包括如下步驟:
[0044] -獲取CPU的索引號。
[0045] 所述步驟2包括如下步驟:
[0046] 步驟2. 1 :根據(jù)新任務(wù)的親和性屬性獲得CPU的索引號ix ;
[0047] 步驟2. 2 :將新任務(wù)插入到CPU ix的的親和性隊列中;
[0048] 步驟2. 3 :判斷親和性CPU上正在運行的任務(wù)是否具有CPU親和性,當CPU上正在 運行的任務(wù)不具有 CPU 親和性時,貝u置 deferredCpuSet[CPU] = l、nextCpuSet[CPU] = 1、 execTasks[ix]=新任務(wù),向CPU ix發(fā)送調(diào)度請求同時退出,deferredCpuSet[CPU] =1表 示重新調(diào)度時需要為被調(diào)度搶占的任務(wù)尋找新的CPU運行,neXtCpuSet[CPU] = 1表示CPU 需要進行重調(diào)度,execTasks[ix]=新任務(wù)表示使CPU ix指向新任務(wù),當CPU上正在運行 的任務(wù)具有CPU親和性時,則退出;
[0049] 所述步驟3包括如下步驟:
[0050] 步驟3. 1 :將新任務(wù)插入到全局隊列中;
[0051] 步驟3. 2 :找到運行最低優(yōu)先級任務(wù)的CPU iy ;
[0052] 步驟3. 3 :判斷新任務(wù)的優(yōu)先級是否比正運行的任務(wù)高;當新任務(wù)的優(yōu)先級比正 運行的任務(wù)高時,貝1J置nextCpuSet[CPU] =l、execTasks[iy]=新任務(wù),向CPU iy發(fā)送調(diào) 度請求,execTasks[iy]=新任務(wù)表示使CPU iy指向新任務(wù)。
[0053] 該方法的目的是設(shè)置execTasks [ix]使其指向新任務(wù),并將nextCpuSet和 deferredCpuSet中的響應(yīng)標志位置為1,為后面執(zhí)行任務(wù)切換做準備。
[0054] 根據(jù)本發(fā)明提供的基于相關(guān)性的任務(wù)優(yōu)化部署方法,查看execTasks [cpu_id]指 向的任務(wù)是否是編號cpu_id上正在運行的任務(wù),如果不是的話,就執(zhí)行真正的切換。任務(wù) 執(zhí)行調(diào)度的流程圖見圖3。
[0055] 任務(wù)的調(diào)度可以分為兩種,一種是全局調(diào)度,即就緒任務(wù)可以被調(diào)度到任意一個 核上執(zhí)行;二是綁定調(diào)度,即就緒任務(wù)會被調(diào)度到其指定運行的處理器上運行。當任務(wù)沒有 設(shè)置綁定的處理器時,將其放入全局就緒隊列中,保證其基于優(yōu)先級進行調(diào)度。對于指定調(diào) 度處理器的任務(wù),則將其放入局部就緒隊列中,則保證其運行期間不會被調(diào)度到其他處理 器上運行。一般情況下所有的處理器都參與全局調(diào)度,這樣被綁定的任務(wù)在運行時仍然可 能被高優(yōu)先級的全局隊列中的任務(wù)打斷;但也可以特別指定一個核為預(yù)留核,這時此核調(diào) 度綁定在本處理器上的任務(wù),而不參與全局調(diào)度。
[0056] 本發(fā)明提供的基于相關(guān)性的任務(wù)優(yōu)化部署方法采用全局隊列和局部隊列混合的 就緒隊列編排模式。全局隊列中的就緒任務(wù)可以被調(diào)度到所有處理器上運行,基于優(yōu)先級 進行調(diào)度。每個處理器都有一個局部隊列,局部隊列中存放的是綁定到本處理器的就緒任 務(wù),保證其不會被調(diào)度到其他處理器上運行。同時可以指定一個處理器為預(yù)留處理器,此處 理器只調(diào)度綁定在本處理器上的任務(wù)運行,而不參與全局調(diào)度,即不會被全局隊列中更高 優(yōu)先級的任務(wù)搶占。本發(fā)明是整體與局部辨證統(tǒng)一的,全局隊列保證了系統(tǒng)任務(wù)的平等、公 平競爭關(guān)系,每個任務(wù)可能被調(diào)度到各個處理器上運行,實現(xiàn)多處理的負載平衡;局部隊列 和處理器預(yù)留機制保證了系統(tǒng)中關(guān)鍵任務(wù)及時運行,系統(tǒng)的實時性得到充分保證。
[0057] 以上對本發(fā)明的具體實施例進行了描述。需要理解的是,本發(fā)明并不局限于上述 特定實施方式,本領(lǐng)域技術(shù)人員可以在權(quán)利要求的范圍內(nèi)做出各種變形或修改,這并不影 響本發(fā)明的實質(zhì)內(nèi)容。
【權(quán)利要求】
1. 一種基于相關(guān)性的任務(wù)優(yōu)化部署方法,采用的對稱多處理器系統(tǒng)包括多個CPU,每 個CPU都有專用的親和性隊列,其特征在于,包括如下步驟: 步驟1 :當有新任務(wù)就緒時,判斷新任務(wù)是否具有親和性,若新任務(wù)具有親和性,則進 入步驟2,否則進入步驟3 ; 步驟2 :將新任務(wù)放到親和性隊列中,判斷親和性CPU上正在運行的任務(wù)是否具有CPU 親和性,若CPU上正在運行的任務(wù)不具有CPU親和性,則置deferredCpuSet[CPU] = 1, nextCpuSet[CPU] = l,deferredCpuSet[CPU] = 1表示重新調(diào)度時需要為被調(diào)度搶占的任 務(wù)尋找新的CPU運行,nextCpuSet [CPU] = 1表示CPU需要進行重調(diào)度,同時退出;若CPU 上正在運行的任務(wù)具有CPU親和性,則退出; 步驟3 :將新任務(wù)放到全局就緒隊列中,尋找運行最低優(yōu)先級任務(wù)的CPU,若尋找到比 新任務(wù)優(yōu)先級低的任務(wù)運行的CPU,則置neXtCpUSet[CPU] = 1,同時退出,否則直接退出。
2. 根據(jù)權(quán)利要求1所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,所述步驟1之 前還包括如下步驟: -獲取CPU的索引號。
3. 根據(jù)權(quán)利要求1或2所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,所述步驟 2包括如下步驟: 步驟2. 1 :根據(jù)新任務(wù)的親和性屬性獲得CPU的索引號ix ; 步驟2. 2 :將新任務(wù)插入到CPU ix的親和性隊列中,CPU ix表示索引號為ix的CPU ; 步驟2. 3 :判斷親和性CPU ix上正在運行的任務(wù)是否具有CPU親和性,若CPU ix上正 在運行的任務(wù)不具有 CPU 親和性,貝u置 deferredCpuSet[CPU] = l、nextCpuSet[CPU] = 1、 execTasks[ix]=新任務(wù),向CPU ix發(fā)送調(diào)度請求同時退出,其中,execTasks[ix]=新任 務(wù),表示使CPU ix指向新任務(wù);若CPU ix上正在運行的任務(wù)具有CPU親和性,則退出。
4. 根據(jù)權(quán)利要求3所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,所述步驟3包 括如下步驟: 步驟3. 1 :將新任務(wù)插入到全局隊列中; 步驟3. 2 :找到運行最低優(yōu)先級任務(wù)的CPU iy,其中,CPU iy表示索引號為iy的CPU ; 步驟3. 3 :判斷新任務(wù)的優(yōu)先級是否比正運行的任務(wù)高;若新任務(wù)的優(yōu)先級比正運行 的任務(wù)高,貝1J置nextCpuSet[CPU] =l、execTasks[iy]=新任務(wù),向CPU iy發(fā)送調(diào)度請 求,其中,execTasks[iy]=新任務(wù),表示使CPU iy指向新任務(wù)。
5. 根據(jù)權(quán)利要求4所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,步驟2或3中 還包括如下步驟:查看execTasks[cpu_id]指向的新任務(wù)是否是編號為cpu_id的CPU上正 在運行的任務(wù),若不是,則執(zhí)行CPU的切換,其中,execTasks [cpu_id],表示使CPU cpu_id 指向新任務(wù),cpu_id表示CPU的索引號。
6. 根據(jù)權(quán)利要求1所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,對稱多處理 器系統(tǒng)采用的是全局隊列和局部隊列混合的就緒隊列編排模式的方法。
7. 根據(jù)權(quán)利要求1或5所述的基于相關(guān)性的任務(wù)優(yōu)化部署方法,其特征在于,對稱多處 理器系統(tǒng)中設(shè)定一個CPU為預(yù)留CPU,預(yù)留CPU僅調(diào)度綁定在預(yù)留CPU上的任務(wù),而不參與 全局調(diào)度。
【文檔編號】G06F9/50GK104090826SQ201410308737
【公開日】2014年10月8日 申請日期:2014年6月30日 優(yōu)先權(quán)日:2014年6月30日
【發(fā)明者】包晟臨 申請人:中國電子科技集團公司第三十二研究所