• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      設(shè)置進(jìn)程檢查點的嵌入式容錯系統(tǒng)設(shè)計

      2014-08-12 08:46:10王福友楊斌
      關(guān)鍵詞:雙機檢查點內(nèi)核

      王福友,楊斌

      (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 610031)

      設(shè)置進(jìn)程檢查點的嵌入式容錯系統(tǒng)設(shè)計

      王福友,楊斌

      (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 610031)

      針對嵌入式Linux系統(tǒng)的特點,通過設(shè)置檢查點(checkpoint)實現(xiàn)ARM平臺進(jìn)程級容錯。在檢查點工作時,通過/proc文件系統(tǒng)與內(nèi)核進(jìn)行交互,實時地獲取與進(jìn)程有關(guān)的PID、CPU狀態(tài)以及內(nèi)存信息,并保存在存儲介質(zhì)中。當(dāng)進(jìn)程出現(xiàn)故障后,將上述與進(jìn)程有關(guān)的狀態(tài)信息進(jìn)行恢復(fù),從而實現(xiàn)進(jìn)程級容錯。實驗表明,該進(jìn)程級容錯系統(tǒng)有較好的容錯能力,極大地縮短了進(jìn)程恢復(fù)的時間。

      ARM;嵌入式Linux;檢查點;容錯

      引 言

      隨著ARM處理器性能不斷提升,同時又兼具低功耗、體積小的特點,在工控和高性能計算領(lǐng)域中以ARM處理器為核心的嵌入式平臺應(yīng)用得越來越廣泛。鑒于工控和高性能計算領(lǐng)域的系統(tǒng)可靠性要求極高,因此如何設(shè)計高可靠性系統(tǒng)成為一個至關(guān)重要的課題。

      提高系統(tǒng)可靠性的一個有效的方法是容錯。檢查點機制是一種典型的軟件容錯技術(shù),通過設(shè)置檢查點來實現(xiàn)進(jìn)程級容錯。檢查點機制主要分為兩種:用戶態(tài)和內(nèi)核態(tài)。用戶態(tài)檢查點具有較好的可移植性,但是用戶需要修改程序源碼,缺乏透明性和通用性,代表性用戶態(tài)檢查點有Conder和Libckpt。內(nèi)核態(tài)檢查點獨立于用戶程序,對用戶完全透明,方便用戶使用,代表性內(nèi)核態(tài)檢查點為BLCR。本文正是基于內(nèi)核態(tài)檢查點BLCR設(shè)計思想,在ARM平臺嵌入式Linux系統(tǒng)上實現(xiàn)進(jìn)程級容錯系統(tǒng)。

      1 系統(tǒng)結(jié)構(gòu)設(shè)計

      檢查點通過人為或周期性地向系統(tǒng)發(fā)送進(jìn)程保存信號來備份進(jìn)程狀態(tài),生成含有進(jìn)程信息的文件。當(dāng)檢測到進(jìn)程因某種原因崩潰時,通過讀取進(jìn)程信息文件,將進(jìn)程回轉(zhuǎn)到備份時的狀態(tài),從而實現(xiàn)進(jìn)程恢復(fù),完成系統(tǒng)容錯。

      圖1 系統(tǒng)結(jié)構(gòu)設(shè)計圖

      根據(jù)本系統(tǒng)實際功能設(shè)計三個模塊,分別是用戶態(tài)的用戶接口模塊、進(jìn)程信息存儲模塊,以及內(nèi)核態(tài)的進(jìn)程信息保存與恢復(fù)模塊。系統(tǒng)結(jié)構(gòu)設(shè)計圖如圖1所示。

      (1) 用戶接口模塊

      用戶接口模塊為用戶進(jìn)程的狀態(tài)保存與恢復(fù)鏈接動態(tài)鏈接庫提供了標(biāo)準(zhǔn)化使用接口,通過這個接口訪問內(nèi)核態(tài)的進(jìn)程信息保存與恢復(fù)模塊。

      (2) 進(jìn)程信息存儲模塊

      在進(jìn)程保存過程中,通過vfs_write()函數(shù)將進(jìn)程信息保存成固定格式的文件。在進(jìn)程恢復(fù)過程中,使進(jìn)程信息保存與恢復(fù)模塊可以通過vfs_read()函數(shù)訪問,從而完成進(jìn)程的恢復(fù)工作。

      (3) 進(jìn)程信息保存與恢復(fù)模塊

      進(jìn)程信息保存與恢復(fù)模塊是本系統(tǒng)的核心模塊,由于用戶態(tài)和內(nèi)核態(tài)的內(nèi)存地址空間不同,不能使用簡單的函數(shù)調(diào)用方式,在本系統(tǒng)中用戶態(tài)與內(nèi)核態(tài)模塊通過/proc文件系統(tǒng)進(jìn)行數(shù)據(jù)交互。在進(jìn)程保存過程中,該模塊獲取與進(jìn)程有關(guān)的信息,并調(diào)用進(jìn)程信息存儲模塊保存進(jìn)程信息;而在進(jìn)程恢復(fù)過程中,通過訪問之前保存的含有進(jìn)程信息的文件恢復(fù)進(jìn)程。

      在系統(tǒng)實現(xiàn)方式上采用單機和雙機兩種實現(xiàn)模式。單機模式下,進(jìn)程的保存與恢復(fù)都是在同一臺機器上進(jìn)行的;雙機模式下,在一臺機器上進(jìn)行進(jìn)程信息的保存,在另外一臺機器上保存生成的進(jìn)程信息文件并恢復(fù)進(jìn)程。

      2 系統(tǒng)開發(fā)中關(guān)鍵技術(shù)的研究

      本系統(tǒng)在進(jìn)程保存時將進(jìn)程的信息、CPU寄存器的狀態(tài)、signal信息、進(jìn)程的內(nèi)存地址空間等信息保存到文件里。在進(jìn)程恢復(fù)時,調(diào)用fork( )函數(shù)創(chuàng)建一個新進(jìn)程,讀取文件中上述進(jìn)程狀態(tài),從而完成進(jìn)程恢復(fù)。所保存的文件格式見圖 2。

      圖2 進(jìn)程文件格式

      2.1 內(nèi)核讀寫文件方法

      由于在內(nèi)核操作文件沒有標(biāo)準(zhǔn)庫,因此要利用內(nèi)核的一些函數(shù),在本系統(tǒng)中主要使用兩個函數(shù)vfs_write( )和vfs_read( )構(gòu)成的文件操作函數(shù)k_write( )和k_read( )。函數(shù)原型如下:ssize_t k_write(struct file *file, const void *buf, size_t count);

      參數(shù)file代表要保存進(jìn)程信息的文件,參數(shù)buf代表指向要保存的緩沖區(qū)指針,參數(shù)count代表要保存的緩沖區(qū)大小。

      ssize_t k_read(struct file *file, const void *buf, size_t count);

      參數(shù)file代表要讀取進(jìn)程信息的文件,參數(shù)buf代表指向要寫入的緩沖區(qū)指針,參數(shù)count代表要寫入的緩沖區(qū)大小。

      2.2 進(jìn)程的狀態(tài)保存

      內(nèi)核通過定義的全局項current引用當(dāng)前進(jìn)程。它產(chǎn)生一個指針指向結(jié)構(gòu)tsk_struct,current指針指向在運行的進(jìn)程。內(nèi)核可以通過current宏來獲取特定的進(jìn)程信息。

      ① 保存進(jìn)程PID,這是進(jìn)程的唯一標(biāo)識符,是進(jìn)程創(chuàng)建的起點,通過current->pid獲取當(dāng)前進(jìn)程的PID,然后保存到進(jìn)程文件中。

      ② 保存進(jìn)程的UID、GID等,采用current_cred( )函數(shù)獲取進(jìn)程用戶名和組名。

      ③ 保存CPU信息,主要是寄存器和線程信息。采用task_pt_regs( )函數(shù)獲得寄存器信息。通過current->thread獲得線程信息。

      ④ 保存signal信息,共需要保存三組信息:信號堆棧信息、掛起信號和信號處理函數(shù)。采用do_sigaltstack( )函數(shù)獲得信號堆棧信息,通過current->blocked獲得進(jìn)程掛起信號,通過current->sighand->action獲得信號處理函數(shù)信息。

      ⑤ 保存進(jìn)程內(nèi)存信息,這部分比較復(fù)雜,主要的過程為采用find_vma( )函數(shù)獲得進(jìn)程的虛擬地址,保存進(jìn)程映像(如數(shù)據(jù)段、代碼段、堆區(qū)、棧區(qū)等),然后遍歷內(nèi)存,保存進(jìn)程的內(nèi)存信息。

      2.3 進(jìn)程的狀態(tài)恢復(fù)

      進(jìn)程恢復(fù)主要用到了k_read( )函數(shù),該函數(shù)在內(nèi)核態(tài)下讀取含有進(jìn)程信息的文件,由于文件是按照特定格式存儲的,因此k_read( )函數(shù)可以分段讀取進(jìn)程文件指定的內(nèi)容。恢復(fù)的主要步驟如下:

      ① 系統(tǒng)調(diào)用fork( )函數(shù)創(chuàng)建一個新的進(jìn)程,并進(jìn)入內(nèi)核態(tài);

      ② 進(jìn)程信息保存與恢復(fù)模塊接收到進(jìn)程恢復(fù)的信號后,通過k_read( )函數(shù)讀取進(jìn)程信息文件,根據(jù)文件中記錄的線程數(shù)目創(chuàng)建線程,將進(jìn)程相關(guān)的寄存器信息、信號信息以及內(nèi)存信息填充到相應(yīng)的PCB中;

      ③ 完成上述工作后,系統(tǒng)從內(nèi)核態(tài)返回用戶態(tài),使進(jìn)程參與任務(wù)調(diào)度,完成進(jìn)程恢復(fù)。

      3 進(jìn)程級容錯系統(tǒng)的實現(xiàn)

      本系統(tǒng)由兩個子系統(tǒng)構(gòu)成:進(jìn)程保存子系統(tǒng)和進(jìn)程恢復(fù)子系統(tǒng)。由于本系統(tǒng)用獨立的文件保存進(jìn)程的各項信息,因此為了更好地測試進(jìn)程文件的遷移性,采用了兩套實現(xiàn)方法,即單機實現(xiàn)和雙機實現(xiàn)。

      3.1 單機實現(xiàn)

      進(jìn)程的保存與恢復(fù)在同一臺機器里實現(xiàn),具體流程如圖3、圖4所示。

      圖3 進(jìn)程狀態(tài)保存

      圖4 進(jìn)程狀態(tài)恢復(fù)

      在進(jìn)程狀態(tài)保存時,首先調(diào)用checkpoint [pid]命令,發(fā)送進(jìn)程保存請求。系統(tǒng)響應(yīng)進(jìn)程保存請求后,會首先暫停進(jìn)程,通過k_write( )函數(shù)將進(jìn)程各項信息保存到指定的進(jìn)程文件中,最后恢復(fù)進(jìn)程運行,完成進(jìn)程狀態(tài)保存。

      在進(jìn)程狀態(tài)恢復(fù)時,首先調(diào)用restore [char* filename]命令,發(fā)送進(jìn)程恢復(fù)請求。系統(tǒng)響應(yīng)進(jìn)程恢復(fù)請求后,會調(diào)用fork( )函數(shù)創(chuàng)建一個新的進(jìn)程,然后通過k_read( )函數(shù)讀取進(jìn)程文件的內(nèi)容到PCB中,最后使新創(chuàng)建的進(jìn)程參與任務(wù)調(diào)度,完成進(jìn)程狀態(tài)恢復(fù)。

      3.2 雙機實現(xiàn)

      雙機實現(xiàn)與單機實現(xiàn)的步驟基本一致,差別在進(jìn)程文件保存上:單機實現(xiàn)時,進(jìn)程文件保存在本地,而雙機實現(xiàn)時,進(jìn)程文件保存在備機中。雙機實現(xiàn)工作原理如圖5所示。一臺機器為主機,另一臺為備機。主機運行程序,并且隔一段時間通過網(wǎng)絡(luò)保存進(jìn)程信息文件到備機中。備機通過串口發(fā)送心跳信號,監(jiān)視主機的狀態(tài),當(dāng)發(fā)現(xiàn)主機異常后,接管主機,在備機上讀取主機保存的進(jìn)程信息文件,恢復(fù)主機的進(jìn)程,從而實現(xiàn)基于檢查點的雙機容錯。

      圖5 雙機進(jìn)程容錯實現(xiàn)方法

      4 系統(tǒng)性能評測

      本系統(tǒng)所采用的平臺為基于Cortex-A8 CPU的BeagleBone Black,CPU型號為TI AM3359 (1 GHz),RAM大小為512 MB,所采用的內(nèi)核版本為linux-3.8.13。使用計算N×N矩陣的N次冪作為測試程序。在程序運行的過程中,先進(jìn)行進(jìn)程保存,然后發(fā)送KILL信號關(guān)閉程序,最后分別在單機環(huán)境和雙機環(huán)境下進(jìn)行進(jìn)程恢復(fù)。測試結(jié)果如表1、表2所列。

      表1 單機進(jìn)程容錯測試結(jié)果

      表2 雙機進(jìn)程容錯測試結(jié)果

      由表1、表2可知,隨著數(shù)據(jù)量和運算量的增加,進(jìn)程保存與恢復(fù)的耗時以及進(jìn)程文件大小相應(yīng)地增加,但是進(jìn)程保存與恢復(fù)耗時與程序運行時間的百分比卻明顯下降,這充分地說明運算量大且實時性較高的程序上運用該進(jìn)程級容錯系統(tǒng)的優(yōu)勢更為明顯。從雙機測試的結(jié)果看,該進(jìn)程文件具有較好的遷移性,因此,該進(jìn)程級容錯系統(tǒng)可以運用到基于嵌入式平臺的分布式計算系統(tǒng)中。

      結(jié) 語

      [1] Hargrove P H, Duell J C. Berkeley lab checkpoint/restart (blcr) for linux clusters[J]. Journal of Physics: Conference Series. IOP Publishing, 2006, 46(1): 494.

      [2] Lawrence Berkeley National Laboratory. The design and implementation of berkeley lab's linux checkpoint/restart,2005.

      [3] Mishra S. Design and Implementation of Process Migration and Cloning in BLCR[D]. Raleigh: North Carolina State University,2011.

      [4] Hariyale H, Vardhan M, Pandey A. Load Balancing in Cluster Using BLCR Checkpoint/Restart[M].Berlin:Springer Berlin Heidelberg, 2012: 729-737.

      [5] 管文,裴爾明,石京燕,等.基于 Linux的會話斷點保存與恢復(fù)軟件[J]. Computer Engineering, 2010, 36(8).

      [6] 楊暉,陳閎中.支持文件遷移的 Linux檢查點機制的實現(xiàn)[J].計算機工程, 2010, 36(3): 266-268.

      [7] 門朝光,焦亮,李香,等.基于 Linux內(nèi)核的進(jìn)程檢查點系統(tǒng)設(shè)計與實現(xiàn)[J].計算機科學(xué), 2009, 36(4): 192-194.

      Design of Embedded Fault Tolerant System Based on Process Checkpoint Settings

      Wang Fuyou,Yang Bin

      (School of Information Science & Technology,Southwest Jiaotong University,Chengdu 610031,China)

      According to the characteristics of embedded Linux system, the process-lever fault tolerant of ARM platform is realized through setting checkpoint. During the working,the checkpoint realizes the interactions with the kernel through the proc file system.At the same time, the checkpoint gets the PID,CPU status and memory information about the process, and stores the information in the storage medium. When the process is failed, the system resumes the above information. The experiments indicate this process-level fault tolerant system achieves fault tolerance and reduces the time of resuming process.

      ARM; embedded Linux;checkpoint;fault tolerant

      TP316

      A

      2014-02-20)

      猜你喜歡
      雙機檢查點內(nèi)核
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      Spark效用感知的檢查點緩存并行清理策略①
      免疫檢查點抑制劑相關(guān)內(nèi)分泌代謝疾病
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      雙機、雙槳軸系下水前的安裝工藝
      免疫檢查點抑制劑在腫瘤治療中的不良反應(yīng)及毒性管理
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護機制研究
      雙機牽引ZDJ9道岔不同步問題的處理
      Loader軸在雙機桁架機械手上的應(yīng)用
      周至县| 永吉县| 吴旗县| 玛纳斯县| 类乌齐县| 荥经县| 磐石市| 革吉县| 青海省| 丰镇市| 绥棱县| 土默特右旗| 卢氏县| 永济市| 九江市| 汉川市| 广安市| 昌江| 大姚县| 永登县| 漾濞| 汉源县| 辽宁省| 广德县| 寻乌县| 江津市| 思南县| 拉孜县| 泰兴市| 沁源县| 扎鲁特旗| 方山县| 江城| 龙江县| 棋牌| 元朗区| 高安市| 甘南县| 寻甸| 同德县| 亳州市|