• 
    

    
    

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

      基于保護(hù)緩存的x86系統(tǒng)仿真優(yōu)化

      2013-07-25 02:28:34董衛(wèi)宇王立新蔣烈輝郭玉東
      關(guān)鍵詞:仿真器描述符調(diào)用

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

      (國(guó)家數(shù)字交換系統(tǒng)系統(tǒng)工程技術(shù)研究中心,河南鄭州450002)

      0 引言

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

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

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

      1 x86保護(hù)機(jī)制的仿真開(kāi)銷(xiāo)

      我們以L(fǎng)inux系統(tǒng)調(diào)用為例說(shuō)明x86處理器保護(hù)機(jī)制的復(fù)雜性,并分析仿真開(kāi)銷(xiāo)的來(lái)源。Linux系統(tǒng)調(diào)用由軟中斷指令I(lǐng)NT 0x80發(fā)起,中斷描述符表IDT中索引為0x80的描述符被設(shè)置為陷阱門(mén),用以給出該軟中斷服務(wù)程序的入口。Linux系統(tǒng)調(diào)用不涉及x86的一致代碼段、虛擬8086模式等機(jī)制,為方便敘述,我們這里忽略了有關(guān)這些機(jī)制的保護(hù)檢查,實(shí)際的保護(hù)檢查過(guò)程還要復(fù)雜一些。

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

      從上例可見(jiàn),仿真x86的保護(hù)機(jī)制的開(kāi)銷(xiāo)主要來(lái)自?xún)蓚€(gè)方面。一是從內(nèi)存中取得各種描述符所帶來(lái)的訪(fǎng)存開(kāi)銷(xiāo)。系統(tǒng)仿真器一般使用一塊進(jìn)程地址空間模擬虛擬機(jī)的物理內(nèi)存,并利用軟件模擬x86 MMU和 TLB的動(dòng)作,訪(fǎng)存操作包括查詢(xún)虛擬TLB將描述符客戶(hù)線(xiàn)性地址GVA轉(zhuǎn)換為客戶(hù)物理地址GPA進(jìn)而轉(zhuǎn)換成宿主虛擬地址HVA,以及可能的由于虛擬TLB缺失導(dǎo)致的查詢(xún)客戶(hù)操作系統(tǒng)頁(yè)表并填充TLB的操作。上述訪(fǎng)問(wèn)描述符的操作會(huì)帶來(lái)很大的開(kāi)銷(xiāo)。二是針對(duì)描述符進(jìn)行的各種檢查操作,在對(duì)這些操作進(jìn)行精確仿真時(shí),將有大量的分支語(yǔ)句用于判斷是否違反保護(hù)規(guī)則,可能對(duì)宿主處理器流水線(xiàn)性能產(chǎn)生較大的影響。

      2 保護(hù)緩存

      我們認(rèn)為,x86處理器在保護(hù)檢查操作上呈現(xiàn)出某種局部性,即對(duì)于x86上的操作系統(tǒng)來(lái)說(shuō),描述符表的設(shè)置一般是正確的且很少變化,某個(gè)指令或操作通過(guò)保護(hù)檢查往往意味著以后執(zhí)行該指令或操作時(shí)也可以通過(guò)保護(hù)檢查。因此,可為虛擬x86處理器維護(hù)一塊緩存區(qū)域,緩存最近訪(fǎng)問(wèn)過(guò)的描述符,以及使用該描述符的指令或操作的保護(hù)檢查結(jié)果,當(dāng)再次執(zhí)行該指令或操作時(shí),可從保護(hù)緩存中獲取需要的描述符及保護(hù)檢查結(jié)果,從而避免對(duì)虛擬機(jī)內(nèi)存的訪(fǎng)問(wèn)和繁瑣的保護(hù)檢查操作。我們稱(chēng)這種機(jī)制為保護(hù)緩存。

      考慮到實(shí)效性,我們對(duì)保護(hù)緩存的內(nèi)容進(jìn)行了若干限定。首先,多數(shù)x86上的操作系統(tǒng)很少使用LDT,因此保護(hù)緩存中只保存來(lái)自GDT和IDT的描述符。其次,x86的保護(hù)機(jī)制分為段級(jí)保護(hù)和頁(yè)級(jí)保護(hù),由于TLB中緩存了頁(yè)級(jí)保護(hù)的結(jié)果,因此文章的保護(hù)緩存主要涉及段級(jí)保護(hù)機(jī)制。

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

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

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

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

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

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

      表1 具有不同段級(jí)保護(hù)檢查方式的7類(lèi)指令或操作

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

      3 實(shí)現(xiàn)

      文章基于QEMU[9]對(duì)保護(hù)緩存機(jī)制進(jìn)行了實(shí)現(xiàn),主要包括兩個(gè)方面的工作。第一方面的工作是在虛擬CPU的狀態(tài)結(jié)構(gòu)中增加保護(hù)緩存相關(guān)的數(shù)據(jù)結(jié)構(gòu),并修改表1中指令或操作的仿真方法,使得系統(tǒng)仿真器在訪(fǎng)問(wèn)描述符或進(jìn)行保護(hù)檢查之前,先查詢(xún)保護(hù)緩存,僅當(dāng)緩存缺失時(shí)才訪(fǎng)問(wèn)描述符表并進(jìn)行保護(hù)檢查。

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

      當(dāng)IDT的線(xiàn)性地址GVA、尺寸、物理地址GPA、內(nèi)容四者之一發(fā)生變化時(shí),可認(rèn)為INTR P-Cache的內(nèi)容失效。對(duì)IDT的前兩種變化的監(jiān)測(cè)相對(duì)簡(jiǎn)單,IDT的線(xiàn)性地址和尺寸保存在IDTR中,并通過(guò)指令LIDT來(lái)設(shè)置,因此可通過(guò)對(duì)LIDT指令插樁來(lái)監(jiān)測(cè)IDT的線(xiàn)性地址和尺寸,并在發(fā)現(xiàn)變化時(shí)刷新INTR P-Cache。對(duì)IDT的后兩種變化的監(jiān)測(cè)稍微復(fù)雜。為監(jiān)測(cè)IDT內(nèi)容的變化必須獲取IDT對(duì)應(yīng)的物理地址,在獲取IDT的物理地址并對(duì)其進(jìn)行寫(xiě)保護(hù)之前,INTR P-Cache中的內(nèi)容是無(wú)效的。

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

      圖3 相關(guān)數(shù)據(jù)結(jié)構(gòu)間的關(guān)系

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

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

      4 性能測(cè)試及分析

      文章對(duì)啟動(dòng)保護(hù)緩存前后的QEMU虛擬機(jī)的系統(tǒng)效率進(jìn)行了測(cè)試,宿主機(jī)為運(yùn)行Fedora操作系統(tǒng)的x86平臺(tái),虛擬機(jī)為運(yùn)行Debian操作系統(tǒng)x86平臺(tái)。

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

      圖4 啟動(dòng)保護(hù)緩存前后指令或操作的平均時(shí)鐘周期

      保護(hù)緩存主要提升中斷操作和段操作指令的效率,那些頻繁進(jìn)行系統(tǒng)調(diào)用、內(nèi)存局部性不好 (頻繁產(chǎn)生頁(yè)面異常)或I/O密集型的應(yīng)用將從中獲益。

      圖5 啟動(dòng)pcache前后系統(tǒng)調(diào)用和mtouch的執(zhí)行時(shí)間

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

      我們選取tiobench[10]測(cè)試保護(hù)緩存對(duì)I/O密集型應(yīng)用的影響,后者需頻繁進(jìn)行系統(tǒng)調(diào)用 (read/write)并產(chǎn)生磁盤(pán)中斷。圖6給出了在啟動(dòng)和關(guān)閉保護(hù)緩存的情況下在虛擬機(jī)中利用tiobench進(jìn)行5次1GB磁盤(pán)讀寫(xiě)操作的平均帶寬和延遲。測(cè)試結(jié)果表明,引入保護(hù)緩存后,tiobench寫(xiě)操作和讀操作的帶寬分別最多提升了約12%和13%,讀操作和寫(xiě)操作的延時(shí)分別最多降低了約9%和12%。

      圖6 啟動(dòng)保護(hù)緩存前后的I/O帶寬和延遲

      保護(hù)緩存的開(kāi)銷(xiāo)主要來(lái)自三方面,即在處理TLB-FILL事件時(shí)檢測(cè)描述符表的物理地址、在寫(xiě)虛擬機(jī)物理內(nèi)存時(shí)檢測(cè)對(duì)描述符表的修改、以及修改描述符表時(shí)所導(dǎo)致的緩存項(xiàng)刷新。前兩種開(kāi)銷(xiāo)僅是在原有代碼基礎(chǔ)上增加少量判斷語(yǔ)句,幾乎可以忽略。對(duì)于第三種開(kāi)銷(xiāo),觀(guān)測(cè)表明,操作系統(tǒng)對(duì)描述符表的修改次數(shù)相比保護(hù)檢查來(lái)說(shuō)頻率很低,以L(fǎng)inux為例,對(duì)IDT的修改一般僅在系統(tǒng)引導(dǎo)以及加載驅(qū)動(dòng)程序時(shí)進(jìn)行,對(duì)GDT的修改僅發(fā)生在線(xiàn)程切換時(shí) (GDT中第6~8號(hào)描述符用于線(xiàn)程本地存儲(chǔ))。通過(guò)運(yùn)行nbench[11]測(cè)試集 (其中的大多數(shù)程序?yàn)橛?jì)算密集型應(yīng)用)測(cè)試保護(hù)緩存對(duì)普通應(yīng)用程序的影響,結(jié)果如表2所示,表明保護(hù)緩存不會(huì)對(duì)普通應(yīng)用程序的性能造成負(fù)面影響。

      表2 啟動(dòng)保護(hù)緩存前后的nbench性能

      5 結(jié)束語(yǔ)

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

      受環(huán)境限制,文章僅在同構(gòu)條件下 (即在x86平臺(tái)上仿真x86虛擬機(jī))對(duì)保護(hù)緩存機(jī)制進(jìn)行了驗(yàn)證,但本文的方法同樣適用于在異構(gòu)平臺(tái)。另外,通過(guò)在處理器核心利用硬件實(shí)現(xiàn)保護(hù)緩存并增加若干指令,文章的思想也適用于軟硬件協(xié)同系統(tǒng)仿真系統(tǒng)。

      [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).[曹宏嘉.面向微處理器設(shè)計(jì)的動(dòng)態(tài)二進(jìn)制翻譯技術(shù)研究[D].長(zhǎng)沙:國(guó)防科技大學(xué),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).[蔡嵩松,劉奇,基于龍芯處理器的二進(jìn)制翻譯器優(yōu)化 [J].計(jì)算機(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).[李駿,管海兵.動(dòng)態(tài)二級(jí)制翻譯中基本塊重疊冗余的優(yōu)化[J].計(jì)算機(jī)工程,2007,33(22):60-62.]

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

      [8]XING Chong,F(xiàn)U Yuzhuo.Code cache index in system-level dynamic binary translation [J].Computer Engineering,2008,34(22):253-255(in Chinese).[邢沖,付宇卓,系統(tǒng)級(jí)動(dòng)態(tài)二進(jìn)制翻譯中的代碼 cache索引 [J].計(jì)算機(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.

      猜你喜歡
      仿真器描述符調(diào)用
      基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      Linux單線(xiàn)程并發(fā)服務(wù)器探索
      利用CNN的無(wú)人機(jī)遙感影像特征描述符學(xué)習(xí)
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      基于多線(xiàn)程的慣導(dǎo)邏輯仿真器設(shè)計(jì)
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      天文測(cè)量仿真器模擬星圖精度分析
      并行片上網(wǎng)絡(luò)仿真器ParaNSim的設(shè)計(jì)及性能分析
      思茅市| 邢台县| 建昌县| 天台县| 隆安县| 大理市| 漠河县| 天镇县| 平果县| 玉田县| 河西区| 昆明市| 抚远县| 阳谷县| 河池市| 张家港市| 龙里县| 德令哈市| 三江| 莱芜市| 如东县| 甘德县| 清远市| 攀枝花市| 阿克苏市| 石渠县| 宜都市| 富源县| 馆陶县| 敦煌市| 琼结县| 宜城市| 阿坝县| 凤凰县| 中西区| 阿拉善盟| 改则县| 吴旗县| 金塔县| 鱼台县| 玉门市|