摘 要:CPU內(nèi)核運行很快,存儲器則相對較慢,二者在速度上存在明顯差距,導(dǎo)致系統(tǒng)性能受限。在內(nèi)存背景下,對臨時文件中轉(zhuǎn)系統(tǒng)進行了設(shè)計和優(yōu)化,經(jīng)測試效果良好。本文簡要論述了相關(guān)技術(shù),并深入探討了內(nèi)存背景下臨時文件中轉(zhuǎn)系統(tǒng)設(shè)計,為后續(xù)各項工作的開展奠定良好的基礎(chǔ)。
關(guān)鍵詞:內(nèi)存;臨時文件;中轉(zhuǎn)系統(tǒng);CPU內(nèi)核
中圖分類號:TP333;TP338 文獻標識碼:A 文章編號:2096-4706(2019)04-0079-03
Construction of Temporary File Transfer System Based on Memory
YANG Yonghua
(Heyuan Technology School,Heyuan 517002,China)
Absrtact:The CPU kernel runs very fast,while the memory is relatively slow. There is a significant difference in speed between the two,which results in system performance constraints. Under the background of memory,the interim file transfer system is designed and optimized,and the result is very good after testing. This paper briefly discusses the related technology,and deeply discusses the design of temporary file transfer system under the background of memory,which lays a good foundation for the follow-up work.
Keywords:memory;temporary file;transit system;CPU kernel
0 引 言
現(xiàn)階段,超級計算機已經(jīng)被廣泛應(yīng)用到科技、金融、工業(yè)、軍事等各個領(lǐng)域,但其運行效率較低,通常在10%以下,加上處理器和存儲器存在性能差距,使得I/O遭遇科研瓶頸。針對這種情況,可把內(nèi)存文件系統(tǒng)直接建立在內(nèi)存上,使大規(guī)模并行漏洞挖掘系統(tǒng)性能得到明顯改善。Ramdisk能夠加速文件讀取,操作過程簡單,把內(nèi)存格式轉(zhuǎn)變成虛擬磁盤即可,但空間更改難度大,不僅要對內(nèi)核配置參數(shù)進行修改,還要對內(nèi)核進行重新編譯,且無法借助內(nèi)存進行快速訪問。Ramfs把Linux磁盤緩沖機制作成以RAM為基礎(chǔ)的動態(tài)可擴展虛擬文件系統(tǒng),在頁緩存中直接存儲數(shù)據(jù),性能強,可自動擴展空間,但“臟頁”無法回收,若不斷寫入數(shù)據(jù),很容易因內(nèi)存不足導(dǎo)致系統(tǒng)崩潰。ramfs經(jīng)優(yōu)化發(fā)展成tmps,其構(gòu)建基礎(chǔ)是虛擬內(nèi)存子系統(tǒng),優(yōu)化亮點為增大監(jiān)控空間和交換分區(qū)使用。因外存為交換分區(qū)數(shù)據(jù)存儲位置,很容易對訪問速度造成干擾,使其遲滯。本研究中,存儲方法為集中式,以全局的Lustre并行文件系統(tǒng)為基礎(chǔ),適用于大尺寸、連續(xù)讀寫類文件,然而其讀取性能又會受小文件影響,用戶很難獲取管理員權(quán)限,導(dǎo)致ramfs等內(nèi)存系統(tǒng)文件不成立。本文優(yōu)選用戶級內(nèi)存文件訪問方法,對以內(nèi)存為基礎(chǔ)的臨時文件中轉(zhuǎn)系統(tǒng)化進行設(shè)計,使系統(tǒng)性能得到了全面優(yōu)化和改進。
1 關(guān)鍵技術(shù)
DCR是編程模型,又是分布式并行計算運行框架。D、C、R分別指代分解、計算和規(guī)約。在該框架下,通過分解使單個大問題以若干子問題形式存在,經(jīng)過計算得出子問題結(jié)果,再通過規(guī)約得到總問題結(jié)果。用戶可依托該框架提高應(yīng)用程序編寫質(zhì)量,使之與DCR編程模型相契合。這一框架摒棄細節(jié)性內(nèi)容,為用戶提供與之相對應(yīng)的接口。
一些問題無論分解還是并行,都非常容易操作,可依托DCR編程模型實現(xiàn)。在該模型中,把原始問題假定為:R=C(S)。其中,R、C、S分別表示結(jié)果、問題計算過程、問題輸入。這個編程模型對最初問題提出明確要求,使之具備如下特性:輸入原始問題時,可把S分解為若干子集,各子集間無關(guān)聯(lián);同時計算分解出來的子集,各子集的計算沒有聯(lián)系;在S的子集計算結(jié)果已知的前提下,依托簡單的規(guī)約,得出最終結(jié)果[1]。輸入S的子集計算過程非常嚴謹,僅考慮該子集數(shù)據(jù)即可,無需與其他子集進行信息交互。DCR框架由調(diào)度、計算和管理三個節(jié)點程序構(gòu)成。
現(xiàn)階段,DCR應(yīng)用場景可細分為普通和迭代式兩類。DCR計算流程受應(yīng)用場景影響,不同的應(yīng)用場景下,DCR計算過程存在些微差別。DCR普通場景計算流程圖如圖1所示。
2 系統(tǒng)設(shè)計
以內(nèi)存為基礎(chǔ)的臨時文件中轉(zhuǎn)系統(tǒng),又稱為臨時文件內(nèi)存交換,主要構(gòu)成元素包括生產(chǎn)者進程、消費者進程、中轉(zhuǎn)進程、注冊管理進程,分別以P、C、E、R指代。在生產(chǎn)者進程中,把文件F打開、寫入、關(guān)閉,而在消費者進程中,正確的實施方法是打開、讀出、關(guān)閉文件。在該過程中,明確系統(tǒng)運行流程,對內(nèi)存文件中轉(zhuǎn)流程具備清晰的認識,完成管理進程注冊工作之后,創(chuàng)建臨時文件對象模型,并通過中轉(zhuǎn)進程,在內(nèi)存背景下,達到良好的臨時文件中轉(zhuǎn)系統(tǒng)設(shè)計效果。
2.1 注冊管理進程
算法:以ftok為基礎(chǔ),生成key值,其具有唯一性;發(fā)揮key值和msgget函數(shù)優(yōu)勢,創(chuàng)建消息隊列;依托msgrcv對P/C的注冊/注銷請求結(jié)構(gòu)體data進行接收。把data.action==0作為假設(shè)條件,使用msgsend把中轉(zhuǎn)進程E的IP和port等信息發(fā)送出去。else(data.action==1)//TODO執(zhí)行注銷操作。
如果消息經(jīng)由消息隊列發(fā)送或者接收,需要依據(jù)實際情況對消息類型進行設(shè)置。此處的P和C消息類型均為1。分別把注冊進程的消息類型和msgrcv函數(shù)需要接收的消息類型設(shè)置為注冊進程號和1,確保注冊進程僅對P/C消息進行接收,而非因接收自身消息出現(xiàn)錯誤,使程序崩潰[2]。
2.2 臨時文件對象模型
臨時文件對象狀態(tài)轉(zhuǎn)移。在中轉(zhuǎn)系統(tǒng)中,中轉(zhuǎn)進程E操作臨時文件對象之前,預(yù)先判斷其狀態(tài),繼而給出最終處理結(jié)果。該模型中,把臨時文件對象狀態(tài)變化作為重點關(guān)注內(nèi)容進行設(shè)計。
臨時文件對象實現(xiàn)。文件對象創(chuàng)建完成,進入初始化和關(guān)閉狀態(tài),借助init函數(shù)對其進行清理。發(fā)揮上層文件操作接口優(yōu)勢,調(diào)用該函數(shù),打開或關(guān)閉系統(tǒng)。在文件中寫入數(shù)據(jù),假使文件尺寸比文件對象默認緩沖buf_size大,要對創(chuàng)建外部文件,在long_temp_file_handle變量中記錄句柄,在外部文件寫入超出部分。依托該函數(shù)調(diào)用,實現(xiàn)相關(guān)功能。把文件位置指針作為參考指標,讀取文件對象中的各類數(shù)據(jù)。若數(shù)據(jù)長度比文件緩沖大,要借助文件描述符把存儲在磁盤臨時文件中的數(shù)據(jù)讀出來。通過函數(shù)調(diào)用,使之與系統(tǒng)調(diào)用read功能類似。tfem_lseek函數(shù)要比tfem_read函數(shù)提前使用,在文件頭定位指針,使該函數(shù)從文件頭開始便可進行數(shù)據(jù)讀取。消費者調(diào)用該函數(shù),發(fā)揮與lseek類似的作用[3]。在tfem_lseek函數(shù)調(diào)用之前,使用tfem_stat函數(shù)得出文件大小。該函數(shù)的作用與系統(tǒng)函數(shù)stat獲取文件信息的作用相同。
2.3 中轉(zhuǎn)進程
以內(nèi)存為基礎(chǔ)的臨時文件中轉(zhuǎn)系統(tǒng)中,以文件對象形式在文件對象數(shù)組中對相關(guān)文件進行存儲。系統(tǒng)通過對常量temp_file_mum進行預(yù)設(shè),繼而對進程E中支持的最大臨時文件數(shù)進行定義。在這一系統(tǒng)中,下標文件對象數(shù)組,尋找臨時文件。把兩個映射設(shè)置在中轉(zhuǎn)進程E中,用于注冊或者注銷文件名。
首個映射指的是臨時文件名稱至臨時文件對象數(shù)組下標的映射,用open()函數(shù)把單個文件打開,用于對臨時文件系統(tǒng)中是否已存在同名文件做出準確判斷。若把已存在文件打開,無法成功調(diào)用open()函數(shù)。第二個映射即臨時文件對象數(shù)組下標至臨時文件名稱的映射,使用close()函數(shù)關(guān)閉單個文件時,通過在臨時文件對象數(shù)組下標臨時文件,得出文件名。把這一文件從首個映射中刪除,繼而對init()函數(shù)進行調(diào)用,從中轉(zhuǎn)系統(tǒng)中把這一文件清除。
文件由中轉(zhuǎn)進程E接收,并把請求open()打開,處理算法為:經(jīng)由文件名filename對map1進行查找,準確判斷文件狀態(tài),若存在,那么使用get_state()把該文件狀態(tài)s求出來,把s==WAIT作為假定條件,依托set_state()對文件狀態(tài)進行設(shè)置,使之以read形式存在,最后返回文件描述符temp_file_index。反之,如果不存在,除了重新分配表項之外,還借助init()實現(xiàn)初始化。借助set_state()更該新文件狀態(tài),使之以write存在,并在map1和map2中投入新元素,返回該文件描述符temp_file_index,更新文件對象數(shù)組當前位置下標[4]。
文件關(guān)閉請求close()被中轉(zhuǎn)進程E接收后的處理算法描述:文件狀態(tài)s由fd和get_state得出,把文件狀態(tài)設(shè)置為WAIT,給出正確處理結(jié)果后,返回,break。以INVALID對文件狀態(tài)進行設(shè)置,把這一元素從文件對象數(shù)組中釋放出來,分別在map1和map2中刪除對應(yīng)映射,并得出文件名,還要在map2中把fd映射刪除,報錯。
3 結(jié) 論
綜上,基于內(nèi)存的臨時文件中轉(zhuǎn)系統(tǒng)研究和設(shè)計是一項長期工作,實施難度大,需要考慮諸多專業(yè)性內(nèi)容。實際操作中,要對各類關(guān)鍵技術(shù)進行考量,在系統(tǒng)設(shè)計過程中,注冊管理進程,創(chuàng)建臨時文件對象模型,優(yōu)選用戶級內(nèi)存數(shù)據(jù)交換方法,生成以內(nèi)存為基礎(chǔ)的臨時文件中轉(zhuǎn)系統(tǒng),以此對原有進程之間的文件數(shù)據(jù)傳遞進行替代,實現(xiàn)性能改進。
參考文獻:
[1] 馮靜,夏林峰,劉峰.基于內(nèi)存的臨時文件中轉(zhuǎn)系統(tǒng)研究與設(shè)計 [J].計算機應(yīng)用與軟件,2018,35(4):75-79+121.
[2] 趙偉舟.計算機文件安全管理系統(tǒng)研究與設(shè)計 [J].電腦知識與技術(shù),2017,13(4):34-36.
[3] 一笑.去蕪存菁,管好Win8臨時文件有講究 [J].電腦知識與技術(shù)(經(jīng)驗技巧),2014(12):30-32.
[4] 劉景云.開發(fā)閑置內(nèi)存,為本本輕松提速 [J].電腦知識與技術(shù)(經(jīng)驗技巧),2017(1):94-97.
作者簡介:楊勇華(1984.02-),男,漢族,廣東河源人,計算機講師,畢業(yè)于廣東藥學院,本科,研究方向:計算機科學與技術(shù)。