新四季網

一種面向多核處理器的作業系統噪聲控制方法

2023-05-23 19:51:01

專利名稱:一種面向多核處理器的作業系統噪聲控制方法
技術領域:
本發明涉及作業系統和程序分析領域,具體涉及一種面向多核處理器的作業系統 噪聲控制方法。
背景技術:
傳統的程序優化思路是通過程序剖析(Profile)尋找程序的性能瓶頸(如 Cache失效、負載失衡、資源競爭等),再對代碼結構進行重新組織來解決問題。但是近年來的研究顯示,伴隨著硬體性能的提升,特別是系統中可用處理器數目 的增加和網絡連接速度提高,作業系統本身正在逐漸成為應用程式性能提升的障礙。原本 作業系統中的一些正常活動,有可能成為導致應用程式性能下降的有害「噪聲」。一些應用 程序的關鍵代碼,會由於作業系統活動的影響,其運行時間將出現經常性波動。作業系統噪 聲是指作業系統活動對應用程式執行流的中斷,如圖1所示為作業系統噪聲示意圖。由於 引發幹涉的作業系統噪聲是正常的系統活動,並且是通過應用程式的運行間接起作用的, 作業系統噪聲問題在被發現後的很長一段時間內並未引起廣泛的關注。直到最近,高性能 計算領域集群的使用越來越普遍,規模也不斷擴大,但是集群的性能擴展性卻遭遇瓶頸,操 作系統噪聲問題才重新被重視。並隨著商用計算機硬體設備的升級更新,原本高性能領域 使用的多處理器平臺、高速連接設備正在逐漸向中低端應用普及,這也帶來作業系統噪聲 問題影響範圍的擴大。作業系統噪聲問題目前在高性能計算領域表現的比較突出,因為高性能並行計算 程序多數由一系列計算和同步階段組成,考慮每個進程運行在不同作業系統上,如圖1所 示,在不同進程的不同計算階段發生作業系統噪聲,整個並行程序的執行時間就增加。我們的環境資源正在日益緊缺,而伴隨作業系統噪聲問題的,實際上是能源的無 意義的損耗,這和我們所追求的綠色計算的目標是格格不入的。因此,對作業系統噪聲的控 制方法的研究顯得越來越重要。在 FastOS (Forum to Address Scalable Technology for runtimeand Operating Systems)支持的10個項目中,8個項目將作業系統噪聲列為待解 決的問題。由於內核活動佔總作業系統噪聲比例的66%,而內核中重要的噪聲來源是時鐘中 斷(tick),所以關於作業系統噪聲的抑制和消除方法的研究主要集中在時鐘中斷(tick) 的處理方面。Ronald Mraz採用的方法是提高應用程式相對守護進程的權限,同步所有節點的 時鐘。Dan Tsafrir等人否定了對全局時鐘進行同步的解決方案,說明了同步全局時鐘在 大規模集群中實現困難,並且會帶來額外的性能開銷。另外即使全局時鐘同步,本地的時鐘 中斷依然會帶來間接影響。根本的方法是消除時鐘中斷。Tsafrir指出,消除時鐘中斷的 解決方案需要考慮解決方案本身是否具有域局限性(domain-specific),也就是說在集群 下,一個域解決方案可能影響其他域的情況。Tsafrir提到了幾個實例同步全局時鐘的方 法,帶來的額外性能損耗;採用實時系統的單次觸發(one-shot)的方法,不適合可能在一個納秒(ns)級別引發大量事件的通用作業系統;軟時鐘的方法,實際基於擴展了時鐘中斷 機制;節能的時鐘降低時鐘中斷方法,噪聲在系統非空閒狀態依然存在。Tsafrir等人提出了智能時鐘(smart-tick)的概念,建議使用智能時鐘(smart tick),進行事件合併,減少時鐘中斷。Ferreira等人認為時鐘中斷是Linux上作業系統噪聲的主要來源,通過實現動態 時鐘(tickless)解決噪聲問題。但噪聲問題並不因此完全被解決,在大規模並行處理系統 (MPP)上,相比集群系統會增加一個心跳線的機制,而心跳線的特徵同時鐘中斷十分相似。 他們對系統服務設計的建議是,將系統服務拆分成更小,更頻繁運行的任務。他們認為之前 許多設計者採用了相反的思路——將周期性服務設計成周期更長,更少中斷,可能對微觀 測試基準很有效,但是可能帶來實際應用程式的性能下降。所以i^erreira強調使用實際的 應用程式來評測性能。開源High Res POSIX timers 項目,包括了 Linux 內核的 Tickless 補丁。但是 Linux內核的研究人員Christopher Lameter認為現在的動態時鐘實現並不能稱的上名副 其實。Tickless系統只在處理器空閒的時候起作用,而時鐘中斷仍然在多進程爭用處理器 的時候起作用,即用於時間片檢查。另外,Lameter還對抑制非時鐘中斷導致作業系統噪聲提出了建議,如採用cache 感知的調度算法,或者對多處理器系統中CPUO的工作進行特別調度CPU0負責更新系統時 間;時間敏感的程序不應該被調度到CPUO上;CPUO可以接管其他處理器的事務性工作,如 管理調度隊列和外設中斷等。現有的減少作業系統噪聲的基本方法主要有1)限制守護進程的執行;2)限制硬 件中斷分發。但是這類作業系統噪聲控制手段並不是特別針對作業系統噪聲的,在面對操 作系統噪聲控制方面存在一些局限性。如修改啟動腳本、守護進程在固定的處理器上運行, 但是內核的任務平衡算法仍然在起作用,內核活動仍然會被調度到不同的處理器上,使得 作業系統噪聲控制不能很好實現。

