當(dāng)前位置:首頁 > 公眾號(hào)精選 > Linux閱碼場
[導(dǎo)讀]作者簡介???王柏生??資深技術(shù)專家,先后就職于中科院軟件所、紅旗Linux和百度,現(xiàn)任百度主任架構(gòu)師。在操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、云計(jì)算、自動(dòng)駕駛等相關(guān)領(lǐng)域耕耘多年,有著豐富的實(shí)踐經(jīng)驗(yàn)。著有暢銷書《深度探索Linux操作系統(tǒng)》(2013年出版)。謝廣軍??計(jì)算機(jī)專業(yè)博士...

作者簡介


王柏生 資深技術(shù)專家,先后就職于中科院軟件所、紅旗Linux和百度,現(xiàn)任百度主任架構(gòu)師。在操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、云計(jì)算、自動(dòng)駕駛等相關(guān)領(lǐng)域耕耘多年,有著豐富的實(shí)踐經(jīng)驗(yàn)。著有暢銷書《深度探索Linux操作系統(tǒng)》(2013年出版)。


謝廣軍 計(jì)算機(jī)專業(yè)博士,畢業(yè)于南開大學(xué)計(jì)算機(jī)系。資深技術(shù)專家,年的IT行業(yè)工作經(jīng)驗(yàn)?,F(xiàn)擔(dān)任百度智能云副總經(jīng)理,負(fù)責(zé)云計(jì)算相關(guān)產(chǎn)品的研發(fā)。多年來一直從事操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、大數(shù)據(jù)、云計(jì)算等相關(guān)領(lǐng)域的研發(fā)工作,實(shí)踐經(jīng)驗(yàn)豐富。


本文內(nèi)容節(jié)選自《深度探索Linux虛擬化技術(shù)》,已獲得機(jī)械工業(yè)出版社華章公司授權(quán)。




x86架構(gòu)CPU虛擬化



Gerald J. Popek和Robert P. Goldberg在1974年發(fā)表的論文“Formal Requirements for Virtualizable[A1] [A2]  Third Generation Architectures”中提出了符合虛擬化的3個(gè)條件:


(1)等價(jià)性,即VMM需要在宿主機(jī)上為虛擬機(jī)模擬出一個(gè)本質(zhì)上與物理機(jī)一致的環(huán)境。虛擬機(jī)在這個(gè)環(huán)境上運(yùn)行與其在物理機(jī)上運(yùn)行別無二致,除了可能因?yàn)橘Y源競爭或者VMM的干預(yù)導(dǎo)致在虛擬環(huán)境中表現(xiàn)上略有差異,比如虛擬機(jī)的I/O、網(wǎng)絡(luò)等因宿主機(jī)的限速或者多個(gè)虛擬機(jī)共享資源,導(dǎo)致速度可能要比獨(dú)占物理機(jī)的慢一些。


(2)高效性,即虛擬機(jī)指令執(zhí)行的性能與其在物理機(jī)上運(yùn)行相比并無明顯損耗。該標(biāo)準(zhǔn)要求虛擬機(jī)中的絕大部分指令無須VMM干預(yù)而直接運(yùn)行在物理CPU上,比如我們在x86架構(gòu)上通過Qemu運(yùn)行的ARM系統(tǒng)并不是虛擬化,而是仿真(Emulator)。


(3)資源控制,即VMM完全控制系統(tǒng)資源。由VMM控制協(xié)調(diào)宿主機(jī)資源給各個(gè)虛擬機(jī),而不能由虛擬機(jī)控制了宿主機(jī)的資源。



陷入和模擬模型



為了滿足GeraldJ. Popek和Robert P. Goldberg提出的滿足虛擬化的3個(gè)條件,一個(gè)典型的解決方案是Trap andEmulate模型。


一般來說,處理器可以歸結(jié)為兩種運(yùn)行模式:系統(tǒng)模式和用戶模式。相應(yīng)的,CPU的指令也分為特權(quán)指令和非特權(quán)指令。特權(quán)指令只能在系統(tǒng)模式運(yùn)行,如果特權(quán)指令運(yùn)行在用戶模式就將觸發(fā)處理器異常。操作系統(tǒng)將內(nèi)核運(yùn)行在系統(tǒng)模式,因?yàn)閮?nèi)核需要管理系統(tǒng)資源,需要運(yùn)行特權(quán)指令,而普通的用戶程序則運(yùn)行在用戶模式。


