王華斌,夏清泉,李希然,趙勝義
(1.哈爾濱醫(yī)科大學(xué)附屬 第一臨床醫(yī)學(xué)院,哈爾濱 150001;2.哈爾濱工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,150001)
隨著計(jì)算技術(shù)的高速發(fā)展,虛擬化在云計(jì)算等關(guān)鍵應(yīng)用中扮演日益重要的角色,內(nèi)存虛擬化成為虛擬化技術(shù)的重要研究內(nèi)容之一.目前越來越多處理器內(nèi)集成了內(nèi)存管理單元MMU(Memory Management Unit),為虛擬化提供支持.MMU 虛擬化成為內(nèi)存虛擬化至關(guān)重要的一個(gè)方面,對(duì)降低虛擬化代價(jià)提高性能至關(guān)重要.本文對(duì)SPARC T2 處理器MMU 虛擬化機(jī)制進(jìn)行深入研究,并對(duì)虛擬化引入的代價(jià)進(jìn)行分析與探討.
IBM 公司于1965年開發(fā)了第一臺(tái)虛擬機(jī)System/360 Model 40 VM,開創(chuàng)了虛擬化技術(shù)的先河[1].隨著工藝的進(jìn)步,計(jì)算機(jī)步入多核時(shí)代,虛擬化技術(shù)在云計(jì)算等關(guān)鍵任務(wù)中扮演著日益重要的角色,以達(dá)到計(jì)算資源的高效、合理利用,提高系統(tǒng)可信性(dependability)[2].
按實(shí)現(xiàn)方式系統(tǒng)級(jí)虛擬化可以分為:全虛擬化(Full)、泛虛擬化(Para)和硬件輔助虛擬化(Hardware-assisted)[3].其中,內(nèi)存虛擬化是虛擬化中最為關(guān)鍵的任務(wù)之一,虛擬化后的訪存效率直接決定了系統(tǒng)性能.
各類不同虛擬化技術(shù)在內(nèi)存虛擬化方面都有著典型實(shí)現(xiàn):全虛擬化方式其內(nèi)存虛擬化通常采用影子頁表(Shadow Page Table)技術(shù),泛虛擬化通?;贛MU 內(nèi)存管理單元實(shí)現(xiàn)內(nèi)存的虛擬化,硬件輔助虛擬化則根據(jù)不同架構(gòu)的處理器有著不同的實(shí)現(xiàn).如:Intel VT-x 通過擴(kuò)展頁表EPT(Extended Page Table)實(shí)現(xiàn)內(nèi)存虛擬化的支持.
本文對(duì)內(nèi)存虛擬化中至關(guān)重要的MMU 虛擬化機(jī)制進(jìn)行深入探討,詳細(xì)分析了hypervisor 對(duì)MMU 虛擬化的支持,并對(duì)虛擬化代價(jià)進(jìn)行評(píng)測(cè).
Sun 公司UltraSPARC 虛擬化技術(shù)被稱為邏輯域(Logical Domain).Sun 公司通過在物理硬件之上增加hypervisor 虛擬化層來實(shí)現(xiàn)底層硬件的抽象,被抽象出的guest OS 虛擬機(jī)被稱為邏輯域.系統(tǒng)中的物理資源由hypervisor 全權(quán)掌控并實(shí)現(xiàn)虛擬化,包括:CPU 資源、內(nèi)存資源、硬盤、網(wǎng)絡(luò),以及I/O 資源等.邏輯域擁有各自的虛擬資源,獨(dú)立運(yùn)行且互不干擾.邏輯域擁有三種執(zhí)行模式:NP 非特權(quán)模式(Non-Privileged mode)、P 特權(quán)模式(Privileged mode)和HP 超特權(quán)模式(Hyper-Privileged mode)[4].
MMU 是CPU 內(nèi)處理訪存請(qǐng)求的硬件單元,完成內(nèi)存管理與保護(hù).傳統(tǒng)MMU 只支持VA 虛擬地址到PA 物理地址的轉(zhuǎn)換與保護(hù).為對(duì)虛擬化提供支持,Sun 對(duì)SPARC 處理器中MMU 的地址轉(zhuǎn)換功能進(jìn)行擴(kuò)充,使其支持VA 虛擬地址、RA 實(shí)地址和PA 物理地址三種地址.
虛擬地址(Virtual Address,VA),指Guest OS提供給其應(yīng)用程序使用的線性地址空間.實(shí)地址(Real Address,RA),經(jīng)抽象的虛擬機(jī)Guest OS 看到的偽物理地址.機(jī)器地址(Physical Address,PA),真實(shí)的機(jī)器地址,即地址總線上出現(xiàn)的地址信號(hào).
邏輯域技術(shù)中三地址之間關(guān)系如下:
Sun 邏輯域技術(shù)中內(nèi)存管理由hypervisor和Guest OS 各司其責(zé)地共同完成.例如hypervisor 維護(hù)實(shí)地址RA 到物理地址PA 的映射關(guān)系,而VA虛地址到RA 實(shí)地址的轉(zhuǎn)換由guest OS 的頁式內(nèi)存管理機(jī)制完成,即:
由此,Sun 邏輯域技術(shù)中hypervisor 對(duì)內(nèi)存的虛擬化主要是對(duì)MMU 的虛擬化.
SPARC T2 處理器內(nèi)MMU 包括兩個(gè)TLB(Translation Lookaside Buffer),一個(gè)是指令i-TLB,一個(gè)為數(shù)據(jù)d-TLB.TLB 中包含若干TTE(Translation Table Entry),每一項(xiàng)TTE 保存了頁的映射信息.
TLB 內(nèi)TTE 只維護(hù)VA 虛擬地址到PA 物理地址和RA 實(shí)地址到PA 物理地址的轉(zhuǎn)換信息,VA虛擬地址到RA 實(shí)地址的轉(zhuǎn)換信息不能寫入TLB中.
作為頁表的高速緩存的TLB 其大小是有限的,VA 到PA、RA 到PA 的映射不能全部寫入其中.因此MMU 內(nèi)還維護(hù)了如下兩個(gè)結(jié)構(gòu)STB(Software Translation Table)和TSB (Translation Storage Buffer).
STB 就是傳統(tǒng)意義上的頁表,存儲(chǔ)由Guest OS所維護(hù)的VA 到RA 轉(zhuǎn)換.STB 中保存了它所屬的guest OS 的所有VA 到RA 的映射信息,相對(duì)于TSB 來講STB 存儲(chǔ)代價(jià)更大,訪問代價(jià)更高.
TSB 實(shí)際上就是STB 的緩存,由Guest OS 維護(hù),它可以看作硬件與STB 之間的接口.
STB和TSB 聯(lián)合使用,當(dāng)TLB 缺失時(shí),SPARC T2 內(nèi)MMU 通過硬件訪問TSB 查找相應(yīng)的地址信息并填充TLB.
STB、TSB和TLB 及其地址轉(zhuǎn)換關(guān)系[5],如圖1所示.
圖1 SPARC 地址轉(zhuǎn)換機(jī)制
STB和TSB 均由Guest OS 維護(hù),STB 保存全部的VA 到RA 地址映射關(guān)系.作為STB 的緩存,TSB 保存最常用的VA 到RA 轉(zhuǎn)換信息.
RA 到PA 的映射由HP 超特權(quán)模式下的Hypervisor 維護(hù),映射結(jié)果直接寫入TLB.但VA 到PA映射則需通過Hypervisor 將VA 間接轉(zhuǎn)換到PA 后再寫入TLB.其中VA 到RA 的映射不會(huì)存放到TLB 中.
實(shí)際上,TLB 是以VA、Partition ID和Context ID,或RA和Partition ID為輸入,當(dāng)TLB 命中,返回PA和相應(yīng)頁屬性.當(dāng)TLB 缺失時(shí),則導(dǎo)致TSB 訪問;如果TSB 發(fā)生訪問缺失,則觸發(fā)STB 訪問.處理器內(nèi)MMU 對(duì)TSB 訪問提供硬件支持.
由于MMU 要被多個(gè)guest OS所共用,因此不允許客戶機(jī)操作系統(tǒng)直接操作MMU,只有運(yùn)行在HP 超特權(quán)模式下的Hypervisor 軟件才有對(duì)MMU直接訪問的權(quán)限.Hypervisor 將對(duì)MMU 的操作抽象成hypervisor API 供客戶機(jī)OS 調(diào)用完成相應(yīng)MMU 的操作.MMU 相關(guān)的重要Hypervisor API 如表1所示[5].
表1 MMU 相關(guān)重要Hypevisor API
MMU 輔助下的TLB 缺失處理成為hypervisor虛擬化機(jī)制的重要內(nèi)容,也是引入虛擬化代價(jià)的重要瓶頸.根據(jù)MMU 設(shè)置的不同,對(duì)于TLB 缺失的處理有以下兩種方式:
1)在MMU 打開Hardware Tablewalk(HWTW)支持的情況下,由HWTW 硬件訪問TSB,在TSB 中查找相應(yīng)的映射信息進(jìn)而填充TLB;
2)TLB 缺失的處理也可以完全由軟件實(shí)現(xiàn),通過配置MMU,可以使HWTW 無效;
HWTW 根據(jù)TSB 配置寄存器的信息完成TSB的正確訪問,具體過程如下:
1)根據(jù)TSB 配置寄存器和虛擬地址計(jì)算TSB內(nèi)可能TTE 的物理地址.
2)HWTW 獲取TTE 將TTE 內(nèi)的VPN、Context ID 與虛擬地址的VPN、Context ID 進(jìn)行比對(duì).
3)如果Context ID、虛擬頁號(hào)匹配,則從TTE內(nèi)獲取該VPN 對(duì)應(yīng)的RPN;否則在下一個(gè)TSB 配置寄存器指示的TSB 內(nèi)進(jìn)行查找.
4)在TSB 配置寄存器內(nèi)的ra_not_pa 被置為1的情況下,HWTW 將獲取的RPN 翻譯成物理頁號(hào)PPN.RPN 到PPN 的翻譯需要Real Range 寄存器和Physical Offset 寄存器的支持,它們完全由Hypervisor 維護(hù).如果RPN 在Real Range 寄存器的支持下得到翻譯,HWTW 返回PPN 的TTE,繼而將TTE 填入TLB;如RPN 未能轉(zhuǎn)換,則產(chǎn)生Real_address_mmu_miss 異常.
5)HWTW 將在每個(gè)有效的TSB 進(jìn)行查找直到找到一個(gè)匹配的TTE 或?qū)⑺械腡SB 查找完為止.
6)如果沒有TTE 得到匹配,硬件觸發(fā)data_access_MMU_miss 或instruction_access_MMU _miss異常.
此外,UltraSPARC T2 處理器還可以通過配置MMU 使HWTW 失效,此時(shí)TLB 缺失的處理就完全由軟件實(shí)現(xiàn),典型TLB 缺失軟件處理過程如下:
1)在HWTW 無效的請(qǐng)情況下TLB 缺失根據(jù)是指令還是數(shù)據(jù)訪存會(huì)觸發(fā)名為fast_instruction_access_MMU_miss 或fast_data_ access_miss 的異常.
2)異常首先由Hypervisor 捕獲,如果訪存的地址是虛擬地址,Hypervisor 將該異常移交給上層的客戶機(jī)操作系統(tǒng)處理.
3)客戶機(jī)操作系統(tǒng)使用軟件的方式查找TSB,如果相應(yīng)TTE 不存在,繼續(xù)調(diào)用相應(yīng)的處理程序在Software translation table 內(nèi)繼續(xù)查找.
4)獲得相應(yīng)的TTE,將TTE 提交給Hypervisor,Hypervisor 將TTE 內(nèi)的實(shí)地址轉(zhuǎn)換為物理地址之后,填充TLB.
可見,TLB 缺失的處理根據(jù)MMU 配置等情況的不同,有著不同的處理過程.TLB 缺失處理過程中的每一步都可能因某些條件不滿足而產(chǎn)生異常,包括:Instruction_real_translation_miss、data_real_transl-ation_miss、Fast_instruction_access_MMU_miss、Fast_data_access_MMU_miss、IMMU_miss_HWTW、DMMU_miss_HWTW、instruction_invalid_TSB_entry,以及data_invalid_TSB_entry 等.Ultra-SPARC T2 在TLB 缺失的處理過程中在不同情況,這些成為引入虛擬化代價(jià)的重要因素.
當(dāng)Guest OS 需要向TLB 填充地址映射時(shí),首先通過調(diào)用mmu_map_addr API 將VA和TTE tag映射信息發(fā)送給Hypervisor.Hypervisor 則根據(jù)給TTE 獲取VA 對(duì)應(yīng)的RA,并將RA 轉(zhuǎn)換為PA 生成新的TTE.最后,通過寫MMU 相應(yīng)的寄存器將其寫入TLB 中.
當(dāng)TLB 發(fā)生缺失時(shí),該異常首先被Hypervisor捕獲.由于Hypervisor 只維護(hù)RA 到PA 的映射,因此需要Guest OS 參與提供VA 到RA 映射.Hypervisor 將TLB 缺失請(qǐng)求發(fā)送給Guest OS,它則調(diào)用mmu_fault_area_conf API 通知Hypervisor 存放該信息的內(nèi)存位置.
也就是說,SPARC 處理器MMU 虛擬化代價(jià)主要來自于Guest OS 對(duì)MMU 操作時(shí)的hypercall 調(diào)用以及訪存異常的處理代價(jià).
本實(shí)驗(yàn)環(huán)境基于SUN 公司全系統(tǒng)(full system)SAM 模擬器來模擬SPARC T2 多核處理器;SAM 之上加載Hypervisor 虛擬化層,在hypervisor之上運(yùn)行Solaris 操作系統(tǒng)和應(yīng)用.本文通過對(duì)hypervisor和SAM 大量修改,來捕獲系統(tǒng)執(zhí)行時(shí)觸發(fā)的hypercall,并對(duì)相關(guān)代價(jià)進(jìn)行記錄.測(cè)試基準(zhǔn)選擇qsort和basicmath,實(shí)驗(yàn)結(jié)果如圖2所示.
圖2 虛擬化代價(jià)評(píng)測(cè)
實(shí)驗(yàn)表明,對(duì)于這兩個(gè)測(cè)試基準(zhǔn),DRT (data_real_ translation _ miss),HWTW (IMMU _ miss _HWTW)和MAP(mmu_map_addr)成為引入虛擬化代價(jià)的重要因素,三者引入的總代價(jià)在10-4 數(shù)量級(jí).這說明SPARC T2 MMU 虛擬化引入可忽略的代價(jià),獲得滿意效果.
本文對(duì)SPARC T2 處理器MMU 內(nèi)存管理單元虛擬化機(jī)制進(jìn)行深入研究,對(duì)虛擬化引入的代價(jià)因素進(jìn)行分析.分析表明:MMU 虛擬化代價(jià)主要來自于Guest OS 對(duì)MMU 操作時(shí)hypercall 調(diào)用以及訪存異常的處理代價(jià).其中data_real_translation_miss,IMMU_miss_HWTW和mmu_ map_addr 等hypervisor API 成為引入虛擬化代價(jià)的重要因素.實(shí)驗(yàn)表明MMU 支持下虛擬化機(jī)制引入了可忽略的開銷,獲得滿意效果.
[1]CREASY R J.The Origin of theVM/370 Time-sharing System[J].IBM Journal of Research and Development,1981,25(5):480-490.
[2]劉曉亮.基于虛擬化技術(shù)的云計(jì)算平臺(tái)架構(gòu)[J].信息科技,2011(23):188.
[3]復(fù)旦大學(xué)并行處理研究所,英特爾開源軟件中心.系統(tǒng)虛擬化原理與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2009:185-250.
[4]DAVID L W.OpenSPARC Internals[M].USA:SUN Microsystems Inc.,2008:23-24.
[5]Ultra SPARC.Virtual Machine Specification (The sun4v architecture and Hypervisor API specification),Revision 1.0[M].USA:SUN Microsystems Inc.,2006.
哈爾濱商業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版)2012年4期