發明內容
本發明的目的是為了減少並行進程受到的作業系統噪聲,提出一種面向多核處 理器的作業系統噪聲控制方法。基於隔離控制的方法,在Linux內核上實現,考慮多核環 境下,並行應用程式由一組進程組成,每個進程運行在一個處理器核上,處理器核數目增加 時,通過本發明實現的隔離控制方法可以在新增處理器核上減少並行進程受到的作業系統 噪聲,來實現性能優化。一種面向多核處理器的作業系統噪聲控制方法,具體是第一步、配置一套內核的 控制接口,包括步驟1. 1、虛擬文件系統/proc接口初始化首先創建靜化處理器子系統的目錄 quietcpu,然後在目錄quietcpu下為每個處理器創建各自的子目錄以及控制項,最後為每 個控制項註冊相應的讀寫操作函數,並將作業系統中的數據結構pr0C_dir_entry中的參 數data中存儲的數據修改為指針形式的處理器編號;步驟1. 2、訪問虛擬文件系統/proc文件接口 當靜化處理器子系統中的某個靜 化處理器的控制項文件中被寫入數據時,寫操作函數被調用,寫操作函數從數據結構proc_dir_entry中的參數data中獲得處理器的編號,再對寫入的數據進行分析,在寫入數據有 效且寫入的數據為非零值時,調用與從參數data中獲得的處理器編號對應的靜化處理器 設置函數,若寫入的數據為0,則恢復靜化處理器到正常模式;從靜化處理器子系統中的某 個靜化處理器的控制項文件讀取數據時,讀操作函數同樣從data參數中取得處理器編號 後,從靜化處理器子系統獲得對應處理器的靜化狀態;將作業系統中原函數Set_CpuS_all0Wed_ptr替換為帶有靜化處理器子系統標誌 的新函數_8討_叩卯_3110恥(1,新函數較原函數增加了一個用於標誌是否是來自處理器靜 化子系統調用的參數,對系統調用函數schecLsetaffinity的實現進行修改,在修改進程 與處理器的現有分配關係時會調用函數_set_CpuS_all0Wed,通過使用taskset工具,先啟 動進程執行,再設置進程的親和性屬性,從而制定進程在靜化處理器上運行;所述的進程的 親和性屬性具體是通過調用新函數_set_CpuS_all0Wed,修改位圖cpuS_allowed來設置 的;第二步、設置支持靜化控制的內核機制,包括步驟2. 1、內核工程的修改通過在作業系統內核kernel目錄下創建靜化處理器 子目錄,編寫內核配置菜單Kconfig文件,為靜化處理器子系統提供一個被內核識別的配 置選項;步驟2. 2、基本數據結構的增加和修改為靜化處理器子系統設置一個全局數據 結構,該全局數據結構包括靜化處理器位圖mask、靜化處理器計數number、以及具體處理 器靜化信息cpujnfo ;在進程數據結構task_strUCt中,添加表示靜化處理器進程狀態的 數據結構 quitecup_task_info ;步驟2. 3、設置靜化處理器,包括設置新的靜化處理器和還原靜化處理器,每次設 置新的靜化處理器時,要對靜化處理器計數進行累計,若已存在的靜化處理器數等於操作 系統中能用處理器-1時,終止增加新的靜化處理器,在解除處理器靜化時,減少靜化處理 器計數;步驟2. 4、保護靜化處理器不受影響對於非靜化處理器,避免將進程從靜化處理 器上遷移走,以及避免將進程遷移到靜化處理器上;對於靜化處理器,避免外部進程被遷移 到靜化處理器上,避免將進程從靜化處理器上遷移走,以及然後避免激活本地的處理器平 衡軟中斷。本發明的優點與積極效果在於(1)本發明的作業系統噪聲控制方法可以不用重 啟地重新設置某些需要隔離的靜化處理器,使這些處理器避免任務的再平衡,從而實現了 對作業系統噪聲的控制;(2)本發明的作業系統噪聲控制方法給作業系統用戶提供了良好 的一致性體驗。


圖1是現有的作業系統噪聲的示意圖;圖2是本發明的噪聲控制方法的步驟流程圖;圖3是proc文件系統中的靜化處理器的目錄結構示意圖;圖4是靜化處理器框架中的數據結構;圖5是使用本發明噪聲控制方法的作業系統噪聲和與標準內核的作業系統噪聲 的最大延遲的對比示意圖6是使用本發明噪聲控制方法的作業系統噪聲和與標準內核的作業系統噪聲 的平均延遲的對比示意圖。
具體實施例方式下面將結合附圖和實施例對本發明作進一步的詳細說明。本發明的噪聲控制方法在對Linux內核中處理器隔離相關的機制進行比較分析 的基礎上,添加了一個新的靜化處理器子系統(quietcpu)來抑制作業系統噪聲在多處理 器系統上的平衡現象。所述的靜化處理器子系統是通過提供一個簡單有效的配置接口,使 得不用重啟系統而能重新設置某些需要隔離的靜化處理器,使這些處理器避免任務的再平 衡,從而實現對作業系統噪聲的控制。本發明的噪聲控制方法,如圖2所示,具體為如下步驟。第一步、設置一套內核的控制接口,通過該接口可以動態地設置靜化處理器,並可 以指定進程到靜化處理器上運行。接口設計方面需要考慮和目前Linux作業系統接口的一致性。基本的設計思路如 下·使用虛擬文件系統/proc文件系統指定哪些處理器設置為靜化處理器;·使用作業系統工具taskset指定哪些任務可以調度到靜化處理器上;·內核調度進程運行到靜化處理器上時,當發現處理器的親和性位圖上有該靜化 處理器時,則成功調度,否則調度失敗。通過所述的內核控制接口,無論用戶是否啟用靜化處理器子系統,工具taskset 的結果都和標準版本相同,可以提供給作業系統用戶良好的一致性體驗。內核控制接口,具體是利用內核提供的相關機制將配置靜化處理器的接口作為一 個內核模塊,集成到/proc文件系統中,通過下面三個步驟實現。步驟1. Uproc文件接口初始化。如圖3所示,首先創建靜化處理器子系統的目錄quietcpu,然後在目錄quietcpu 下為每個處理器創建各自的子目錄cpuX以及控制項quiet,最後為每個控制項註冊相應的 讀寫操作函數。本發明的作業系統噪聲控制方法中,將數據結構pr0C_dir_entry中的參數 data中存儲指針形式的處理器編號,而不是存儲原來指向額外數據區的指針,這樣做是為 了簡化實現,避免額外的內存使用,後面提到的處理函數接收到的data參數實際為處理器 編號而不是指針。所述的數據結構pr0C_dir_entry,它的主要成員是各種/proc文件系統 操作的函數指針。 步驟1. 2、訪問proc文件接口。當靜化處理器X的控制項/proc/quietcpu/cpuX/quiet文件中被寫入數據時,初 始化時註冊的寫操作函數就被調用,寫操作函數從data參數中獲得處理器的編號,再對寫 入的數據進行分析,當寫入數據有效,並為非零值時,調用從data參數中獲得的相應的靜 化處理器設置函數。當寫入的數據為0時,恢復靜化處理器到正常模式。例如,用戶可以在 命令行下通過輸出重定向功能修改控制項文件echol > /proc/quietcpu/cpul/quietechoO > /proc/quietcpu/cpul/quiet
命令echo是Iinux命令,默認將後面的內容輸出到控制臺上,後面跟重定向符 「>」可將內容直接輸出到文件中,上例是將「1」/ 「0」輸出到靜化處理器cpul的控制項中。從/proc/quietcpu/cpuX/quiet文件讀取數據時,初始化時註冊的讀操作函數就 會被調用,讀操作函數同樣從data參數中取得處理器編號後,然後從靜化處理器子系統獲 得對應處理器的靜化狀態,正常的處理器將緩衝區數據設置為0,靜化處理器將緩衝區數據 設置為1。步驟1. 3、指定進程到靜化處理器上運行。可以使用taskset工具,該工具的基本原理是先啟動進程執行,再設置進程的親 和性屬性。作業系統函數Set_CpuS_all0Wed_ptr是用於設置處理器可用性的,通過修改參 數CpuS_all0Wed來設置,參數CpuS_all0Wed以位圖形式描述可運行進程的處理器。設置處 理器親和性,通過系統調用上述函數set_cpus_allowed_ptr修改cpus_allowed實現。由於 是來自靜化處理器子系統外的調用,函數_Set_CpUS_allowed將在非靜化的處理器集合中 選取有效的處理器,這樣在一組非靜化處理器中選取靜化處理器,一定會失敗。本發明的噪 聲控制方法對系統調用函數schecLsetaffinity的實現進行了修改,採用帶有靜化處理器 子系統標誌的_set_cpus_allowed函數替換原本的set_cpus_allowed_ptr函數。新函數 _set_cpus_allowed較原函數set_cpus_allowed_ptr增加了一個用於標誌是否是自處理 器靜化子系統的調用的參數。通過調用新函數_8討_叩118_3110恥(1,修改位圖形式的cpus_ allowed實現處理器親和屬性,這樣使用taskset工具就可以自由的修改進程的處理器親 和性屬性,從而制定進程在靜化處理器上運行。所述的作業系統函數schecLsetaffinity 可用於修改進程與處理器的現有分配關係。所述的CpuS_all0Wed表示的是進程的親和性, 即進程可以在哪些處理器上運行,而函數_set_cpus_allowed是通過修改cpus_allowed來 指定進程可以在哪些處理器上運行的,而靜化處理器本身就是為了只運行一些系統進程而 不能將其他進程綁定到其上運行的,因此函數schecLsetaffinity在修改進程與處理器的 現有分配關係時會調用函數_Set_CpUS_allowed設置進程可運行在哪些處理器上,當指定 進程運行在靜化處理器時會出錯,所以本發明要對函數schecLsetaffinity進行修改,需 要判斷是否在一組非靜化處理器中選取靜化處理器,從而在調用函數_set_CpUS_all0Wed 時傳遞一個標誌參數,表明是否來自處理器靜化子系統的調用。第二步、設置支持靜化控制的內核機制,主要包括內核工程的修改、基本數據結 構的增加和修改、設置新的靜化處理器和保護靜化處理器不受影響。步驟2. 1、內核工程的修改。添加一個靜化處理器子系統,需要在內核原始碼樹下添加新的目錄,並且修改內 核的Makefile文件。所述的Makefile文件是用於管理大規模工程的編譯的規則文件。為方便用戶選擇,將靜化處理器子系統實現為一個可選擇的內核模塊。在操作系 統內核kernel目錄下創建靜化處理器子系統目錄quietcpu,編寫內核配置菜單Kconf ig文 件(kernel/quietcpu/Kconfig),為靜化處理器子系統提供一個可被內核識別的配置選項。 在內核配置菜單Kconfig文件中生成宏C0NFIG_QUIETCPU config QUIETCPU在內核Makefile文件$ (srctree)/kernel/Makefile中,添加靜化處理器子系統 的目錄obj-$(C0NFIG_QUIETCPU)+ = quietcpu/後,內核編譯工具就可以編譯quietcpu目錄下的源程序了。這樣在具體的平臺Kconfig文件,如$(srctree)/arch/mips/Kconfig中引用內核 配置菜單Kconfig文件,CONFIG_QUIETCPU宏定義就在內核原始碼中可以被作業系統識別 了。例如在文件 $ (srctree) /arch/mips/Kconf ig 中,添力口 source "kernel/quietcpu/Kconfig"在編譯過程中通過文件kernel/quietcpu/Kconf ig中的conf ig QUIETCPU語句生 成指示內核編譯工具去編譯quietcpu目錄下的源程序的宏。步驟2. 2、基本數據結構的增加和修改,是指管理靜化處理器子系統的全局數據結 構的增加,以及進程數據結構的修改。靜化處理器子系統設置一個全局描述符,管理靜化處理器子系統的各個狀態,包 括靜化處理器位圖mask,靜化處理器計數number,具體處理器靜化信息cpujnfo等。同 時,需要擴展進程描述符task_strUCt,添加信息保存正常設置處理器親和性位圖oldmask 和表示具體處理器的靜化信息的指針info,其中只有運行在靜化處理器上的進程,才有對 應的靜化處理器。如圖4所示,總體結構quietcpu是一個全局數據結構,表示整個靜化處理器子 系統,結構中嵌入一個數據cpujnfo存儲每個處理器的靜化狀態,NR_CPU表示處理器的 編號,具體處理器靜化信息cpujnfo中包括有表示該處理器是否已經被靜化的數據項 shield,以及該處理器是否鎖定的數據項lock。判斷一個處理器是否是靜化處理器,從全 局數據結構quietcpu中取得每個處理器的狀態,查看所查詢的處理器是否已經被靜化。在 進程數據結構taSk_StrUCt中,添加表示靜化處理器進程狀態的數據結構qUiteCUp_taSk_ info,數據結構quitecupjaskjnfo中包含保存正常設置處理器親和性位圖oldmask和 表示具體處理器的靜化信息的指針info,指針info指向總體結構quietcpu中具體處理器 靜化信息cpu_info。步驟2. 3、設置靜化處理器。設置靜化處理器的過程中,需要修改進程可用處理器。內核進程結構中的cpus_ allowed位圖形式描述可運行進程的處理器。作業系統內核中實現的set_cpus_all0wed_ Ptr函數完成CpUS_all0Wed的修改,但是本發明的噪聲控制方法中的靜化處理器功能需要 判斷可用處理器修改是否是來源於處理器靜化子系統的調用,如果是,則擁有最大的自由 度,可以直接修改cpuS_all0Wed,否則,需要同靜化處理器位圖mask做一個按位與操作,再 將新位圖設置成cpuS_all0Wed,同時保存最初始的親和性設置到oldmask中,以便撤銷靜 化操作時,進行還原。為次,本發明的噪聲控制方法對原函數set_Cpus_all0Wed_ptr作了 修改,將該函數原先的內部實現移到新函數_set_Cpus_allowed中,新函數較原函數增加 了一個參數,標誌是否是來自處理器靜化子系統的調用,在這個過程中保存進程舊的處理 器親和性位圖。1)設置新的靜化處理器。遍歷系統中所有的進程,修改程序運行執行的處理器親和性位圖cpUS_all0Wed, 同時將舊位圖保留。在該過程中,需要判斷獲得的進程是否還存活alive;獲得讀寫自旋 鎖tasklist_lock,保護以init_task為頭節點的進程鍊表;修改設置位圖前需要釋放tasklistjock,設置過程可能需要對進程進行遷移,過程中可能需要訪問tasklistjock ; 處理器親和性選項生效之後,內核將對進程進行遷移。2)還原靜化處理器。先將靜化處理器從靜化處理器子系統的靜化處理器位圖mask中移除,然後取得 系統中可用的處理器位圖,最終還原靜化處理器為正常模式的處理器。具體在作業系統中, 將靜化處理器從靜化處理器子系統的靜化處理器位圖中移除的函數如下cpus_complement (unshielded, asmp_descr. mask);函數cpus_complement中,asmp_descr. mask的值是被靜化的處理器位圖,該函數 執行的操作是變量unshieded = asmp_descr. mask,執行後變量unshielded的值是沒 被靜化的處理器位圖。根據可用的處理器位圖還原靜化處理器,其函數如下cpus_and (unshielded,unshielded,cpu_online—map);函數cpus—and中,第二項的變量unshielded的值都是函數cpus—complement執 行後的變量unshielded的值,cpu_online_map是內核中在線的處理位圖,執行的操作是 第一項變量 unshielded = unshieded&cpu_online—map,執行後第一項變量 unshielded 的 值就是還原靜化處理後的處理器位圖了。在可用的處理器位圖中修改,如果該處理器是可用的則還原為正常模式的處理 器,否則為不可用的處理器。處理器靜化子系統的一個核心問題是修改進程的處理器親和性位圖,而進程的運 行至少且必須有一個處理器,因此處理器靜化子系統不允許將系統中的所有處理器都設置 成靜化狀態。設置靜化處理器時,需要進行一個靜化處理器計數,每次增加靜化處理器都需 要對計數進行累加,若內核中已存在的靜化處理器數等於系統中可用處理器-1時,終止新 的靜化處理器設置;在解除處理器靜化時,減少靜化處理器計數。此外,在計數時還要注意 考慮靜化處理器重複設置和移除的情況。步驟2. 4、保護靜化處理器不受影響。由調度域的標誌位flags可知,系統中有幾個時機會進行進程遷移。本發明的噪聲控制方法中的靜化處理器的功能需要對所有進程遷移情況都進行 考慮,才能保證靜化處理器上應用程式不受作業系統噪聲幹涉。下面將從非靜化處理器和 靜化處理器兩個角度出發,說明保護靜化處理器不受影響的具體實現方式。針對非靜化處理器,首先避免將進程從靜化處理器上遷移走。系統負載均衡函數loacLbalance在軟中斷中被執行,該函數首先調用函數 cpumask_setall (cpus),將所有的處理器cpu在變量cpus中置位,即將cpus位圖中的nr_ cpumask_bits位都設置上,變量cpus的每一位表示一個處理器,開始時將系統中所有可用 的處理器的相應位都置上位,而nr_cpumask_bits在內核中被宏定義為nr_cpu_ids,nr_ cpu_ids為系統的處理器數,變量poSSible_CpuS會更改變量nr_Cpu_ids的數值。在調度 域上根據變量cpus,尋找任務最頻繁的隊列,若該隊列所在的處理器啟用靜化功能,則做如 下操作·相當於該隊列上的所有進程都處於綁定狀態,通過設置loacLbalance函數中的 all_pinned標誌,使該隊列上的所有進程都處於綁定狀態;·將該處理器從cpus位圖中移出;
·之後如果cpus位圖為空,則從函數loacLbalance中退出,否則重新尋找繁忙的 就緒隊列。當處理器被設置為靜化處理器時,需要將該處理器上運行的進程遷移到其它非靜 化處理器上。其次避免非靜化處理器將進程遷移到靜化處理器上。根據作業系統函數SChed_ balance_Self返回最空閒的處理器,遍歷調度域中的所有處理器,發現最空閒的處理器如 果被靜化,則跳過該處理器,檢查下一個。針對靜化處理器,首先避免外部進程被遷移到靜化處理器上。如果靜化處理器的運行隊列中沒有可運行的進程存在,從另外一個運行隊列遷移 一些可運行進程到本地運行隊列中,具體是通過函數schedule調用函數idlejalance來 實現。如果一個處理器進入了空閒(IDLE)狀態,並且它所屬的調度域(domain)設置了 SD_BALANCE_NEWIDLE標誌,則馬上就會進行負載平衡(balance),把忙的處理器上的進程 遷移過來,從而最大的發揮多處理器的優勢。函數idlejDalance中,如果當前處理器是被靜化的,則直接返回,如果不是,繼續 執行。其次避免將進程從靜化處理器上遷移走。在進程剛創建的時候,用exec系統調用啟動一個新進程時,調度器將跨越處理器 移動該進程。exec系統調用會調用掛鈎函數schecLexec,掛鈎函數SChed_exeC中調用函 數schecLbalancejelf·挑選當前負荷最少,且進程能被允許在該處理器上運行的處理器。 如果不是當前處理器,那麼會使用schecLmigrateJask,向遷移線程發送一個遷移請求。在函數schecLbalancejelf中,需要添加目標處理器的判斷,如果目標處理器是 被靜化的,是則直接返回,否則正常執行後續的平衡操作。然後避免激活本地的處理器平衡軟中斷。在Linux作業系統2. 6的早期版本內核中,任務平衡算法被實現在時鐘中斷函數 裡,而在Linux作業系統2. 6. 28版本以後的內核中,任務平衡算法被移至軟中斷處理例程 中執行,軟中斷中調用函數rebalance_domains中再調用函數load_balance。在函數schedulerJickO中激活任務平衡軟中斷之前,需要判斷當前處理器是 否是靜化處理器,是則返回,否則正常激活軟中斷程序。所述的函數schedulei^tickO在 時鐘中斷處理程序中被調用,函數schedulerJickO更新當前進程的時間片time_SliCe ; 並根據所分配的時間片time_Slice的使用情況是剩餘還是耗盡,來做進一步處理。為了對本發明的面向多核的作業系統噪聲控制方法的噪聲控制效果進行測試,在 IBMx3500伺服器上,使用本發明方法,將1號到3號處理器設置為靜化處理器。然後,使用 taskset命令接口運行針對串行應用的作業系統噪聲度量工具來對啟用靜化處理器功能後 的作業系統噪聲控制效果進行測試。如圖5和圖6所示,是IBM x3500伺服器上開啟靜化處理器子系統前後的實驗結 果中的最大延遲和平均延遲的數據對比圖。豎軸表示延遲的大小,單位為us。在該實驗中,打開靜化功能的1號、2號、3號處理器上的作業系統噪聲的最大延遲 和平均延遲均發生了下降,由於沒有對0號處理器實施特殊的控制,因此被靜化處理器排除的系統任務就被集中在0號處理器上運行,表現為圖6中在0號處理器上測量到的操作 系統噪聲平均延遲較開啟靜化功能前略有增加。 由圖5中可以看出,使用本發明方法作業系統噪聲的最大延遲下降了 50%左右。 由圖6中可以看出,使用本發明方法作業系統噪聲平均延遲下降10%左右(0. lus)。由此 說明本發明的控制方法確實有效的減少了多核系統上的作業系統噪聲。
權利要求
1.一種面向多核處理器的作業系統噪聲控制方法,其特徵在於,該方法在Linux內核 上實現,具體為第一步、配置一套內核的控制接口,包括步驟1. 1、虛擬/proc文件系統接口初始化首先創建靜化處理器子系統的目錄 quietcpu,然後在目錄quietcpu下為每個處理器創建各自的子目錄以及控制項,最後為每 個控制項註冊相應的讀寫操作函數,並將作業系統中的數據結構pr0C_dir_entry中的參 數data中存儲的數據修改為指針形式的處理器編號;步驟1.2、訪問虛擬/proc文件系統的文件接口 當靜化處理器子系統中的某個靜化處 理器的控制項文件中被寫入數據時,寫操作函數被調用,寫操作函數從數據結構pr0C_dir_ entry中的參數data中獲得處理器的編號,再對寫入的數據進行分析,在寫入數據有效且 寫入的數據為非零值時,調用與從參數data中獲得的處理器編號對應的靜化處理器設置 函數,若寫入的數據為0,則恢復靜化處理器到正常模式;從靜化處理器子系統中的某個靜 化處理器的控制項文件讀取數據時,讀操作函數同樣從參數data中取得處理器編號後,從 靜化處理器子系統獲得對應處理器的靜化狀態;步驟1. 3、指定進程到靜化處理器上運行將作業系統中原函數Set_CpUS_alIowecL Ptr替換為帶有靜化處理器子系統標誌的新函數_set_Cpus_allowed,新函數較原函數 增加了 一個用於標誌是否是來自處理器靜化子系統調用的參數,對系統調用函數sched_ setaffinity的實現進行修改,在修改進程與處理器的現有分配關係時會調用函數_set_ CpuS_all0Wed,通過使用taskset工具,先啟動進程執行,再設置進程的親和性屬性,從而 制定進程在靜化處理器上運行;所述的進程的親和性屬性具體是通過調用新函數_set_ CpuS_all0Wed,修改處理器親和性位圖CpuS_all0Wed來設置的;第二步、設置支持靜化控制的內核機制,包括步驟2. 1、內核工程的修改通過在作業系統內核kernel目錄下創建靜化處理器子目 錄,編寫內核配置菜單Kconfig文件,為靜化處理器子系統提供一個被內核識別的配置選 項;步驟2. 2、基本數據結構的增加和修改為靜化處理器子系統設置一個全局數據結構, 該全局數據結構包括靜化處理器位圖mask、靜化處理器計數number、以及具體處理器靜化 信息cpujnfo,具體處理器靜化信息cpujnfo中存儲每個處理器的靜化狀態;在進程數據 結構taSk_Struct中,添加表示靜化處理器進程狀態的數據結構quitecupjaskjnfo ;步驟2. 3、設置靜化處理器,包括設置新的靜化處理器和還原靜化處理器,每次設置新 的靜化處理器時,要對靜化處理器計數進行累計,若已存在的靜化處理器數目等於操作系 統中能用處理器-1時,終止增加新的靜化處理器,在解除處理器靜化時,減少靜化處理器 計數;步驟2. 4、保護靜化處理器不受影響對於非靜化處理器,避免將進程從靜化處理器上 遷移走,以及避免將進程遷移到靜化處理器上;對於靜化處理器,避免外部進程被遷移到靜 化處理器上,避免將進程從靜化處理器上遷移走,以及避免激活本地的處理器平衡軟中斷。
2.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 1所述的編寫內核配置菜單Kconf ig文件,為靜化處理器子系統提供一個被內核 識別的配置選項,具體是在內核配置菜單Kconfig文件中生成宏CONFIG_QUIETCPU,在內核Makefile文件中添加靜化處理器子系統的目錄。
3.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 2所述的具體處理器靜化信息cpujnfo包括表示該處理器是否已經被靜化的 數據項shield,以及該處理器是否鎖定的數據項lock ;所述的數據結構qUiteCUp_taSk_ info包含保存正常設置處理器親和性位圖oldmask和表示具體處理器的靜化信息的指針 info,其中,指針info指向具體處理器靜化信息cpujnfo。
4.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 3所述的設置新的靜化處理器,具體過程是遍歷作業系統中所有的進程,修改 進程運行執行的處理器親和性位圖cpuS_all0Wed,同時保存舊處理器親和性位圖;在該過 程中,要判斷獲得的進程是否還存活,獲得讀寫自旋鎖tasklistjock,保護以init_taSk 為頭節點的進程鍊表,修改處理器親和性位圖前釋放讀寫自旋鎖tasklistjock,在處理器 親和性選項生效後對進程進行遷移。
5.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 3所述的還原靜化處理器,具體過程是先將靜化處理器從靜化處理器子系統的 靜化處理器位圖中移除,再取得系統中能用的處理器位圖,如果該處理器能用則將該當前 要還原的靜化處理器還原為正常模式的處理器。
6.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 4所述的對於非靜化處理器,避免將進程從靜化處理器上遷移走,具體過程是 在調度域上根據函數loacLbalance中的變量cpus,尋找任務最頻繁的隊列,若該隊列所在 的處理器為靜化處理器,則做如下操作(1)設置函數loacLbalance中的all_pirmed標 志;⑵將該處理器從cpus位圖中移出;(3)如果cpus位圖為空,從函數loacLbalance中 退出,否則重新尋找繁忙的就緒隊列。
7.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 4所述的對於非靜化處理器,避免將進程遷移到靜化處理器上,具體過程是遍 歷調度域中的所有處理器,根據作業系統函數schecLbalancejelf返回最空閒的處理器, 若返回的最空閒的處理器被靜化,則跳過該處理器,檢查下一個。
8.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 4所述的對於靜化處理器,避免外部進程被遷移到靜化處理器上,具體方法是 如果當前處理器的本地運行隊列中沒有能運行的進程存在,通過函數schedule調用函數 idle_balance,從另外一個運行隊列遷移進程到本地運行隊列中,如果當前處理器是靜化 處理器,函數idle_balance直接返回。
9.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在 於,步驟2. 4所述的對於靜化處理器,避免將進程從靜化處理器上遷移走,具體方法是在 進程剛創建的時候,用exec系統調用啟動一個新進程時,調度器將跨越處理器移動該進 程,exec系統調用會調用掛鈎函數sched_exec,掛鈎函數sched_exec中調用函數sched_ balance_self挑選當前負荷最少,且進程能被允許在該處理器上運行的目標處理器,在函 數schecLbalancejelf中,添加目標處理器的判斷,如果目標處理器是靜化處理器,則直 接返回,否則正常執行後續的平衡操作。
10.根據權利要求1所述的一種面向多核處理器的作業系統噪聲控制方法,其特徵在於,步驟2. 4所述的對於靜化處理器,避免激活本地的處理器平衡軟中斷,具體方法是在 函數schedulerjick中激活任務平衡軟中斷之前,判斷當前處理器是否是靜化處理器,如 果是直接返回,否則正常激活軟中斷程序。
全文摘要
本發明為一種面向多核處理器的作業系統噪聲控制方法,屬於作業系統和程序分析領域。本發明的噪聲控制方法基於隔離控制的方法,在Linux內核上實現,首先設置一套內核控制接口,通過該接口動態地設置靜化處理器,並指定進程到靜化處理器上運行;然後設置支持靜化控制的內核機制,主要包括內核工程的修改、基本數據結構的增加和修改、設置新的靜化處理器和保護靜化處理器不受影響。本發明的噪聲控制方法可以不用重啟地重新設置某些需要隔離的靜化處理器,使這些處理器避免任務的再平衡,從而實現了對作業系統噪聲的控制,並給作業系統用戶提供了良好的一致性體驗。
文檔編號G06F15/16GK102117224SQ20111006140
公開日2011年7月6日 申請日期2011年3月15日 優先權日2011年3月15日
發明者王雷, 譚成鑫, 陳佳捷 申請人:北京航空航天大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