在虛擬化場景下,虛擬機(jī)的用戶程序仍然運(yùn)行在用戶模式,但是虛擬機(jī)的內(nèi)核將運(yùn)行在用戶模式,這種方式稱為Ring Compression。在這種方式下,虛擬機(jī)中的非特權(quán)指令直接運(yùn)行在處理器上,滿足了Popek和Goldberg提出的虛擬化標(biāo)準(zhǔn)中高效的要求,即指令的大部分無須VMM干預(yù)直接在處理器上運(yùn)行。但是,當(dāng)虛擬機(jī)執(zhí)行特權(quán)指令時(shí),因?yàn)槭窃谟脩裟J綀?zhí)行特權(quán)指令,將觸發(fā)處理器異常,從而陷入到VMM中,由VMM代理虛擬機(jī)完成系統(tǒng)資源的訪問,即所謂的模擬(emulate)。如此,又滿足了Popek和Goldberg提出的虛擬化標(biāo)準(zhǔn)中VMM控制系統(tǒng)資源的要求,虛擬機(jī)將不會(huì)因?yàn)榭梢灾苯舆\(yùn)行特權(quán)指令而修改宿主機(jī)的資源,從而破壞宿主機(jī)的環(huán)境。




x86架構(gòu)虛擬化的障礙



Gerald J. Popek和Robert P. Goldberg指出,修改系統(tǒng)資源的,或者在不同模式下行為有不同表現(xiàn)的,都屬于敏感指令。在虛擬化場景下,VMM需要監(jiān)測到這些敏感指令。一個(gè)支持虛擬化的體系架構(gòu)的敏感指令都屬于特權(quán)指令,即在非特權(quán)級(jí)別執(zhí)行這些敏感指令時(shí),CPU會(huì)拋出異常,進(jìn)入VMM的異常處理函數(shù),從而實(shí)現(xiàn)了控制VM訪問敏感資源的目的。


但是,x86架構(gòu)恰恰不能滿足Gerald J. Popek和Robert P. Goldberg定義的這個(gè)準(zhǔn)則,且并不是所有的敏感指令都是特權(quán)指令,有些敏感指令在非特權(quán)模式下執(zhí)行時(shí)并不會(huì)拋出異常,此時(shí)VMM就無法攔截或者處理VM的行為。以修改FLAGS寄存器中的IF(interrupt flag)為例,我們首先使用指令pushfd將寄存器FLAGS的內(nèi)容壓到棧中,然后將棧頂?shù)腎F清0,最后使用popf指令從棧中恢復(fù)FLAGS寄存器。如果將虛擬機(jī)內(nèi)核運(yùn)行在ring 1,x86的CPU并不會(huì)拋出異常,而只是默默地忽略指令popfd,因此虛擬機(jī)關(guān)閉IF的目的并沒有生效。


有人提出半虛擬化的方式,即修改Guest的代碼,但是這不符合虛擬化的透明準(zhǔn)則。后來,人們提出了二進(jìn)制翻譯的方式,包括靜態(tài)翻譯和動(dòng)態(tài)翻譯。靜態(tài)翻譯就是在運(yùn)行前,掃描整個(gè)可執(zhí)行文件,對(duì)敏感指令進(jìn)行翻譯,重新形成一個(gè)新的文件。靜態(tài)翻譯是有其局限性的,必須提前處理,而且有些指令只有在運(yùn)行時(shí)才產(chǎn)生的副作用,無法靜態(tài)處理。于是,動(dòng)態(tài)翻譯應(yīng)運(yùn)而生,即在運(yùn)行時(shí)以代碼塊為單元?jiǎng)討B(tài)地修改二進(jìn)制代碼。動(dòng)態(tài)翻譯在很多VMM中得到應(yīng)用,而且優(yōu)化的效果非常不錯(cuò)。




VMX擴(kuò)展



