国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

協(xié)同仿真中的精確異常保證技術(shù)

2015-12-23 01:11蔣烈輝李軼民王飛龍
計算機工程與設(shè)計 2015年11期
關(guān)鍵詞:宿主機二進制寄存器

莊 寬,蔣烈輝,李軼民,王飛龍

(1.數(shù)學(xué)工程與先進計算國家重點實驗室,河南 鄭州450001;2.成都軍區(qū)政治部,四川 成都751104)

0 引 言

系統(tǒng)仿真器在支持精確異常機制上一般是通過定位基本塊、發(fā)現(xiàn)異常、回滾、重新翻譯執(zhí)行的方法,給仿真帶來一定的性能開銷[1-6]。支持精確異常一般分為在軟件層實現(xiàn)和硬件層實現(xiàn),QEMU[7]對精確異常的處理在軟件層實現(xiàn),采用定位基本塊塊首EIP,保存塊首處理器狀態(tài),當(dāng)異常在基本塊中發(fā)生時,通過定位的EIP回滾到塊首位置,恢復(fù)塊首位置處理器狀態(tài),然后再進行逐條翻譯執(zhí)行,可以定位到異常發(fā)生的位置,這種支持精確異常的方式由于需要回滾、解釋執(zhí)行,因而降低系統(tǒng)仿真的效率。Code Morphing Software(CMS)[8,9]通過使用影子寄存器 (shadow register)和可撤銷寫緩存硬件支持來實現(xiàn)精確異常,CMS將基本塊作為一個事物 (transaction)來執(zhí)行,用影子寄存器和可撤銷寫緩存來保存執(zhí)行過程中機器狀態(tài)變化以及對內(nèi)存的修改,只有當(dāng)沒有異常發(fā)生時,才將機器狀態(tài)更新并將可撤銷寫緩存寫入內(nèi)存,當(dāng)異常發(fā)生時,恢復(fù)監(jiān)測點機器狀態(tài),并進行逐條的翻譯執(zhí)行以確保精確異常。CMS通過硬件的支持來實現(xiàn)精確異常,節(jié)省了其在精確異常方面的時間,從而提高了性能,由于CMS需要在處理器中使用大量的影子寄存器,因而此方法的多平臺通用性不強。

本文依托全系統(tǒng)仿真軟件AB (architecture bridge),其支持精確異常采用軟件層實現(xiàn),下文將用軟硬件協(xié)同優(yōu)化設(shè)計的方式來實現(xiàn)AB 的精確異常機制,最終使其對異常能快速準確定位。

1 簡介

如圖1 所示,AB 主要對CPU、I/O、內(nèi)存等進行仿真,通過循環(huán)的譯碼、翻譯、執(zhí)行來實現(xiàn)對系統(tǒng)的仿真。

圖1 AB整體結(jié)構(gòu)框架

AB的結(jié)構(gòu)包括由初始化、動態(tài)二進制翻譯器、內(nèi)存虛擬化、I/O 仿真4部分組成,如圖2所示。

初始化階段主要包括:解析用戶提交的虛擬機配置相關(guān)的命令行參數(shù)、為虛擬機建立物理內(nèi)存并建立映射關(guān)系、初始化二進制翻譯器、初始化虛擬CPU、初始化I/O 子系統(tǒng)等。當(dāng)初始化結(jié)束后,啟動動態(tài)二進制翻譯器,后者將根據(jù)當(dāng)前PC值從虛擬機內(nèi)存中取指、譯碼、翻譯并執(zhí)行,開始虛擬機的運行。

動態(tài)二進制翻譯器:動態(tài)二進制翻譯器目前的主要特性是:以基本塊為翻譯單位,支持翻譯緩存,采用C 代碼仿真x86的復(fù)雜操作 (如訪存操作、涉及保護檢查的指令、可能引發(fā)異常的指令等),基于指令操作原語的翻譯。主要循環(huán)的進行以下工作:異常檢測與派發(fā)、外部中斷檢測與派發(fā)、TB-CACHE查找、譯碼、翻譯、I-CACHE 刷新、上下文切換(prologue)、TB執(zhí)行、上下文切換(epilogue)。

