(1. 襄樊職業技術學院信息技術系,湖北 襄樊 441050; 2.武漢大學a.軟件工程國家重點實驗室; b.計算機學院, 武漢 430072)
摘 要:
對移動agent在廣域網中的運行情況進行仿真從而評價其算法的性能是優化移動agent應用設計的關鍵問題之一。在前期工作基礎上,采用直接執行仿真方法,設計并實現的通用移動agent仿真平臺SimulAglets。實驗結果表明,該平臺可對復雜的移動agent算法進行有效的模擬,仿真結果與理論建模和專用仿真程序得到的結果完全相符。
關鍵詞:移動代理; 仿真平臺; 直接執行仿真
中圖分類號:TP316 文獻標志碼:A
文章編號:10013695(2008)12383504
Design and implementation of generic mobile agent simulation platform
ZENG Hong1, LI Xuhui2a, HE Yanxiang2b
(1.Dept. of Information Technology, Xiangfan Vocational Technical College, Xiangfan Hubei 441050, China; 2.a. State Key Laboratory of Software Engineering, b. School of Computer, Wuhan University, Wuhan 430072, China)
Abstract:Simulating the execution of MA program in WAN and thus evaluating its performance is a key problem in optimizing the MAapplication. This paper introduced the work on designing and implementing a generic mobile agent simulation platform using a direct execution simulation approach, based on the previous research. The test results show that the platform can simulate the execution of complicated MA algorithms efficiently, and the results of simulation platform accord with the results from theoretical modeling and specific simulation program.
Key words:mobile agent; simulation platform; direct execution simulation
移動agent是一種在網絡中主動遷移并根據環境確定反應行為的軟件實體,近年來被廣泛運用于并行處理、信息檢索、網絡信息監控以及分布協作等分布式計算領域的各個方面,提供了解決分布式計算問題的新思路。研究人員利用agent的遷移特性將傳統的基于消息傳遞的分布式算法轉換為利用agent遷移完成信息交換和任務計算的移動agent算法,或者使用移動agent解決移動計算中出現的各種新問題。相應地,對于這些基于移動agent的分布式算法進行性能評價成為發現和改變算法的性能瓶頸、優化移動agent應用設計的關鍵問題之一。由于移動agent所具有的遷移性、反應性以及自主性等特性,其性能評價比傳統的分布式算法更加復雜。已有的分布式算法性能評價方法包括運用數學工具分析建模、實際執行算法獲取性能數據和對算法作仿真測試獲取性能數據三種。前兩種方法并不適合對移動agent的移動性和反應性建模。傳統的仿真方法僅能部分解決此問題,已有相關研究通常是針對具體的移動agent算法或環境設計仿真程序得到性能參數,每個算法均需要設計新的仿真程序。其中存在大量重復性勞動[1,2]。
為有效解決該問題,筆者在前期研究中提出了一種基于直接執行仿真方法設計移動agent仿真系統的思路[3],并對移動agent的描述模型和仿真環境的架構[4,5]進行深入探討。本文設計SimulAglets平臺以當前最流行的移動agent系統IBM Aglets為基本環境,應用直接執行仿真技術對Aglets平臺進行了修改,實現了在單機或局域網內的少數機器中模擬廣域網計算環境的功能,可以對按照規范編寫的任何移動agent算法程序進行廣域網內的運行情況模擬和控制。
1 相關工作
如前所述,仿真方法已經成為當前對于移動agent進行性能評價的主要方法,移動agent的仿真多是對算法和運行環境分別設計仿真程序[1,2],盡管這些仿真程序中通常雷同。為此筆者在前期研究中針對移動agent的通用仿真方法進行了較深入的探討,并發現直接執行仿真是解決該問題的有效方法。直接執行仿真是一種進程仿真,其基本思路是將應用程序的代碼放在一個虛擬的計算機環境中直接執行,并從中獲取程序的各項性能指標的數據。其主要優點在于:a)無須實際的系統環境就能獲得程序在相應的系統中的性能數據,對于那些運行難以監控的系統(如廣域網)中的程序而言,這是最佳的仿真方法;b)由于程序的代碼是直接執行的,使仿真工作得以簡化,仿真過程方便快捷。
在最初的研究中[3],筆者基于直接執行仿真方法設計了移動agent仿真模型MADES,并實現了一個簡單的移動agent仿真系統原型Simulagent,通過對移動agent各種基本動作進行控制,以達到模擬移動agent在廣域網內行為的效果。該模型和原型系統對于簡單環境中的簡單算法能夠很好地模擬其運行,但當算法復雜程度和agent個數增加時,模擬情況與實際情況出現了較大差別。本文對原型系統和算法進行了深入剖析,發現這種差別源于對移動agent本身內部執行機制不透明,因而使算法設計者對移動agent的執行過程與其實際執行過程并不相符。例如,一些移動agent系統如IBM Aglets利用多線程處理消息實現反應性,而另外一些則采用單線程方式。
移動agent執行機制不透明會直接導致其性能評價工作無法進行,甚至會使移動agent算法難以正確實現。為此筆者參考常見的移動agent系統,提出了一個移動agent的執行規范模型SMA[4]。基于SMA模型,筆者利用離散事件系統對移動agent的行為進行了詳細的刻畫[6],以此作為對符合SMA模型的移動agent進行仿真和性能評價的理論依據。在此基礎上,筆者重新設計了移動agent的通用仿真環境MADESE[5]。本文所介紹的SimulAglets平臺就是在新的模型與方法基礎上,通過對IBM Aglets進行深入剖析和相應修改后形成的通用移動agent仿真平臺。
2 SimulAglets的設計
2. 1 SimulAglets的邏輯結構
SimulAglets平臺采用了主/從式結構,整個平臺由主仿真控制環境和各仿真節點環境兩部分組成。其基本組成結構如圖1所示。
在主控制環境中完成仿真任務的設置、仿真結果的獲取、分析,以及各仿真節點的管理工作。仿真任務的設置由用戶接口和配置管理兩個組件完成。其中,配置管理包括網絡拓撲環境的配置、網絡仿真器和宿主仿真器的指定以及仿真任務的設置。仿真任務的配置內容包括網絡拓撲環境、各移動agent宿主平臺的拓撲分布、仿真中使用的網絡仿真器和宿主仿真器的具體實現程序以及仿真中的實時事件接收器程序與仿真結果的分析器程序等。
仿真結果的來源是仿真過程中產生的外部事件,本文定義了一套完整的外部事件機制。在仿真器執行過程中,各種內部事件被各級控制器和協調器進行同步處理后,會產生相應的外部事件,并直接發送到主控制部分的外部事件管理器中。管理器負責接收事件并管理仿真工作指定的事件接收器,接收到的事件被分類轉發給各實時的事件接收器,以滿足用戶了解仿真情況的實時信息的要求。在仿真結束后,整個過程中的外部事件被收集起來并由用戶指定的仿真結果分析器加以分析,進行移動agent的性能評價。
主控制環境對于各仿真節點環境的管理工作比較簡單,主要是根據仿真任務的配置向當前參與仿真的各節點發送仿真控制命令,仿真命令包括要求仿真節點設置移動agent宿主平臺、要求仿真節點設置某agent平臺的初始agent、要求仿真節點設置相應的仿真平臺中的宿主仿真器、要求啟動/停止仿真任務等。
各仿真節點執行具體的仿真工作,每一個仿真節點對應于一組移動agent平臺,這樣就可以在一個局域網中的幾臺主機上甚至一臺主機上模擬出多個移動agent平臺在Internet中的運行情況。仿真節點維護其內運行的一組平臺對象,每一個平臺對象包括一個實際的移動agent執行平臺、一個用來確定代碼段的邏輯執行時間的宿主仿真器、一個控制器和一個宿主級的同步協調器,宿主節點并提供一個網絡仿真器對象用于模擬網絡的延遲。在進行仿真時,仿真節點根據主控制器傳來的命令進行仿真任務的初始設置,然后在接收到啟動命令后啟動各agent宿主平臺中的初始agent和宿主仿真器,此后控制權轉交給各移動agent的工作線程,僅當接收到停止仿真的命令時關閉各agent平臺和其中運行的agent。
2. 2 SimulAglets的程序結構
SimulAglets是以Java語言編寫的,運行在Java 2平臺上的軟件包。SimulAglets主要由四個部分組成:a)仿真配置與管理部分,包括用戶界面子包(ui)和配置管理子包(config);b)仿真控制協調部分,包括控制子包(control);c)仿真器部分,包括agent執行平臺子包(aglets)、宿主平臺仿真子包(server)和網絡仿真子包(network);d)仿真事件處理與性能評價部分,包括事件子包(event)、監聽器子包(listener)和分析器子包(analyzer)。各個子包之間的關系如圖2所示。
Ui子包和config子包為用戶提供了操作仿真環境、配置仿真任務的界面。SimulAglets的配置功能比較簡單,主要是為仿真任務的外部環境作配置。其具體內容如前所述。
仿真控制部分由一組并行離散事件仿真控制器構成。Control子包定義了仿真協調控制器接口,由加載的實現程序處理從各仿真節點傳來的內部事件,控制整個仿真任務的進程。子包中還定義了缺省的仿真協調器實現程序,采用保守同步協議算法控制各agent的事件。
仿真器部分是整個仿真工作的基礎。其中,aglets子包負責執行agent程序并產生原始事件數據; server子包負責形成宿主平臺的各種事件,并模擬各宿主服務器的運行負荷情況以計算各事件的時間戳; network子包負責模擬網絡負載情況,并計算數據傳輸相關事件的傳輸延遲。Aglets是整個直接執行仿真環境的基礎,它取代com.ibm.aglets包成為Aglet運行的底層支持平臺。其他兩個子包則定義了基本的宿主仿真器和網絡仿真器接口,并提供了缺省的仿真器實現。
仿真事件和性能評價部分建立在外部事件的基礎上。SimulAglets中的外部事件是由仿真協調器產生。仿真協調器在接收到各宿主平臺發送的內部事件后,在進行同步控制的同時將事件過濾重組為外部事件,然后發送給SimulAglets的事件管理器。Event子包定義了各種內部事件與外部事件,listener定義了各種事件的監聽器接口和一組基本的監聽器程序,如事件管理器(event manager)和監聽器管理器(listener manager)接口。當仿真任務運行結束后,在整個仿真過程中產生的事件被收集起來,供性能評價程序分析其性能指標數據。Analyzer子包僅定義了基本的分析器(analyzer)接口,并在用戶界面部分提供了動態裝載用戶指定的性能分析器的功能。
SimulAglets在實現中充分利用了面向對象系統的特點。系統的各主要部分盡量以接口或抽象類定義,并在系統啟動時通過屬性設置動態加載各部分的實現類。因此,系統具有良好的可復用性和可擴展性。
3 SimulAglets的實現
3. 1 SimulAglets的agent平臺
SimulAglets平臺中,aglets子包和server子包組成了仿真環境中的移動agent運行平臺。作為仿真模型的事件源,aglets子包在IBM Aglets系統的com.ibm.aglets包的基礎上作了擴展和修改,加入了產生原始事件數據的代碼。運行平臺部分的仿真處理流程如圖3所示。
SimulAglets規定了可由平臺進行仿真控制的Aglet程序規范。采用該規范編寫的移動agent程序在執行時,可由底層運行平臺控制其各代碼段的執行。SimulAglets在遇到Aglet內部線程同步調用、環境信息調用、通信調用和行為調用時,將首先執行由一個serverController接口對象提供的陷阱方法trap(),該方法能捕獲aglets提供的事件類型、當前的實際時間和一個包含與事件類型相關的當前狀態信息參數傳入trap()。Trap()方法被調用后,首先會獲取當前線程所對應的工作及其邏輯時間(存在少數由其他工作指定事件發生時間的情況),邏輯時間的計算由宿主平臺仿真器對象serverSimulator完成。
確定邏輯時間后,serverController開始根據事件的類型決定其處理方法。一般來說,大部分事件均涉及到agent間或agent內部的工作線程間的同步。對此類事件trap()方法會將控制權轉移到仿真控制部分的相關對象由其來控制后面的處理過程。有一些外部事件如獲取環境信息或創建結束等事件不涉及到與其他線程的同步,僅由平臺仿真器和網絡仿真器給出在邏輯時刻的相應數據即可。
對于與通信有關的事件,如消息發送和agent開始遷移等事件,其后續事件的發生時刻取決于前因事件的邏輯時刻和數據傳輸的延遲。在處理此類事件時,需要將事件的相關信息和預期后續事件的發生時刻發送到目的方平臺所對應的serverController對象。當控制器允許事件對應的工作繼續進行時,數據傳輸到目的方,由目的方Aglet產生的接收事件將檢查此前接收到的相關信息并設置當前工作的邏輯時間。
此外,aglets子包還修改了com.ibm.aglets. MessageManagerImpl類中對于非隊列消息的處理方法,使此類消息能真正地得到實時響應。
3. 2 SimulAglets的仿真控制
SimulAglets的控制部分處理仿真事件的同步問題。Simul Aglets的事件同步處理采用了請求驅動的方式,各服務器協調器對象serverCoordinator的運行是被動的,由serverController和主協調器mainCoordinator來調用其功能完成協調控制。MainCoordinator類實現全局協調器的功能,它運行在主控制部分,其具體功能是維護全局各宿主具有最小邏輯時間的工作信息表,并向各仿真節點發送包含全局最小邏輯時間的消息。仿真節點接收到此消息后,對各宿主平臺計算預測值并激活當前在本宿主中處于等待狀態的安全的工作線程。
3. 3 SimulAglets的API
SimulAglets以SMA模型[4]為其默認的agent執行模式。在Aglets平臺中,移動agent程序的基類是Aglet類,IBM Aglets中Aglet的執行模式與筆者在SMA模型中對移動agent所定義的模式有很大程度上的相似,因此可以相對容易地將Aglet改造成符合SMA模型的移動agent。這種改造在三個方面進行:在系統底層筆者改寫了一些相關的類如MessageManagerImpl等,使SimulAglets中的Aglet能以SMA模型所規定的方式管理消息;在用戶Aglet中,本文規定用戶一般需要聲明對各類型的消息均以實時方式處理(雖然可以強制按此方式處理,但是在SimulAglets中也同時提供了按普通的消息隊列方式來處理消息的功能,因此這里可以給用戶提供多種選擇);還有一些功能則是由SimulAglets的API:aglet子包來提供。
SimulAglets定義了aglet子包的SAglet類作為所有運行在SimulAglets上的Aglet的超類,使用戶能建立適合運行于SimulAglets中的Aglet。用戶的agent程序可通過SAglet類中的Environment對象獲取當前運行環境信息(如網絡拓撲、邏輯時間),通過util對象進行并發控制(如鎖、同步原語等)。通過SimulAglets.aglet包提供的API,用戶可以編寫與普通Aglet的功能等價的適合在SimulAglets環境中運行的移動agent應用程序。
4SimulAglets的應用實例
為了驗證SimulAglets仿真平臺的正確性,本文將一些基于移動agent的算法用SAglet實現,然后在SimulAglets中運行以測試算法的性能。一個典型的運行實例是基于移動agent的分布互斥算法[7]在SimulAglets中的實現與仿真情況。在此算法中,系統中存在若干個有可能在未來某一時刻進入臨界區的節點,各節點在準備進入臨界區時,會創建一個移動agent,由該agent來訪問其他各節點,以確定是否能允許本節點進入臨界區。
本文用SimulAglets的Aglet API實現了該算法,并在SimulAglets中對其進行了仿真。仿真環境由兩臺連接在快速以太網中的普通PC機構成,機器配置為P3 900 MHz/256 MB/20 GB,運行操作系統為Windows 2000,Java虛擬機版本為1.4。筆者模擬了系統節點數目為4~40個時算法的運行情況,并根據算法的性能評價程序分析了仿真結果,得出了該算法的具體性能指標。SimulAglets的運行界面和該算法的性能分析結果如圖4所示。在圖4中,列出了該算法的各項性能指標在滿負荷、中等負荷和輕負荷下的狀態。結果表明,SimulAglets獲得的算法性能指標與針對該算法建立的數學模型進行分析所得的結果一致。
此外,為進一步說明SimulAglets的仿真效果,筆者針對算法在全負荷情況下的運行情況編寫了仿真程序。為使其與SimulAglets平臺具有可比性,該仿真程序也采用了SMA模型,并且具體代碼執行的時間也采用了與SimulAglets相同的計算方法。兩者結果比較如表1所示。結果表明,通用仿真平臺Simul Aglets的仿真效果與專用仿真程序一致,充分說明了本平臺的可用性。其中:M代表SimulAglets結果;S代表仿真程序結果。
表1 兩種仿真方法結果比較
Nodes4681015
AvTime/msAvNodesAvTraffic/Byte
M3 3557 2188 95812 86614 777
S3 3206 9888 57712 74014 322
M35.96.29.312.5
S35.86.29.612.6
M3 6333 8944 1744 3985 372
S3 6423 8864 1704 4145 390
Nodes2025303540
AvTime/msAvNodesAvTraffic/Byte
M20 20642 84762 48389 888129 123
S19 69541 91961 59389 087127 694
M1314.616.818.218.6
S13.114.416.618.518.8
M6 0626 9187 87587879 576
S6 0776 8777 75088539 662
5 結束語
當前筆者正在此原型系統所確定的框架基礎上對系統的性能作進一步的改進。主要改進方面有:設計更加高效的適合此平臺的并行仿真算法,并試圖從程序分析的角度來獲取有關信息提高預測值;設計更好的宿主仿真器和網絡仿真器,使系統能夠比較真實地反映實際機器的負荷情況和網絡的帶寬使用情況,從而模擬不同外界環境條件下agent的執行;對SimulAglets的軟件結構進行調整,進一步加強其可擴展性,使其能動態設置不同的仿真同步算法來進行仿真,從而比較各種仿真方法的優劣。
參考文獻:
[1]ISMAIL L, HAGIMONT D. A performance evaluation of the mobile agent paradigm[J]. ACM SIGPLAN Notice,1999,34(10):306313.
[2]UHRMACHER A M, TYSCHLER P, TYSCHLER D. Modeling and simulation of mobile agents[J]. Future Generation Computer Systems ,2000,17(2):107118.
[3]LI Xuhui, CAO Jiannong, HE Yanxiang. A direct execution approach to simulating mobile agent algorithms[J]. The Journal of Supercomputing,2004,29(2):171184.
[4]LI Xuhui, PENG Zhiyong, CAO Jiannong. A practical approach to specifying and verifying mobile agent algorithms[J]. Journal of Pervasive Computing and Communications, 2005,1(2):113121.
[5]LI Xuhui, CAO Jiannong, HE Yanxiang, et al. MADESE: a simulation environment for mobile agent[C]//Proc of the 6th CIT’06. 2006:8691.
[6]LI Xuhui, CAO Jiannong, HE Yanxiang, et al. A discrete event system model for simulating mobile agent[C]//Proc of ISPA. 2005:701712.
[7]CAO Jiannong, WANG Xianbing, WU Jie. A mobile agent enabled fully distributed mutual exclusion algorithm[C]//Proc of MA’02. 2002:138153.