雖然程序員們從軟件層面采用了多種方案去解決x86架構(gòu)在虛擬化方面的問題,但是軟件層的解決方案除了額外的開銷外,也給VMM的實(shí)現(xiàn)帶來了巨大的復(fù)雜性。于是,Intel嘗試從硬件層面解決這個(gè)問題。Intel并沒有將那些非特權(quán)的敏感指令修改為特權(quán)指令,因?yàn)椴⒉皇撬械奶貦?quán)指令都需要Trap and Emulate。我們舉個(gè)典型的例子,每當(dāng)操作系統(tǒng)內(nèi)核切換進(jìn)程時(shí),都會(huì)切換cr3寄存器,使其指向當(dāng)前運(yùn)行進(jìn)程的頁表。當(dāng)使用影子頁表進(jìn)行GVA到HPA的映射時(shí),需要捕獲Guest的每一次設(shè)置cr3寄存器的操作,VMM模塊使其指向影子頁表。而當(dāng)啟用了硬件層面的EPT支持后,cr3仍然指向Guest的進(jìn)程頁表,無須捕捉Guest設(shè)置cr3寄存器的操作,也就是說,雖然寫cr3寄存器是特權(quán)指令,但是其不需要陷入VMM。


Intel開發(fā)了VT技術(shù)支持虛擬化,為CPU增加了Virtual-Machine Extensions,簡稱為VMX。一旦啟動(dòng)了CPU的VMX支持,CPU將提供2種運(yùn)行模式:VMX Root Mode和VMX non-Root Mode,每一種模式都支持ring0 ~ ring3。VMM運(yùn)行在VMX RootMode,除了支持VMX外,VMX Root Mode和普通的模式并無本質(zhì)區(qū)別。VM運(yùn)行在VMX non-Root Mode,Guest無須再采用Ring Compression方式,Guest kernel可以直接運(yùn)行在VMX non-Root Mode的ring0,如圖1所示。




圖1 VMX運(yùn)行模式



處在VMX RootMode的VMM可以通過執(zhí)行CPU提供的虛擬化指令VMLaunch切換到VMX non-Root Mode,因?yàn)檫@個(gè)過程相當(dāng)于進(jìn)入Guest[3] ,所以通常也被稱為VM entry。當(dāng)Guest內(nèi)部執(zhí)行了敏感指令,比如某些I/O操作后,將觸發(fā)CPU發(fā)生陷入的動(dòng)作,從VMX non-Root Mode切換回VMX Root Mode,這個(gè)過程相當(dāng)于退出VM,所以也稱為VM exit。然后VMM將對(duì)Guest 的操作進(jìn)行模擬。相比于Ring Compression方式,即將Guest的內(nèi)核也運(yùn)行在用戶模式(ring 1 ~ ring 3)的方式,支持VMX擴(kuò)展的CPU[4] :


(1)運(yùn)行于Guest模式時(shí),Guest用戶空間的系統(tǒng)調(diào)用直接陷入Guest模式的內(nèi)核空間,而不是再陷入到Host模式的內(nèi)核空間。


(2)對(duì)于外部中斷,因?yàn)樾枰孷MM控制系統(tǒng)的資源,所以處于Guest模式的CPU收到外部中斷,則觸發(fā)CPU從Guest模式退出到Host模式,由Host內(nèi)核處理外部中斷。處理完中斷后,再重新切入Guest模式。為了提高I/O效率,Intel支持外設(shè)透傳模式,在這種模式下,Guest可以不必產(chǎn)生VM exit,“設(shè)備虛擬化”一章將討論這種特殊方式。


(3)不再是所有的特權(quán)指令都會(huì)導(dǎo)致處于Guest模式的CPU發(fā)生VM exit,僅當(dāng)運(yùn)行敏感指令時(shí)才會(huì)導(dǎo)致CPU從Guest模式陷入Host模式,因?yàn)橛械奶貦?quán)指令并不需要由VMM介入處理。


