王科懷
摘 要:對已有的經典算法進行分類對比,選擇了具有較高遷移速度和對源節點沒有殘余依賴性的Total-copy算法,基于選擇的算法,把遷移系統分為Manager模塊、MigrateOut模塊和MigrateIn模塊等三個模塊,并給出了主要模塊的實現流程圖、設計原理和實現過程。
關鍵詞:進程遷移;遷移算法;Linux內核;集群系統
中圖分類號:TP316 文獻標識碼:A 文章編號:2095-2163(2014)02-
System Design of Process Migration based on Linux Operating System
WANG Kehuai
(PLA Academy of National Defense Information, Wuhan Hubei 430010 ,China)
Abstract: This paper classifies and contrasts the existing classical algorithm, and chose Total-copy algorithm with higher migration rate and no residual dependence on the source node .According to Total-copy algorithm, the migration system is divided into Manager module, MigrateOut module and MigrateIn module. Based on the divided modules,the paper also gives the flow chart of the main modules, design principles and implementation process.
Keywords: Process Migration; Migration Algorithm; Linux Kernel;Distributed Systems
0 引 言
隨著計算機部件性能的日漸提高和價格的不斷下降,集群系統在高性能計算方面的重要作用正愈益突顯,在集群系統的應用中會遇到負載平衡、通信性能和可用性等問題,而進程遷移技術則能夠很好解決這類問題,只是向原有已形成工業標準的系統增加透明的進程遷移,卻非常困難,而直接從頭設計具有遷移能力的新系統并不現實,另一方面,Linux系統作為世界上最為著名的自由軟件,得到了業界的廣泛認可和普遍關注[1]。然而,需要指出的是,截止到Linux2.6版本,還未提供對進程遷移的支持技術。基于此,本文開展利用Linux源代碼的開放性來進行集群系統中的進程遷移的研究,也是具有一定現實意義和重大應用價值的。
1 進程遷移算法分析
進程遷移是指將一個正在運行的進程從一個節點遷移到另外一個節點上運行的過程,該遷移過程可以發生在進程運行的任何時刻。同時,在此過程中需要遷移的進程信息有:進程控制和運行信息、屬于該進程地址空間、進程緩存的消息和關于通信連接的控制信息、進程的文件描述符和緩存的文件塊等[2,3]。進程遷移算法即是基于上述內容來實現進程遷移的,目前流行的遷移算法有Total-copy、Lazy-copy、Pre-copy、Flushing[4]。
本文要實現的進程遷移需要具有一定容錯性。在集群系統中,源節點是有可能出現錯誤的,在進程遷移后源節點也有可能被隔離,因此,設計算法時需要優先考慮對源節點的殘余依賴性,即要求目的節點對源節點沒有殘余依賴性。而Lazy-copy在殘余依賴性方面卻有著不容忽視的明顯缺陷,所以Lazy-copy算法并不適合本文中的進程遷移[4]。另外,當產生的“臟頁”較多,也就是當需要二次傳送的頁面較多時,Pre-copy算法的進程遷移后的完成時間與不進行進程遷移的完成時間相比,也不占任何優勢[5]。顯然,Pre-copy也不適合本文。
再者,如前文所述的Total-copy算法對于源節點沒有殘余依賴,而且,本文所要實現的進程遷移基本上多為基本計算以及只使用字符,文件等簡單結構的進程,對一些較為復雜的圖形進程,并不在本研究考慮的范圍內,因此其遷移時延也不是很大。經過對現有算法的綜合評定可得,本文將選用Total-copy算法實現進程遷移。
2系統的設計與實現
2.1 系統整體架構
2.1.1整體系統框圖
本文的進程遷移系統可分為三個模塊,也就是:MigrateOut、MigrateIn、Manager。各部分間的關系如圖1所示。
圖1 遷移系統結構框圖
Fig.1 Migration system architecture
2.1.2系統運作流程
進程遷移中,各部分運行的基本流程可描述為:
(1)用戶User通知Manager要進行進程遷移,同時將遷移進程的進程號和目的主機的信息傳遞給Manager;
(2)Manger檢查待遷移進程source是否合法,以及目的主機DestinationHost是否可達等,而后通知MigrateOut將source進程遷移到Destination Host主機;
(3)源主機Source Host將source進程掛起后,MigrateOut即開始向目標主機的MigrateIn發送source進程的全部信息,其后殺死source進程;
(4)目標主機Destination Host的MigrateIn可根據發來的信息,在目的主機上重建此進程,并使其在目的主機上繼續執行。
2.1.3進程遷移協議
各個節點之間采用高速的以太網互聯,因此,從遷移協議的角度來看,源主機MigrateOut模塊中的協議部分,類似于一個Client,而目標主機MigrateIn模塊中的協議部分,就類似于一個Server。
Client將獲取到的進程遷移信息通過Linux網絡功能發送,Server端通過網絡功能接受傳來的信息,并提取其中的數據交給MigrateIn模塊處理。
在因特網協議族中,TCP協議具有如下特點:
(1) 面向連接的傳輸;
(2) 端到端的通信;
(3) 高可靠性,確保傳輸數據的正確性,不出現丟失或亂序;
(4) 全雙工方式傳輸;
(5) 采用字節流方式,即以字節為單位傳輸字節序列;
(6) 緊急數據傳送功能。
TCP的這些特點使其可以解決一些通信的錯誤,隨之工作量也有所降低,為此,本文選擇TCP作為基本的網絡傳輸協議。
2.2 模塊的設計
2.2.1 Manager模塊的設計
Manager模塊的設計較為簡單,在Manager模塊接收到從用戶發送的遷移進程號和目的主機后,即開始進行信息校驗和遷移準備工作:
(1)首先是校驗待遷移進程的進程號,進程號如果為0或者current,則本次遷移失敗,并通知用戶不能進行遷移。這里并不是除了以上兩個進程外即都能遷移,在本系統中符合如下狀況的進程是無法進行遷移的[6,7]。相應狀況分別為:
① 進程映射了一些設備內存;
② 進程為內核守護進程;
③ 進程的部分內存由mlock系統調用并鎖住;
④ 進程以共享內存的方式使用文件或者使用了SysV IPC的共享內存等。
(2)接著對目的主機進行通信測試,以確定目的主機是否可達,若不可達,則本次遷移失敗,同時通知用戶。
(3)若目的主機可達,則在兩者間建立相應的socket通信。
2.2.2 MigrateOut模塊的設計
作為遷移進程系統中的傳輸模塊,MigrateOut模塊負責獲取待遷移進程的全部信息(主要包括進程控制和運行信息、內核棧、地址空間等),同時將獲取信息通過高速互聯網絡發送到目的節點上。在全部信息傳送完成后,會中止源進程,并收回其相應資源。MigrateOut模塊的流程圖如圖2所示。
圖2 MigrateOut模塊流程圖
Fig.2 MigrateOut module flowchart
2.2.3 MigrateIn模塊的設計
作為遷移進程系統中的接受模塊,MigrateIn模塊負責接受源主機上發送的數據,并根據提取出來的信息,重建源進程的task_struct結構和內核空間棧,再建立得到用戶空間的頁面及頁表項,在完成以上工作后開始執行新進程,斷開socket鏈接。MigrateIn模塊的流程則如圖3所示。
圖3 MigrateIn模塊流程圖
Fig.3 MigrateIn module flowchart
3 結束語
本文對已有的經典遷移算法從理論上進行了比較,主要基于“決定進程遷移”到“在目標節點上恢復執行”之間的時延、進程遷移的總時延、殘余依賴性等三個方面,即根據對其各自優缺點的分析,選擇了Total-copy算法。算法選定后,將遷移系統分為Manager模塊、MigrateOut模塊和MigrateIn模塊等三個部分,并給出了主要模塊的實現流程圖、設計原理和實現過程。在對遷移算法的設計中,主要對Linux內核的相關機制進行了分析和改造,而且對于進程遷移中的建立動作,進行了解析和改造。
參考文獻
[1] FREEMAN D. Experience building a process migration subsystem for UNIX[C]//Proceedings of the USENIX Winter Conference,1991:349-355.
[2] MILOJICIC D S, DOUGLAS F, PAINDAVEIN Y. Process Migration[R]. ACM Computing Surveys,2000,32(3):241-299.
[3] SMITH J M. A survey of process migration mechanisms[R]. ACM SIGOPS Operating Systems Review,1998,22(3):28-40.
[4] 邱毓蘭,劉曾滿,王卓立. Linux操作系統環境中的進程遷移算法研究[J].武漢大學學報(自然科學版),1999,45(3):276- 278.
[5] 陸桑璐,謝立.進程的動態遷移技術[J].計算機研究與發展.1997.34(9):64-65.
[6] Robert Love. Linux內核設計與實現[M].陳莉君,譯,北京:機械工業出版社,2006.
[7] Mel Gorman. 深入理解Linux虛擬內存管理[M].白洛,譯.北京:北京航空航天大學出版社,2006.