亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于保護緩存的x86系統仿真優(yōu)化

        2013-07-25 02:28:34董衛(wèi)宇王立新蔣烈輝郭玉東
        計算機工程與設計 2013年2期
        關鍵詞:指令機制系統

        董衛(wèi)宇,王立新,蔣烈輝,郭玉東

        (國家數字交換系統系統工程技術研究中心,河南鄭州450002)

        0 引言

        系統仿真 (system emulation)是指對某個計算機的指令集體系結構 (instruction set architecture,ISA)進行盡可能精確的仿真,以構建與該計算機等價的虛擬機。x86是一種主流的但十分復雜的指令集體系結構,得到了多數系統仿真器的支持,所得到的x86系統虛擬機被廣泛應用于跨平臺操作系統透明移植[1,2]、動態(tài)二進制分析[3,4]等領域。利用系統仿真器得到的x86虛擬機相比真實的計算機在效率上會有一定的下降,如何提高x86仿真效率一直是系統仿真器的重要研究內容之一。目前雖然已有一些工作通過優(yōu)化動態(tài)二進制翻譯引擎來提高仿真效率[5-8],但未見有工作針對x86的保護檢查機制進行仿真優(yōu)化。

        本文提出了一種基于保護緩存 (protection cache,PCache)的x86系統仿真的優(yōu)化機制,可在不損失兼容性的前提下,有效降低仿真x86保護機制的開銷。測試表明,啟動保護緩存后,涉及保護檢查的x86指令或操作的仿真效率,以及虛擬機中運行的頻繁使用這些指令或操作的應用程序的性能均得到了穩(wěn)定的提升。

        在系統仿真器中設置保護緩存的觀點建立在以下兩點觀察之上。首先,x86處理器針對某些指令或操作進行的保護檢查比較復雜,而且,由于保護檢查的復雜性,很難將需要進行保護檢查的x86指令或操作翻譯為對應的宿主平臺指令序列,而是采用C函數來模擬它們的行為,這進一步降低了仿真的效率。其次,某些涉及保護檢查的x86指令或操作可能被頻繁執(zhí)行,在執(zhí)行環(huán)境未發(fā)生變化的情況下,重復模擬保護檢查的動作是不必要的,可以將此前保護檢查的結果緩存起來,供后續(xù)的執(zhí)行使用。因此,采用保護緩存將有可能降低仿真x86處理器保護機制所帶來的開銷,提高系統仿真器的整體效率。

        1 x86保護機制的仿真開銷

        我們以Linux系統調用為例說明x86處理器保護機制的復雜性,并分析仿真開銷的來源。Linux系統調用由軟中斷指令INT 0x80發(fā)起,中斷描述符表IDT中索引為0x80的描述符被設置為陷阱門,用以給出該軟中斷服務程序的入口。Linux系統調用不涉及x86的一致代碼段、虛擬8086模式等機制,為方便敘述,我們這里忽略了有關這些機制的保護檢查,實際的保護檢查過程還要復雜一些。

        執(zhí)行INT 0x80指令時處理器主要執(zhí)行以下動作:以0x80為索引,從IDT中取得門描述符,記為GateDesc,并檢查中斷類型號0x80所引用的描述符是否超出IDT的界限、GateDesc的P位是否為1、GateDesc的類型是否為中斷門、陷阱門、任務門之一、GateDesc中的段選擇子引用的描述符是否為空等;以GateDesc中的段選擇子為索引,從全局描述符表GDT中取得代碼段描述符,記為Code-Desc,并檢查GateDesc中的段選擇子引用的描述符是否超出GDT或LDT的界限、CodeDesc的類型是否是代碼段、CodeDesc的P為是否為1等;進行堆棧切換。從當前任務狀態(tài)段TSS中取得特權級0對應的堆棧地址,并根據堆棧段選擇子從GDT或LDT中取得堆棧段描述符,記為Stack-Desc,并檢查堆棧段選擇子引用的是否是空描述符、該描述符地址是否超出GDT或LDT的界限、StackDesc的類型是否是可寫的數據段、StackDesc的DPL是否等于Code-Desc的DPL、StackDesc的P為是否為1等。最后,向堆棧中壓入返回地址、標志寄存器,裝載寄存器SS和ESP完成切換堆棧,裝載寄存器CS和EIP完成控制轉移。

        從上例可見,仿真x86的保護機制的開銷主要來自兩個方面。一是從內存中取得各種描述符所帶來的訪存開銷。系統仿真器一般使用一塊進程地址空間模擬虛擬機的物理內存,并利用軟件模擬x86 MMU和 TLB的動作,訪存操作包括查詢虛擬TLB將描述符客戶線性地址GVA轉換為客戶物理地址GPA進而轉換成宿主虛擬地址HVA,以及可能的由于虛擬TLB缺失導致的查詢客戶操作系統頁表并填充TLB的操作。上述訪問描述符的操作會帶來很大的開銷。二是針對描述符進行的各種檢查操作,在對這些操作進行精確仿真時,將有大量的分支語句用于判斷是否違反保護規(guī)則,可能對宿主處理器流水線性能產生較大的影響。

        2 保護緩存

        我們認為,x86處理器在保護檢查操作上呈現出某種局部性,即對于x86上的操作系統來說,描述符表的設置一般是正確的且很少變化,某個指令或操作通過保護檢查往往意味著以后執(zhí)行該指令或操作時也可以通過保護檢查。因此,可為虛擬x86處理器維護一塊緩存區(qū)域,緩存最近訪問過的描述符,以及使用該描述符的指令或操作的保護檢查結果,當再次執(zhí)行該指令或操作時,可從保護緩存中獲取需要的描述符及保護檢查結果,從而避免對虛擬機內存的訪問和繁瑣的保護檢查操作。我們稱這種機制為保護緩存。

        考慮到實效性,我們對保護緩存的內容進行了若干限定。首先,多數x86上的操作系統很少使用LDT,因此保護緩存中只保存來自GDT和IDT的描述符。其次,x86的保護機制分為段級保護和頁級保護,由于TLB中緩存了頁級保護的結果,因此文章的保護緩存主要涉及段級保護機制。

        通過對x86指令集的分析,總結出兩類比較復雜的段級保護檢查:一是確定中斷服務程序入口時,需要對中斷類型號索引到的IDT中的門描述符進行保護檢查,涉及這類檢查的指令或操作均與中斷相關,包括INT n/INTO/INT 3、硬件中斷、異常等;二是加載段寄存器時,需要對段選擇子索引到的GDT中的段描述符進行保護檢查,涉及這類檢查的指令包括IRET、以段寄存器為目的操作數的MOV/POP、LSS/LDS/LES/LFS/LGS、LCALL、LRET、LJMP 等。注意,INT n/INTO/INT 3、硬件中斷、異常等指令或操作由于需要進行段間轉移或堆棧切換,需要加載段寄存器,因此也需要進行第二類檢查。

        根據保護檢查所需描述符的來源,我們將保護緩存分為兩部分,分別稱為INTR P-Cache(P-Cache for INTeRrupt)和 SRL P-Cache(P-Cache for Segment Register Loa-ding),兩者分別緩存來自IDT和GDT的描述符以及處理器對使用這些描述符的指令或操作的保護檢查結果。

        INTR P-Cache和SRL P-Cache的緩存項的個數與IDT和GDT中描述符的個數保持相等,且緩存項與描述符間一一對應,給出中斷類型號或段選擇子,就可以在P-Cache中索引到對應的緩存項,這也使得緩存淘汰算法不再必要。IDT最多包含256個描述符,GDT雖可以包含8K個描述符,但操作系統一般只設置很小的GDT,因此P-Cache不會消耗很大的內存。

        Intr P-Cache和SRL P-Cache具有類似的邏輯結構,如圖1所示。每個緩存項由兩部分組成,第一部分記作Descriptor(8字節(jié)),用于緩存來自描述符表的描述符;第二部分記作Checking Result,用于緩存保護檢查的結果。

        給定描述符,不同的指令或操作對應的保護檢查內容也不同,不同的特權級下執(zhí)行同樣的指令或操作所得的保護檢查結果也不同。例如,若選擇子SEL索引GDT中的一個DPL為0的只讀數據段描述符,在CPL為0時,MOV DS,SEL將把該描述符加載到DS中,但MOV SS,SEL將無法通過保護檢查 (堆棧段必須可寫),當CPL為3時,指令MOV DS,SEL也無法通過保護檢查 (權限不夠)。為此,我們將前述指令或操作劃分為7類,如表1所示。相應地,緩存項的Checking Result字段被組織成一個位圖,如圖2所示,每類指令或操作對應位圖中的4位,位n(n=0,1,2,3)指示在特權級為n時執(zhí)行該指令或操作是否通過保護檢查。給定指令或操作類別m以及特權級n(特權級一般指CPL,某些情況下,為CPL和RPL的最大值),位圖中的第m*4+n位為緩存的保護檢查結果。由于僅表1中的第1類指令或操作引用Intr P-Cache,因此Checking Result的低4位有意義,SRL P-Cache則使用Checking Result的低28位。

        給定指令或操作及其參數,若索引到的緩存項的Checking Result位圖中的相應位為1,則稱為緩存命中,否則稱為緩存缺失。緩存命中意味著系統仿真器可直接從緩存項的Descriptor部分獲取描述符供后續(xù)使用,也無需再對指令或操作進行保護檢查。緩存缺失的原因可能是P-Cache被刷新、初次執(zhí)行該指令或操作等,此時系統仿真器需要從虛擬機內存讀取描述符并進行保護檢查操作,若通過保護檢查,則將描述符保存在緩存項的Descriptor部分,并將Checking Result的相應位置1,即緩存裝入。在某些時機,如系統初始化或檢測到IDT或GDT發(fā)生變化時,將執(zhí)行緩存刷新,將所有的緩存項清0。

        表1 具有不同段級保護檢查方式的7類指令或操作

        以上述Linux系統調用為例,若第一次執(zhí)行INT 0x80通過了全部保護檢查,則很可能再次執(zhí)行INT 0x80所需的描述符和保護檢查結果都已經緩存在了INTR P-Cache和SRL P-Cache中,如此可以省去3次訪問虛擬機內存獲取描述符的操作,以及3次保護檢查的操作。因此保護緩存是一種有效的提高系統仿真效率的方式。

        3 實現

        文章基于QEMU[9]對保護緩存機制進行了實現,主要包括兩個方面的工作。第一方面的工作是在虛擬CPU的狀態(tài)結構中增加保護緩存相關的數據結構,并修改表1中指令或操作的仿真方法,使得系統仿真器在訪問描述符或進行保護檢查之前,先查詢保護緩存,僅當緩存缺失時才訪問描述符表并進行保護檢查。

        第二方面的工作是維護P-Cache的一致性,即監(jiān)測描述符表的變化,確定P-Cache中的內容是否有效。下面以IDT例說明文章采用的做法。對SRL P-Cache的一致性維護方法類似。

        當IDT的線性地址GVA、尺寸、物理地址GPA、內容四者之一發(fā)生變化時,可認為INTR P-Cache的內容失效。對IDT的前兩種變化的監(jiān)測相對簡單,IDT的線性地址和尺寸保存在IDTR中,并通過指令LIDT來設置,因此可通過對LIDT指令插樁來監(jiān)測IDT的線性地址和尺寸,并在發(fā)現變化時刷新INTR P-Cache。對IDT的后兩種變化的監(jiān)測稍微復雜。為監(jiān)測IDT內容的變化必須獲取IDT對應的物理地址,在獲取IDT的物理地址并對其進行寫保護之前,INTR P-Cache中的內容是無效的。

        我們先來討論對IDT物理地址的獲取。當x86未啟動分頁時,線性地址即物理地址,通過IDTR的內容就可以判斷IDT的GPA。但當虛擬機啟動分頁時,理論上講 (雖然可能性很小),對于不同的進程上下文,IDT可能處于不同的物理地址,也不能通過查詢虛擬機的頁表的方法來確定IDT的GPA(IDT可能不在物理內存中)。文章通過截獲虛擬CPU的TLB填充 (TLB-FILL)事件來發(fā)現IDT的GPA,具體做法是:對 INTR P-Cache中的緩存項分組,稱為PCEG(P-Cache Entry Group),屬于同一PCEG的緩存項的描述符來自同一物理頁面。使用數據結構pceg_desc_t在PCEG、描述符表虛擬頁面以及物理頁面間建立聯系,如圖3所示,其中的cache字段指向緩存項,va和pa字段分別記錄PCEG對應的IDT頁面的線性地址和物理地址。當虛擬CPU訪問IDT時 (如對某個指令或操作進行保護檢查而讀取相關描述符),若TLB中不存在相關虛擬地址到物理地址的映射,將導致TLB-FILL事件,截獲該事件,從將要裝入的TLB表項中得到PCEG所對應的物理頁面基址并將其記錄在pceg_desc_t.pa中。事實上,可將pceg_desc_t看做是TLB的擴展,其中記錄了IDT線性地址和物理地址間的映射關系,該映射關系不受TLB表項淘汰機制的影響,但若虛擬機重新加載CR3或針對IDT執(zhí)行INVLPG指令,該映射關系將失效。

        圖3 相關數據結構間的關系

        在獲得PCEG所對應的IDT物理頁面地址后就可以對IDT的內容變化進行監(jiān)測。通過截獲QEMU的虛擬機物理內存寫操作 (stl_kernel、__stl_mmu等)實現對INTR P-Cache一致性的維護,在QEMU寫虛擬機物理內存前,判斷地址是否落入檢測到的IDT的物理地址范圍內,若是則刷新相應的P-Cache緩存項。

        為維護P-Cache的一致性,需修改QEMU的如下指令或操作的仿真代碼,包括:LIDT和LGDT指令 (檢測IDT和GDT線性地址或尺寸變化)、CR0寫指令 (檢測保護模式的啟動和關閉、檢測分頁機制的啟動和關閉)、CR3寫指令和INVLPG指令 (檢測IDT和GDT的物理地址變化)、虛擬TLB操作 (獲得IDT或GDT的物理地址)、物理內存寫操作 (檢測IDT或GDT的內容變化)。

        4 性能測試及分析

        文章對啟動保護緩存前后的QEMU虛擬機的系統效率進行了測試,宿主機為運行Fedora操作系統的x86平臺,虛擬機為運行Debian操作系統x86平臺。

        QEMU以用戶態(tài)進程的方式運行,執(zhí)行過程受宿主機操作系統噪聲的影響較大,因此不易精確測量虛擬機的某個指令或操作的執(zhí)行時間。文章通過測量保護模式下執(zhí)行指令或操作所耗費的平均時鐘周期來評估保護緩存機制對系統仿真效率的影響,時鐘周期的計量可采用讀取宿主機時間戳計數器 (如x86的Time Stamp Counter,TSC)的方法確定。圖4給出了引入保護緩存前后各指令或操作的平均時鐘周期。結果表明,引入保護緩存后,與保護檢查相關的指令或操作的效率最少提升了約11%(中斷或異常處理),最大提升約24.5%(加載段寄存器)。

        圖4 啟動保護緩存前后指令或操作的平均時鐘周期

        保護緩存主要提升中斷操作和段操作指令的效率,那些頻繁進行系統調用、內存局部性不好 (頻繁產生頁面異常)或I/O密集型的應用將從中獲益。

        圖5 啟動pcache前后系統調用和mtouch的執(zhí)行時間

        為測試保護緩存對系統調用效率及頁面異常的影響,我們構造了scgen(System Call Generator)和mtouch(memory touch)兩個測試程序,前者循環(huán)調用一定次數的gettimeofday(選擇gettimeofday的主要原因在于該系統調用的工作很少,可以認為模式切換在其執(zhí)行時間中占有很大比例),后者對一大塊內存進行隨機訪問。圖5給出了啟動保護緩存前后,執(zhí)行 2000,000~10,000,000次 gettimeofday系統調用或內存訪問所耗費的時間。結果表明,啟動保護緩存后,系統調用的效率有9%~27%的提升,內存訪問的效率有7%~14%的提升。

        我們選取tiobench[10]測試保護緩存對I/O密集型應用的影響,后者需頻繁進行系統調用 (read/write)并產生磁盤中斷。圖6給出了在啟動和關閉保護緩存的情況下在虛擬機中利用tiobench進行5次1GB磁盤讀寫操作的平均帶寬和延遲。測試結果表明,引入保護緩存后,tiobench寫操作和讀操作的帶寬分別最多提升了約12%和13%,讀操作和寫操作的延時分別最多降低了約9%和12%。

        圖6 啟動保護緩存前后的I/O帶寬和延遲

        保護緩存的開銷主要來自三方面,即在處理TLB-FILL事件時檢測描述符表的物理地址、在寫虛擬機物理內存時檢測對描述符表的修改、以及修改描述符表時所導致的緩存項刷新。前兩種開銷僅是在原有代碼基礎上增加少量判斷語句,幾乎可以忽略。對于第三種開銷,觀測表明,操作系統對描述符表的修改次數相比保護檢查來說頻率很低,以Linux為例,對IDT的修改一般僅在系統引導以及加載驅動程序時進行,對GDT的修改僅發(fā)生在線程切換時 (GDT中第6~8號描述符用于線程本地存儲)。通過運行nbench[11]測試集 (其中的大多數程序為計算密集型應用)測試保護緩存對普通應用程序的影響,結果如表2所示,表明保護緩存不會對普通應用程序的性能造成負面影響。

        表2 啟動保護緩存前后的nbench性能

        5 結束語

        本文提出了一種新穎的針對x86保護機制的系統仿真優(yōu)化方法,測試表明,引入保護緩存后涉及保護檢查的x86指令或操作的仿真效率提升了11%~24.5%,并且,使用這些指令或操作的系統調用、頁面故障處理和I/O密集型應用的性能均得到了穩(wěn)定的提升。

        受環(huán)境限制,文章僅在同構條件下 (即在x86平臺上仿真x86虛擬機)對保護緩存機制進行了驗證,但本文的方法同樣適用于在異構平臺。另外,通過在處理器核心利用硬件實現保護緩存并增加若干指令,文章的思想也適用于軟硬件協同系統仿真系統。

        [1]HU Weiwu,WANG Jian,GAOXiang,et al,GODSON-3:A scalable multicore RISC process with x86 emulation [J].IEEE Micro,2009,29(2):17-29.

        [2]CAO Hongjia.Research on micro-processor designing oriented dynamic binary translation technology[D].Changsha:Philosophy Doctor Dissertation of National University of Defense Technology(in Chinese).[曹宏嘉.面向微處理器設計的動態(tài)二進制翻譯技術研究[D].長沙:國防科技大學,2005.]

        [3]Prashanth P Bungale,Chi-Keung Luk,PinOS:A programmable framework for whole-system dynamic instrumentation[C]//Proceedings of the3rd international conference on Virtual execution environments.New York,ACM,2006:137-147.

        [4]HENG Yin,Dawn Song,TEMU-binary code analysis via wholesystem layered annotative execution[R].Berkeley:UC Berkeley,2010.

        [5]CAI Songsong,LIU Qi.Optimization of binary translator based on GODSON CPU [J].Computer Engineering,2009,35(7):280-282(in Chinese).[蔡嵩松,劉奇,基于龍芯處理器的二進制翻譯器優(yōu)化 [J].計算機工程,2009,35(7):280-282.]

        [6]LI Jun,GUAN Haibing.Optimization of basic block overlapped redundancy in dynamic binary translation[J].Computer Engineering,2007,33(22):60-62(in Chinese).[李駿,管海兵.動態(tài)二級制翻譯中基本塊重疊冗余的優(yōu)化[J].計算機工程,2007,33(22):60-62.]

        [7]LONG Kaiwen,FU Yuzhuo.Interrupt handling strategy in systemlevel dynamic binary translator[J].Computer Engineering,2008,34(22):245-246(in Chinese).[龍開文,付宇卓,系統級動態(tài)二進制翻譯器的中斷處理策略 [J].計算機工程,2008,34(22):245-246.]

        [8]XING Chong,FU Yuzhuo.Code cache index in system-level dynamic binary translation [J].Computer Engineering,2008,34(22):253-255(in Chinese).[邢沖,付宇卓,系統級動態(tài)二進制翻譯中的代碼 cache索引 [J].計算機工程,2008,34(22):253-255.]

        [9]Fabrice Bellard,QEMU:A fast and portable dynamic translator[C]//Proceedings of the annual conference on USENIX Annual Technical Conference, Berkeley:USENIX Association, 2005:41-46.

        [10]James Manning,Mika Kuoppala,Threaded I/O tester[CP/OL].[2012-05-10].http://sourceforge.net/projects/tiobench/.

        [11]Nbench [CP/OL].[2012-05-10].http://en.wikipedia.org/wiki/NBench.

        猜你喜歡
        指令機制系統
        聽我指令:大催眠術
        Smartflower POP 一體式光伏系統
        WJ-700無人機系統
        ZC系列無人機遙感系統
        北京測繪(2020年12期)2020-12-29 01:33:58
        ARINC661顯控指令快速驗證方法
        測控技術(2018年5期)2018-12-09 09:04:26
        LED照明產品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        自制力是一種很好的篩選機制
        文苑(2018年21期)2018-11-09 01:23:06
        連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        破除舊機制要分步推進
        注重機制的相互配合
        亚洲AV小说在线观看| 无套内内射视频网站| 国产亚洲熟妇在线视频| 免费无码精品黄av电影| 亚洲国产精品sss在线观看av | 亚欧视频无码在线观看| 日韩一二三四区在线观看| 天天做天天爱夜夜爽| 国产在线不卡一区二区三区| 中文字幕日产人妻久久| 97久久综合精品国产丝袜长腿| 色窝窝亚洲av网在线观看| 99国内精品久久久久久久| 亚洲一区二区三区av链接| 国产成人av一区二区三| 人妻无码第一区二区三区| 艳妇臀荡乳欲伦交换在线播放| 久久久综合九色合综国产| 久久精品天堂一区二区| 亚洲av不卡无码国产| 婷婷午夜天| 久久久久综合一本久道| 国产在线精品观看一区二区三区| 国模精品一区二区三区| 天堂在线www中文| 国产美女黄性色av网站| 精品国产精品三级在线专区| 一本一本久久aa综合精品| 日韩在线看片免费人成视频| 自拍偷拍一区二区三区四区| 日本道色综合久久影院| 亚洲欧美日韩人成在线播放| 欧美 亚洲 国产 日韩 综AⅤ| 在线观看视频国产一区二区三区 | 中国老熟女重囗味hdxx| a级毛片免费观看视频| 亚洲中文字幕不卡一区二区三区| av在线观看一区二区三区| 精品一区二区三区无码免费视频| 日本一区二区三区中文字幕最新 | 日本一区二区三区清视频|