如同一個(gè)CPU可以分時(shí)運(yùn)行多個(gè)任務(wù)一樣,每個(gè)任務(wù)有自己的上下文,由調(diào)度器在調(diào)度時(shí)切換上下文,從而實(shí)現(xiàn)同一個(gè)CPU同時(shí)運(yùn)行多個(gè)任務(wù)。在VMX擴(kuò)展下,同一個(gè)物理CPU“一人分飾多角”,分時(shí)運(yùn)行著Host及Guest,在不同模式間按需切換,因此,不同模式也需要保存自己的上下文。為此,VMX設(shè)計(jì)了一個(gè)保存上下文的數(shù)據(jù)結(jié)構(gòu):VMCS。每一個(gè)Guest都有一個(gè)VMCS實(shí)例,當(dāng)物理CPU加載了不同的VMCS時(shí),將運(yùn)行不同的Guest,,如圖2所示。



圖2 多個(gè)Guest切換



VMCS中主要保存著兩大類數(shù)據(jù),一類是狀態(tài),包括Host的和Guest的,另外一類是控制Guest運(yùn)行時(shí)的行為。


(1)Guest-state area,保存虛擬機(jī)狀態(tài)的區(qū)域。當(dāng)發(fā)生VM exit時(shí),Guest的態(tài)保存在這個(gè)區(qū)域;當(dāng)VM entry時(shí),這些狀態(tài)將被裝載到CPU中。這些都是硬件層面的自動(dòng)行為,VMM無須編碼干預(yù)。


(2)Host-state area,保存宿主機(jī)狀態(tài)的區(qū)域。當(dāng)發(fā)生VM exit時(shí),CPU自動(dòng)從VMCS裝載這些狀態(tài)到物理CPU;當(dāng)VM entry時(shí),CPU自動(dòng)將狀態(tài)保存到這個(gè)區(qū)域。


(3)VM-exit information fields。當(dāng)虛擬機(jī)發(fā)生VM exit時(shí),VMM需要知道導(dǎo)致VM exit的原因,然后才能對(duì)癥下藥,進(jìn)行相應(yīng)的模擬操作。為此,CPU會(huì)自動(dòng)將Guest退出的原因保存在這個(gè)區(qū)域,供VMM使用。


(4)VM-execution control fields。這個(gè)區(qū)域中的各種字段控制著虛擬機(jī)運(yùn)行時(shí)的一些行為,比如設(shè)置Guest運(yùn)行時(shí)訪問cr3時(shí)是否觸發(fā)VM exit;控制VM entry與exit時(shí)的行為的VM-entry control fields和VM-exitcontrol fields。我們不再一一列出細(xì)節(jié),讀者如有需要可以查閱Intel手冊。


在創(chuàng)建VCPU時(shí),KVM模塊將為每個(gè)VCPU申請(qǐng)一個(gè)VMCS,每次CPU準(zhǔn)備切入Guest模式時(shí),將設(shè)置其VMCS指針指向即將切入的Guest對(duì)應(yīng)的VMCS實(shí)例:


commit 6aa8b732ca01c3d7a54e93f4d701b8aabbe60fb7


[PATCH] kvm: userspace interface


linux.git/drivers/kvm/vmx.c


static struct kvm_vcpu *vmx_vcpu_load(structkvm_vcpu *vcpu)