內(nèi)存虛擬化:AB內(nèi)存虛擬化包括兩大模塊:一是物理內(nèi)存虛擬化,即使用宿主機的虛擬內(nèi)存來模擬客戶機的物理內(nèi)存,二是MMU 虛擬化,即仿真x86 的MMU。主要完成虛擬TLB 的查找,GVA (guest virtual address)到GPA (guest physical address)的轉(zhuǎn)化,GPA 到 HVA(host virtual address)的轉(zhuǎn)化。

I/O 仿真:虛擬化I/O 設(shè)備的方法一般有3 種:設(shè)備仿真、直接設(shè)備訪問和虛擬設(shè)備模型,AB目前以軟件方式實現(xiàn)了與P6處理器配套的典型I/O 接口和設(shè)備的仿真,包括芯片組 (i440fx/piix3)、PIC (i8259)、PIT (i8254)、鍵盤接口 (i8042)、IDE、標準VGA、UART 等。

圖2 AB的執(zhí)行

2 AB對精確異常的處理

精確異常是指當(dāng)異常發(fā)生之前所有的指令都正確的執(zhí)行完畢[10,11],之后的所有指令都沒有執(zhí)行。滿足精確異常的處理器,在軟件層看來,指令是順序執(zhí)行的。

在翻譯x86指令時,AB僅在確保不會有異常發(fā)生時才會修改虛擬機的狀態(tài),因此當(dāng)異常發(fā)生時,可以確保有正確的機器狀態(tài)。唯一的例外是EIP 的值,出于效率方面的考慮,AB在翻譯每條指令時,并不生成指令來更新EIP的值,因此當(dāng)發(fā)生異常時,應(yīng)該恢復(fù)EIP的值。

有3種情景需要考慮EIP的恢復(fù):