{


u64phys_addr = __pa(vcpu->vmcs);


int cpu;



cpu =get_cpu();



if(per_cpu(current_vmcs, cpu) != vcpu->vmcs) {



per_cpu(current_vmcs, cpu) = vcpu->vmcs;


asmvolatile (ASM_VMX_VMPTRLD_RAX "; setna %0"


: "=g"(error) : "a"(
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

蘇州2022年10月17日 /美通社/ -- 如今,數(shù)字中國的發(fā)展浪潮正在向千行百業(yè)推進(jìn),數(shù)字技術(shù)與實(shí)體經(jīng)濟(jì)的融合越來越緊密。為更好地實(shí)現(xiàn)數(shù)字技術(shù)與千行百業(yè)的深度融合,近年來,互聯(lián)網(wǎng)行業(yè)創(chuàng)新多種技術(shù)手段以促進(jìn)千...

關(guān)鍵字: 機(jī)器人 數(shù)字化 虛擬化 儀表盤

濟(jì)南2022年10月14日 /美通社/ -- 近日,浪潮新基建成功通過CMMI(軟件能力成熟度集成模型)三級(jí)認(rèn)證并正式獲得資質(zhì)證書。繼2021年組建后,僅一年時(shí)間就斬獲全球軟件領(lǐng)域最權(quán)威的認(rèn)證之一,標(biāo)志著浪潮新基建在技術(shù)...

關(guān)鍵字: 軟件 新基建 智慧城市 模型

北京2022年10月13日 /美通社/ -- 近日,中科寒武紀(jì)科技股份有限公司(以下簡稱"寒武紀(jì)")的思元370系列智能加速卡與浪潮AIStation智能業(yè)務(wù)生產(chǎn)創(chuàng)新平臺(tái)完成兼容性適配認(rèn)證,...

關(guān)鍵字: STATION 加速卡 AI 模型

蘇州2022年10月13日 /美通社/ -- 北京時(shí)間2022年10月13日,開拓藥業(yè)(股票代碼:9939.HK),一家專注于潛在同類首創(chuàng)和同類最佳創(chuàng)新藥物研發(fā)及產(chǎn)業(yè)化的生物制藥公司,宣布其聯(lián)合美國德克薩斯大學(xué)...

關(guān)鍵字: 模型 LM EMI PD

(全球TMT2022年10月11日訊)近日,昆侖芯(北京)科技有限公司的第二代云端通用人工智能計(jì)算處理器昆侖芯2代AI芯片及AI加速卡與飛槳完成III級(jí)兼容性測試,兼容性表現(xiàn)良好。 產(chǎn)品兼容性證明 本次...

關(guān)鍵字: 人工智能 加速卡 處理器 模型

來見識(shí)下這位95后的手工大神。據(jù)媒體報(bào)道,山東青島一女生耗時(shí)一個(gè)月,使用10斤巧克力,復(fù)刻了《武林外傳》里的小院,堪稱神還原。女孩介紹,大大小小的物件超過200件,每一個(gè)小物件都是用巧克力、翻糖和糯米紙做的,模型長度大概...

關(guān)鍵字: 模型

北京2022年9月27日 /美通社/ -- 近期,為助力中小企業(yè)創(chuàng)新發(fā)展,承接"828 B2B企業(yè)節(jié)"成就好生意,成為好企業(yè)的愿景。軟通動(dòng)力著力打造了"917轉(zhuǎn)型"企動(dòng)日主題峰會(huì),會(huì)上發(fā)布了一系列新品和解決方案,面向多個(gè)...

關(guān)鍵字: DM 數(shù)字化 大數(shù)據(jù) 模型

濟(jì)南2022年9月23日 /美通社/ -- 近日,浪潮城市信息模型( CIM)基礎(chǔ)平臺(tái)V1.0正式發(fā)布。該產(chǎn)品綜合應(yīng)用數(shù)字孿生、物聯(lián)網(wǎng)、5G、區(qū)塊鏈、大數(shù)據(jù)等技術(shù),實(shí)現(xiàn)城市治理各環(huán)節(jié)全程管控、智能協(xié)同,強(qiáng)化城市...

關(guān)鍵字: 模型 智慧城市 指揮調(diào)度 BSP

(全球TMT2022年9月23日訊)近日,浪潮城市信息模型(CIM)基礎(chǔ)平臺(tái)V1.0正式發(fā)布。該產(chǎn)品綜合應(yīng)用數(shù)字孿生、物聯(lián)網(wǎng)、5G、區(qū)塊鏈、大數(shù)據(jù)等技術(shù),實(shí)現(xiàn)城市治理各環(huán)節(jié)全程管控、智能協(xié)同,強(qiáng)化城市全生命周期管理,助...

關(guān)鍵字: 模型 編碼 大數(shù)據(jù) 區(qū)塊鏈

深圳2022年9月16日 /美通社/ -- 針對(duì)聯(lián)邦學(xué)習(xí)全局模型的版權(quán)保護(hù)問題,微眾銀行AI團(tuán)隊(duì)聯(lián)合上海交通大學(xué)在人工智能學(xué)術(shù)期刊《IEEE模式分析與機(jī)器智能匯刊》(IEEE T-PAMI,IEEE Trans...

關(guān)鍵字: 模型 IP 神經(jīng)網(wǎng)絡(luò) IEEE

Linux閱碼場

174 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