(1)取指 (譯碼)時發(fā)生異常 (#PF 或#GP)。取指時,異常僅會發(fā)生在取基本塊的第一條指令時 (如指令的第一個字節(jié)所在的頁不在內(nèi)存中),或發(fā)生在指令跨頁時(指令的尾部所在的頁不在內(nèi)存中)。對于第一種情況,由于處于塊邊界,因此EIP 的值可滿足精確異常的需要。對于第二種情況,AB在翻譯時會識別指令跨頁的情況 (返回DCDR_RIDE_PG),若該跨頁的指令不是基本塊的第一條指令,則結(jié)束基本塊。下次翻譯時,跨頁指令將是基本塊的第一條指令,若發(fā)生異常,EIP的值可確保精確異常。

(2)TB執(zhí)行過程中發(fā)生異常。若指令非訪存指令 (如LJMP等)且可能引發(fā)異常,AB在翻譯x86指令時會生成OpenRisc指令來保存當(dāng)前EIP的值,以便異常發(fā)生時有正確的EIP值可用。若指令為普通訪存指令(如MOV等),當(dāng)發(fā)生異常時,mmu_rd/wt()會根據(jù)翻譯基本塊時生成的EIP到HOST_PC 的對應(yīng)關(guān)系調(diào)用restore_eip ()來恢復(fù)EIP的值。由于restore_eip()實現(xiàn)上的限制 (利用__builtin_return_address(0)返回的HOST_PC,并判斷HOST_PC是否在TB范圍內(nèi)),要求在TB中直接調(diào)用mmu_rd/wt(),而不能在helper_xxx()中調(diào)用mmu_rd/wt()。

某些特殊的指令使用helper_xxx ()實現(xiàn)且需使用mmu_rd/wt()進行隱含的訪存操作,如MOV DS,AX指令會訪問描述符表,可能發(fā)生#PF 異常,由于是在helper_xxx ()上下文中調(diào)用mmu_rd/wt(),因此restore_eip ()無法恢復(fù)出正確的EIP。對于這種指令,AB也應(yīng)在翻譯指令時將加入OpenRisc指令來保持當(dāng)前EIP的值,此時即使restore_eip ()無法恢復(fù)出正確的EIP,也可確保異常發(fā)生時有正確的EIP可用。

(3)中斷或異常處理過程中的異常。中斷或異常的遞交在cpu_exec()上下文中進行,隱含著訪存操作 (訪問各種描述符表),并且可能引發(fā)各種保護異常 (包括#PF異常)。中斷總是在基本塊的邊界處理,因此可確保EIP的值滿足精確異常的要求。由于 (1)、 (2)的保證,可確保異常處理時EIP的值滿足精確異常的要求。若中斷或異常的遞交過程中再次發(fā)生異常,EIP的值仍是精確的。

AB在對客戶機指令翻譯完執(zhí)行之前,每次都要進行異常檢測,在進行異常檢測前,都不會對機器的狀態(tài)進行任何修改,這樣在一定程度上能支持精確異常,但其由于是嚴格按照程序順序的執(zhí)行,并且在每條指令尾部提交機器的狀態(tài),這種保守的機制對虛擬機的性能有一定的影響,然后對于一些指令重排、死代碼刪除等等的優(yōu)化工作受到了很多的限制。本文采用協(xié)同處理的方式,將軟件層面的精確異常支持由硬件部分維護與完成,降低AB 在精確異常方面的開銷,并且能給后期的軟件優(yōu)化工作帶來方便。

3 實現(xiàn)

3.1 依托平臺

本文所使用處理器平臺為開源組織OpenCore組織維護與發(fā)展的處理器OpenRisc,OpenRisc處理器采用五級流水線和哈佛結(jié)構(gòu) (Harvard architecture),支持內(nèi)存管理單元(MMU),Cache,帶有基本的DSP功能,外部數(shù)據(jù)和地址總線采用Wishbone片上總線標準,實現(xiàn)了基本指令集和向量指令,并支持指令擴展,可以增加8 個自定義指令。具有完整的工具鏈,包括開源的軟件開發(fā)工具、C語言實現(xiàn)的cpu仿真模型、操作系統(tǒng),以及軟件應(yīng)用所需的函數(shù)庫等。其處理器Verilog HDL代碼開源,可供個人與企業(yè)開發(fā)使用。由于其諸多優(yōu)勢,使得OpenRisc得到了廣泛的關(guān)注。

3.2 精確異常

對精確異常的支持,是處理器的基本特性,因此,系統(tǒng)仿真中對異常的仿真不可避免。AB對異常仿真時,每次更改處理器狀態(tài)都需要對異常進行檢測,只有在沒有任何異常產(chǎn)生時,才會改變處理器狀態(tài),每次的異常檢測需要耗費一定的時間,降低了仿真的效率。并且AB 在修改宿主機EIP時采用了 “懶惰算法”,即在翻譯后基本塊執(zhí)行過程中不更改宿主機EIP,當(dāng)一個基本塊執(zhí)行完畢時才修改宿主機EIP,當(dāng)異常發(fā)生時,只需要恢復(fù)宿主機EIP。在恢復(fù)宿主機EIP時,需要根據(jù)基本塊生成時的EIP和HOST_PC的關(guān)系,通過restore_eip (),進行恢復(fù)。在恢復(fù)宿主機EIP時,需要調(diào)用mmu_wd/rd查找對應(yīng)關(guān)系,然后恢復(fù)出宿主機EIP,需要相當(dāng)多的時鐘周期完成。因而,異常的檢測與恢復(fù)宿主機EIP 都對性能有一定的影響。鑒于AB在異常仿真方面對性能的影響,采用建立翻譯前EIP與翻譯后HOST _PC 對應(yīng)關(guān)系表,通過反向查表,定位EIP。

在系統(tǒng)仿真中,翻譯前的基本塊BB (Basic Block)中一條指令B1 可能對應(yīng)于T1、T2、…、Tn多條OpenRisc指令,當(dāng)翻譯的指令塊TB (Translation Block)執(zhí)行時,如果在T2處發(fā)生異常,則需要通過異常的發(fā)生位置T2,查找到源指令B1,這樣才能定位異常,考慮到翻譯前的基本塊BB 與翻譯后的基本塊TB的對應(yīng)關(guān)系B1-> (T1,Tn),如圖3所示。

圖3 異常對應(yīng)關(guān)系

可以建立BTMT (basic block to translated block mapping table)表記錄翻譯前基本塊BB 的EIP 與翻譯后基本塊TB的HOST_PC對應(yīng)關(guān)系,見表1。

表1 EIP與HOST_PC關(guān)系

當(dāng)異常發(fā)生的位置Ti.begin≤Ti.except≤Ti.end 時,則對應(yīng)的宿主機基本塊中異常發(fā)生位置指令Bi即可定位。因此,在異常發(fā)生位置Ti.except被定位時,通過兩者的對應(yīng)關(guān)系表就能順利找到宿主機eip。

3.3 設(shè)計與實現(xiàn)

3.3.1 BTMT 表的實現(xiàn)

軟硬件協(xié)同處理方式大致分為兩種:一是,增加硬件電路協(xié)處理器單元,通過增加的硬件電路協(xié)處理單元,協(xié)同處理器完成相應(yīng)工作,以提高處理器的性能,但是這種方式帶來硬件協(xié)處理單元與處理器之間的通信開銷,并且這種硬件協(xié)處理器設(shè)計難度較大,不易實現(xiàn)。二是,修改處理器Verilog HDL 硬件描述語言,以增加特定的功能。這種只需要修改處理器Verilog HDL 硬件描述語言,改動較少代碼就能實現(xiàn)相應(yīng)功能,便于實現(xiàn),但是很多處理器受到專利等保護,不提供處理器Verilog HDL 代碼,造成了在實現(xiàn)上的難度。因此,結(jié)合OpenRisc開源的特性,我們用第二種方法,采用自定義指令的方式,使其增加特定的查找BTMT 表的功能。

BTMT 表的實現(xiàn)在翻譯時生成,在動態(tài)二進制翻譯器翻譯引擎translate()函數(shù)中實現(xiàn)記錄Basic Block的EIP與Translated Block的HOST_PC之間的BTMT,見表2。

表2 BTMT

翻譯前基本塊BB,對應(yīng)EIP 為B1、…、Bi、…、Bn,分別與翻譯后的TB建立一一對應(yīng)關(guān)系,T1、…、Ti、…、Tn分別為每個翻譯后指令塊的塊首,此種關(guān)系表格可以簡化比對時間以及底層Verilog HDL 的復(fù)雜度,當(dāng)出現(xiàn)異常指令Ti≤Tii<Ti+1時,即可定位Bi。

建立的BTMT 表在每次隨著基本塊翻譯生成時生成,當(dāng)基本塊執(zhí)行完畢,修改機器狀態(tài),將此基本塊對應(yīng)的BTMT 表無效,下一塊基本塊在翻譯之時,置新生成的BTMT 有效。每次生成的BTMT 表放在OpenRisc處理器的高速緩存中,以在異常發(fā)生時,由新定義指令調(diào)用,并返回比對結(jié)果。

3.3.2 自定義指令

所用平臺處理器OR1200為新指令的定義預(yù)留了8 個指令槽,這些指令槽有兩種格式,如圖4所示。

圖4 (a)指令格式的預(yù)留操作碼有0x1c、0x1d、0x1e、0x1f,圖4 (b)指令格式的預(yù)留操作碼有0x3c、0x3d、0x3e、0x3f,由于需要通過翻譯基本塊的HOST_PC查找到客戶機EIP,因此選擇第二種格式作為新增加指令的格式。

圖4 OR1200自定義指令格式

添加指令包括兩方面工作:一是,硬件層修改。修改OR1200 Verilog HDL 的處理器源碼文件or1200 _defines.v、or1200_cpu.v、or1200_ctrl.v等文件中分別增加相應(yīng)修改:①對or1200_defines.v的修改:添加對應(yīng)指令操作碼:`define OR1200_OR32_hte 6'b111110//l.the。②對or1200_ctrl.v的修改:增加BTMT 表控制比對邏輯單元以及新指令取指譯碼的控制單元,并輸出到ALU 模塊的比對信號,使得新指令能夠?qū)⒌腂TMT 表進行比對,產(chǎn)生比對結(jié)果。③對or1200_alu.v的修改:添加運算控制邏輯,并控制返回輸出。新指令l.hte定義l.hte操作碼為0x3c,機器碼為0xf1e10000,RD 寄存器位置為保存宿主機EIP的寄存器r15,寄存器RA 位置為保存HOST_PC 寄存器r16,寄存器RB 位置保留,L、K 相應(yīng)位置均保留機器。二是,軟件層修改。新定義的指令不能被交叉編譯器識別,讓新定義的指令在機器上執(zhí)行,還需修改相關(guān)部分。具體做法有兩種:一是,修改編譯器,增加對新指令的支持,這種做法較為復(fù)雜,而且會影響生成代碼的質(zhì)量。二是,修改匯編器,增加內(nèi)嵌機器碼以及定義新指令到二進制編碼的映射等實現(xiàn)新指令。本次實現(xiàn)采取第二種方式,首先在交叉編譯工具文件binutils/opcodes/or32-opc.c 加入: {"l.hte","rD,rA","11 0xC DDDDD AAAAA----------------",EF (l_hte),0,it_unknown},然后用內(nèi)聯(lián)匯編_asm_ _volatile_(“l(fā).hte”)調(diào)用新定義指令。

4 測試分析

實驗硬件平臺利用以O(shè)R1200處理器所搭建的協(xié)同處理仿真平臺,系統(tǒng)平臺為OpenRisc linux,內(nèi)核版本為linux 3.4,軟件平臺為AB 系統(tǒng)仿真器、fast-tty-linux.img系統(tǒng)鏡像,以及SPEC 2006測試集的部分子測試程序。

由于OR1200處理器性能的限制以及平臺部分資源的不足,實驗選取SPEC 2006 測試集的4 個測試程序400.perlbench、445.gobmk、458.sjeng、462.libquantum對系統(tǒng)在精確異常方面的開銷進行測試,結(jié)果如圖5所示。

通過對增加精確異常的協(xié)處理部分前后的程序運行時間進行比較,發(fā)現(xiàn)增加精確異常協(xié)處理部分后,測試程序的運行時間比沒有加入?yún)f(xié)處理部分分別有9.16%、14.32%、13.56%、10.48%降低,由于測試程序400.perlbench 和462.libquantum 程序沒有太多的異常發(fā)生,性能提升相對較小,而測試程序458.sjeng和445.gobmk 異常發(fā)生相對較多,對性能提升比前兩個有較為明顯。

圖5 優(yōu)化前后執(zhí)行時間

因此,對于觸發(fā)異常較少程序,此方法對性能的提升相對較小,而對于一些局部性不好或者容易觸發(fā)異常的程序,此方法對性能的提升比較明顯。

5 結(jié)束語

本文分析了AB 系統(tǒng)仿真器在支持精確異常方面的不足,以及在純軟件實現(xiàn)上的性能損耗,結(jié)合開源處理器OR1200,通過更改其Verilog HDL硬件描述語言,增加新定義指令,以完成HOST_PC到宿主機EIP的轉(zhuǎn)換,經(jīng)過SPEC2006測試集測試,性能比優(yōu)化前提高了9.16%~14.32%,根據(jù)其測試集程序的不同,優(yōu)化的效果也不盡想同。由于系統(tǒng)仿真器AB 在優(yōu)化過程中增加了TB-cache、塊鏈等機制,給精確異常帶來困難,此方法有助于今后在軟件層面的深度優(yōu)化。因本文所述方式需改動底層硬件描述語言以及交叉編譯工具鏈,其移植性不高。

以上方法雖然在實踐上比較困難,但對于一些國產(chǎn)處理器的系統(tǒng)仿真器優(yōu)化,有一定的借鑒意義。

[1]DONG Weiyu,WANG Lixin,JIANG Liehui,et al.Accelerate X86system emulation with protection cache [J].Computer Engineering and Design,2013,34 (2):606-610 (in Chinese).[董衛(wèi)宇,王立新,蔣烈輝,等.基于保護緩存的X86系統(tǒng)仿真優(yōu)化[J].計算機工程與設(shè)計,2013,34(2):606-610.]

[2]Jair Fajaido Junior,Mateus B Rutzig,Antonio CS Beck,et al.Towards an adaptable multiple-ISA Re-configurable processor[G].Lecture Notes in Computer Science 6578:7th International Symposium on Applied Reconfigurable Computing,2011:157-168.

[3]HU Wei,WANG Jian,GAO Xiang,et al.GODSON-3:A scalable multicore RISC processor with emulation [J].IEEE Micro,2009,29 (2):17-29.

[4]Fan DR,Li XW,Li GJ,et al.New methodologies for parallel architecture[J].Journal of Computer Science and Technology,2011,26 (4):578-587.

[5]DENG Haipeng.Reorganization and optimization of the backend code in dynamic binary translation [D].Shanghai:Shanghai Jiao Tong University,2011 (in Chinese).[鄧海鵬.動態(tài)二進制翻譯后端代碼熱路徑的重組優(yōu)化 [D].上海:上海交通大學(xué),2011.]

[6]SUN Tingtao.Branch analysis and optimization in dynamic binary translation [D].Shanghai:Shanghai Jiao Tong University,2010 (in Chinese). [孫廷韜.動態(tài)二進制翻譯中跳轉(zhuǎn)分析與優(yōu)化 [D].上海:上海交通大學(xué),2010.]

[7]QEMU.Change Log/1.2[EB/OL].[2012-09-05].http://wiki.qemu.org/ChangeLog/1.2.

[8]YU Lu.Research on improving mechanism of precise exception of QEMU [D].Wuhan:Huazhong University of Science &Technology,2008 (in Chinese).[余璐.一種改進QEMU 精確異常處理機制的研究 [D].武漢:華中科技大學(xué),2008.]

[9]CHEN Wei.Research on dynamic binary translation based on Co-designed virtual machine[D].Changsha:National University of Defense Technology,2010 (in Chinese).[陳微.基于動態(tài)二進制翻譯的協(xié)同設(shè)計虛擬機關(guān)鍵技術(shù)研究 [D].長沙:國防科學(xué)技術(shù)大學(xué),2010.]

[10]CHEN Haifeng.Research on ISA mapping of Co-design X86 emulation [D].Zhengzhou:Information Engineering University,2012 (in Chinese).[陳海峰.協(xié)同設(shè)計X86仿真指令集映射技術(shù)研究 [D].鄭州:信息工程大學(xué),2012.]

[11]CHEN Qiao,JIANG Liehui,DONG Weiyu,et al.Simulator research based on dynamic binary translation technology [J].Computer Engineering,2011,37 (20):277-279 (in Chinese).[陳喬,蔣烈輝,董衛(wèi)宇,等.基于動態(tài)二進制翻譯技術(shù)的仿真器研究[J].計算機工程,2011,37 (20):277-279.]

猜你喜歡
宿主機二進制寄存器
用二進制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
Lite寄存器模型的設(shè)計與實現(xiàn)
嵌入式計算機軟件測試關(guān)鍵技術(shù)研究
有趣的進度
二進制在競賽題中的應(yīng)用
虛擬網(wǎng)絡(luò)實驗室在農(nóng)村職校計算機網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
分簇結(jié)構(gòu)向量寄存器分配策略研究*
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
一個生成組合的新算法
一種可重構(gòu)線性反饋移位寄存器設(shè)計
额敏县| 南陵县| 比如县| 云林县| 健康| 南投县| 都江堰市| 徐闻县| 壶关县| 湖南省| 长海县| 双桥区| 伊吾县| 高平市| 蓬莱市| 泾阳县| 娱乐| 平顺县| 巴彦淖尔市| 仁布县| 建水县| 桑日县| 英山县| 灌云县| 寿阳县| 名山县| 泰安市| 金秀| 黄平县| 建瓯市| 松江区| 嘉峪关市| 桑植县| 永济市| 红河县| 卓资县| 虞城县| 开封县| 通山县| 桂林市| 新化县|