[導(dǎo)讀]作者簡介???王柏生??資深技術(shù)專家,先后就職于中科院軟件所、紅旗Linux和百度,現(xiàn)任百度主任架構(gòu)師。在操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、云計算、自動駕駛等相關(guān)領(lǐng)域耕耘多年,有著豐富的實踐經(jīng)驗。著有暢銷書《深度探索Linux操作系統(tǒng)》(2013年出版)。謝廣軍??計算機專業(yè)博士...
作者簡介
王柏生 資深技術(shù)專家,先后就職于中科院軟件所、紅旗Linux和百度,現(xiàn)任百度主任架構(gòu)師。在操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、云計算、自動駕駛等相關(guān)領(lǐng)域耕耘多年,有著豐富的實踐經(jīng)驗。著有暢銷書《深度探索Linux操作系統(tǒng)》(2013年出版)。
謝廣軍 計算機專業(yè)博士,畢業(yè)于南開大學(xué)計算機系。資深技術(shù)專家,多年的IT行業(yè)工作經(jīng)驗?,F(xiàn)擔(dān)任百度智能云副總經(jīng)理,負責(zé)云計算相關(guān)產(chǎn)品的研發(fā)。多年來一直從事操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、大數(shù)據(jù)、云計算等相關(guān)領(lǐng)域的研發(fā)工作,實踐經(jīng)驗豐富。
本文內(nèi)容節(jié)選自《深度探索Linux虛擬化技術(shù)》,已獲得機械工業(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個條件:
(1)等價性,即VMM需要在宿主機上為虛擬機模擬出一個本質(zhì)上與物理機一致的環(huán)境。虛擬機在這個環(huán)境上運行與其在物理機上運行別無二致,除了可能因為資源競爭或者VMM的干預(yù)導(dǎo)致在虛擬環(huán)境中表現(xiàn)上略有差異,比如虛擬機的I/O、網(wǎng)絡(luò)等因宿主機的限速或者多個虛擬機共享資源,導(dǎo)致速度可能要比獨占物理機的慢一些。
(2)高效性,即虛擬機指令執(zhí)行的性能與其在物理機上運行相比并無明顯損耗。該標(biāo)準(zhǔn)要求虛擬機中的絕大部分指令無須VMM干預(yù)而直接運行在物理CPU上,比如我們在x86架構(gòu)上通過Qemu運行的ARM系統(tǒng)并不是虛擬化,而是仿真(Emulator)。
(3)資源控制,即VMM完全控制系統(tǒng)資源。由VMM控制協(xié)調(diào)宿主機資源給各個虛擬機,而不能由虛擬機控制了宿主機的資源。
陷入和模擬模型
為了滿足GeraldJ. Popek和Robert P. Goldberg提出的滿足虛擬化的3個條件,一個典型的解決方案是Trap andEmulate模型。
一般來說,處理器可以歸結(jié)為兩種運行模式:系統(tǒng)模式和用戶模式。相應(yīng)的,CPU的指令也分為特權(quán)指令和非特權(quán)指令。特權(quán)指令只能在系統(tǒng)模式運行,如果特權(quán)指令運行在用戶模式就將觸發(fā)處理器異常。操作系統(tǒng)將內(nèi)核運行在系統(tǒng)模式,因為內(nèi)核需要管理系統(tǒng)資源,需要運行特權(quán)指令,而普通的用戶程序則運行在用戶模式。
在虛擬化場景下,虛擬機的用戶程序仍然運行在用戶模式,但是虛擬機的內(nèi)核將運行在用戶模式,這種方式稱為Ring Compression。在這種方式下,虛擬機中的非特權(quán)指令直接運行在處理器上,滿足了Popek和Goldberg提出的虛擬化標(biāo)準(zhǔn)中高效的要求,即指令的大部分無須VMM干預(yù)直接在處理器上運行。但是,當(dāng)虛擬機執(zhí)行特權(quán)指令時,因為是在用戶模式執(zhí)行特權(quán)指令,將觸發(fā)處理器異常,從而陷入到VMM中,由VMM代理虛擬機完成系統(tǒng)資源的訪問,即所謂的模擬(emulate)。如此,又滿足了Popek和Goldberg提出的虛擬化標(biāo)準(zhǔn)中VMM控制系統(tǒng)資源的要求,虛擬機將不會因為可以直接運行特權(quán)指令而修改宿主機的資源,從而破壞宿主機的環(huán)境。
x86架構(gòu)虛擬化的障礙
Gerald J. Popek和Robert P. Goldberg指出,修改系統(tǒng)資源的,或者在不同模式下行為有不同表現(xiàn)的,都屬于敏感指令。在虛擬化場景下,VMM需要監(jiān)測到這些敏感指令。一個支持虛擬化的體系架構(gòu)的敏感指令都屬于特權(quán)指令,即在非特權(quán)級別執(zhí)行這些敏感指令時,CPU會拋出異常,進入VMM的異常處理函數(shù),從而實現(xiàn)了控制VM訪問敏感資源的目的。
但是,x86架構(gòu)恰恰不能滿足Gerald J. Popek和Robert P. Goldberg定義的這個準(zhǔn)則,且并不是所有的敏感指令都是特權(quán)指令,有些敏感指令在非特權(quán)模式下執(zhí)行時并不會拋出異常,此時VMM就無法攔截或者處理VM的行為。以修改FLAGS寄存器中的IF(interrupt flag)為例,我們首先使用指令pushfd將寄存器FLAGS的內(nèi)容壓到棧中,然后將棧頂?shù)腎F清0,最后使用popf指令從棧中恢復(fù)FLAGS寄存器。如果將虛擬機內(nèi)核運行在ring 1,x86的CPU并不會拋出異常,而只是默默地忽略指令popfd,因此虛擬機關(guān)閉IF的目的并沒有生效。
有人提出半虛擬化的方式,即修改Guest的代碼,但是這不符合虛擬化的透明準(zhǔn)則。后來,人們提出了二進制翻譯的方式,包括靜態(tài)翻譯和動態(tài)翻譯。靜態(tài)翻譯就是在運行前,掃描整個可執(zhí)行文件,對敏感指令進行翻譯,重新形成一個新的文件。靜態(tài)翻譯是有其局限性的,必須提前處理,而且有些指令只有在運行時才產(chǎn)生的副作用,無法靜態(tài)處理。于是,動態(tài)翻譯應(yīng)運而生,即在運行時以代碼塊為單元動態(tài)地修改二進制代碼。動態(tài)翻譯在很多VMM中得到應(yīng)用,而且優(yōu)化的效果非常不錯。
VMX擴展
雖然程序員們從軟件層面采用了多種方案去解決x86架構(gòu)在虛擬化方面的問題,但是軟件層的解決方案除了額外的開銷外,也給VMM的實現(xiàn)帶來了巨大的復(fù)雜性。于是,Intel嘗試從硬件層面解決這個問題。Intel并沒有將那些非特權(quán)的敏感指令修改為特權(quán)指令,因為并不是所有的特權(quán)指令都需要Trap and Emulate。我們舉個典型的例子,每當(dāng)操作系統(tǒng)內(nèi)核切換進程時,都會切換cr3寄存器,使其指向當(dāng)前運行進程的頁表。當(dāng)使用影子頁表進行GVA到HPA的映射時,需要捕獲Guest的每一次設(shè)置cr3寄存器的操作,VMM模塊使其指向影子頁表。而當(dāng)啟用了硬件層面的EPT支持后,cr3仍然指向Guest的進程頁表,無須捕捉Guest設(shè)置cr3寄存器的操作,也就是說,雖然寫cr3寄存器是特權(quán)指令,但是其不需要陷入VMM。
Intel開發(fā)了VT技術(shù)支持虛擬化,為CPU增加了Virtual-Machine Extensions,簡稱為VMX。一旦啟動了CPU的VMX支持,CPU將提供2種運行模式:VMX Root Mode和VMX non-Root Mode,每一種模式都支持ring0 ~ ring3。VMM運行在VMX RootMode,除了支持VMX外,VMX Root Mode和普通的模式并無本質(zhì)區(qū)別。VM運行在VMX non-Root Mode,Guest無須再采用Ring Compression方式,Guest kernel可以直接運行在VMX non-Root Mode的ring0,如圖1所示。
圖1 VMX運行模式
處在VMX RootMode的VMM可以通過執(zhí)行CPU提供的虛擬化指令VMLaunch切換到VMX non-Root Mode,因為這個過程相當(dāng)于進入Guest[3] ,所以通常也被稱為VM entry。當(dāng)Guest內(nèi)部執(zhí)行了敏感指令,比如某些I/O操作后,將觸發(fā)CPU發(fā)生陷入的動作,從VMX non-Root Mode切換回VMX Root Mode,這個過程相當(dāng)于退出VM,所以也稱為VM exit。然后VMM將對Guest 的操作進行模擬。相比于Ring Compression方式,即將Guest的內(nèi)核也運行在用戶模式(ring 1 ~ ring 3)的方式,支持VMX擴展的CPU[4] :
(1)運行于Guest模式時,Guest用戶空間的系統(tǒng)調(diào)用直接陷入Guest模式的內(nèi)核空間,而不是再陷入到Host模式的內(nèi)核空間。
(2)對于外部中斷,因為需要讓VMM控制系統(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)指令都會導(dǎo)致處于Guest模式的CPU發(fā)生VM exit,僅當(dāng)運行敏感指令時才會導(dǎo)致CPU從Guest模式陷入Host模式,因為有的特權(quán)指令并不需要由VMM介入處理。
如同一個CPU可以分時運行多個任務(wù)一樣,每個任務(wù)有自己的上下文,由調(diào)度器在調(diào)度時切換上下文,從而實現(xiàn)同一個CPU同時運行多個任務(wù)。在VMX擴展下,同一個物理CPU“一人分飾多角”,分時運行著Host及Guest,在不同模式間按需切換,因此,不同模式也需要保存自己的上下文。為此,VMX設(shè)計了一個保存上下文的數(shù)據(jù)結(jié)構(gòu):VMCS。每一個Guest都有一個VMCS實例,當(dāng)物理CPU加載了不同的VMCS時,將運行不同的Guest,,如圖2所示。
圖2 多個Guest切換
VMCS中主要保存著兩大類數(shù)據(jù),一類是狀態(tài),包括Host的和Guest的,另外一類是控制Guest運行時的行為。
(1)Guest-state area,保存虛擬機狀態(tài)的區(qū)域。當(dāng)發(fā)生VM exit時,Guest的態(tài)保存在這個區(qū)域;當(dāng)VM entry時,這些狀態(tài)將被裝載到CPU中。這些都是硬件層面的自動行為,VMM無須編碼干預(yù)。
(2)Host-state area,保存宿主機狀態(tài)的區(qū)域。當(dāng)發(fā)生VM exit時,CPU自動從VMCS裝載這些狀態(tài)到物理CPU;當(dāng)VM entry時,CPU自動將狀態(tài)保存到這個區(qū)域。
(3)VM-exit information fields。當(dāng)虛擬機發(fā)生VM exit時,VMM需要知道導(dǎo)致VM exit的原因,然后才能對癥下藥,進行相應(yīng)的模擬操作。為此,CPU會自動將Guest退出的原因保存在這個區(qū)域,供VMM使用。
(4)VM-execution control fields。這個區(qū)域中的各種字段控制著虛擬機運行時的一些行為,比如設(shè)置Guest運行時訪問cr3時是否觸發(fā)VM exit;控制VM entry與exit時的行為的VM-entry control fields和VM-exitcontrol fields。我們不再一一列出細節(jié),讀者如有需要可以查閱Intel手冊。
在創(chuàng)建VCPU時,KVM模塊將為每個VCPU申請一個VMCS,每次CPU準(zhǔn)備切入Guest模式時,將設(shè)置其VMCS指針指向即將切入的Guest對應(yīng)的VMCS實例:
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)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
蘇州2022年10月17日 /美通社/ -- 如今,數(shù)字中國的發(fā)展浪潮正在向千行百業(yè)推進,數(shù)字技術(shù)與實體經(jīng)濟的融合越來越緊密。為更好地實現(xiàn)數(shù)字技術(shù)與千行百業(yè)的深度融合,近年來,互聯(lián)網(wǎng)行業(yè)創(chuàng)新多種技術(shù)手段以促進千...
關(guān)鍵字:
機器人
數(shù)字化
虛擬化
儀表盤
濟南2022年10月14日 /美通社/ -- 近日,浪潮新基建成功通過CMMI(軟件能力成熟度集成模型)三級認證并正式獲得資質(zhì)證書。繼2021年組建后,僅一年時間就斬獲全球軟件領(lǐng)域最權(quán)威的認證之一,標(biāo)志著浪潮新基建在技術(shù)...
關(guān)鍵字:
軟件
新基建
智慧城市
模型
北京2022年10月13日 /美通社/ -- 近日,中科寒武紀(jì)科技股份有限公司(以下簡稱"寒武紀(jì)")的思元370系列智能加速卡與浪潮AIStation智能業(yè)務(wù)生產(chǎn)創(chuàng)新平臺完成兼容性適配認證,...
關(guān)鍵字:
STATION
加速卡
AI
模型
蘇州2022年10月13日 /美通社/ -- 北京時間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日訊)近日,昆侖芯(北京)科技有限公司的第二代云端通用人工智能計算處理器昆侖芯2代AI芯片及AI加速卡與飛槳完成III級兼容性測試,兼容性表現(xiàn)良好。 產(chǎn)品兼容性證明 本次...
關(guān)鍵字:
人工智能
加速卡
處理器
模型
來見識下這位95后的手工大神。據(jù)媒體報道,山東青島一女生耗時一個月,使用10斤巧克力,復(fù)刻了《武林外傳》里的小院,堪稱神還原。女孩介紹,大大小小的物件超過200件,每一個小物件都是用巧克力、翻糖和糯米紙做的,模型長度大概...
關(guān)鍵字:
模型
北京2022年9月27日 /美通社/ -- 近期,為助力中小企業(yè)創(chuàng)新發(fā)展,承接"828 B2B企業(yè)節(jié)"成就好生意,成為好企業(yè)的愿景。軟通動力著力打造了"917轉(zhuǎn)型"企動日主題峰會,會上發(fā)布了一系列新品和解決方案,面向多個...
關(guān)鍵字:
DM
數(shù)字化
大數(shù)據(jù)
模型
濟南2022年9月23日 /美通社/ -- 近日,浪潮城市信息模型( CIM)基礎(chǔ)平臺V1.0正式發(fā)布。該產(chǎn)品綜合應(yīng)用數(shù)字孿生、物聯(lián)網(wǎng)、5G、區(qū)塊鏈、大數(shù)據(jù)等技術(shù),實現(xiàn)城市治理各環(huán)節(jié)全程管控、智能協(xié)同,強化城市...
關(guān)鍵字:
模型
智慧城市
指揮調(diào)度
BSP
(全球TMT2022年9月23日訊)近日,浪潮城市信息模型(CIM)基礎(chǔ)平臺V1.0正式發(fā)布。該產(chǎn)品綜合應(yīng)用數(shù)字孿生、物聯(lián)網(wǎng)、5G、區(qū)塊鏈、大數(shù)據(jù)等技術(shù),實現(xiàn)城市治理各環(huán)節(jié)全程管控、智能協(xié)同,強化城市全生命周期管理,助...
關(guān)鍵字:
模型
編碼
大數(shù)據(jù)
區(qū)塊鏈
深圳2022年9月16日 /美通社/ -- 針對聯(lián)邦學(xué)習(xí)全局模型的版權(quán)保護問題,微眾銀行AI團隊聯(lián)合上海交通大學(xué)在人工智能學(xué)術(shù)期刊《IEEE模式分析與機器智能匯刊》(IEEE T-PAMI,IEEE Trans...
關(guān)鍵字:
模型
IP
神經(jīng)網(wǎng)絡(luò)
IEEE
上海2022年9月6日 /美通社/ -- 9月3日上午,《"東數(shù)西算"戰(zhàn)略下綠色智算中心產(chǎn)業(yè)發(fā)展研究報告》重磅發(fā)布。該報告由國家信息中心與燧原科技深度合作,聯(lián)合慶陽市人民政府、之江實驗室、中國能建共同...
關(guān)鍵字:
數(shù)字經(jīng)濟
安防
模型
編寫
(全球TMT2022年9月5日訊)9月2日,2022世界人工智能大會(WAIC2022)期間,黑芝麻智能首席市場營銷官楊宇欣受邀在“軟硬協(xié)同賦能產(chǎn)業(yè)未來專題論壇”上發(fā)表主題演講,以黑芝麻智能與飛槳合作為例,分享大算力芯...
關(guān)鍵字:
A10
系列芯片
模型
AI
上海2022年9月5日 /美通社/ -- 9月2日,2022世界人工智能大會(WAIC2022)期間,黑芝麻智能首席市場營銷官楊宇欣受邀在“軟硬協(xié)同賦能產(chǎn)業(yè)未來專題論壇”上發(fā)表主題演講,以黑芝麻智能與飛槳合作為例,分享大...
關(guān)鍵字:
自動駕駛
模型
AI
APOLLO
全新店鋪形象,為當(dāng)?shù)貎和?、家庭和樂高愛好者帶來升級玩樂體驗 長沙2022年9月3日 /美通社/ -- 今日,樂高®授權(quán)專賣店長沙星沙萬象匯正式重裝開業(yè)。作為長沙首家新形象品牌零售店,新店將為當(dāng)?shù)貎和⒓议L和樂高...
關(guān)鍵字:
樂高
模型
數(shù)字化
CREATION
北京2022年9月1日 /美通社/ -- 百奧賽圖(北京)醫(yī)藥科技股份有限公司(“百奧賽圖”,股票代碼:02315.HK)宣布公司正式在香港聯(lián)合交易所主板掛牌上市。各級政府領(lǐng)導(dǎo)、股東代表、中介機構(gòu)、合作伙伴及員工代表等出...
關(guān)鍵字:
模型
ICE
生物技術(shù)
管線
上海2022年8月31日 /美通社/ -- 今天,菲仕蘭中國再獲"亞洲最佳職場"認證。這是菲仕蘭中國連續(xù)第二年榮獲"亞洲最佳職場"認證。作為亞洲規(guī)模最大的員工體驗調(diào)研之一,該獎項通...
關(guān)鍵字:
DIAMOND
WIN
模型
IO
北京2022年8月29日 /美通社/ -- 伴隨著云、大數(shù)據(jù)、AI等創(chuàng)新技術(shù)的發(fā)展普及,企業(yè)信息化應(yīng)用系統(tǒng)以及應(yīng)用環(huán)境都變得越來越復(fù)雜,但縱觀全球市場,大型機、小型機的市場持續(xù)萎縮,越來越多的企業(yè)選擇高性價比、...
關(guān)鍵字:
SCALE
虛擬化
AN
JAVA
深圳2022年8月26日 /美通社/ -- 2022年8月31日,一年一度的TCT 亞洲展即將召開。在這場 3D 打印與增材制造的革新盛會中,深圳快造科技有限公司(Snapmaker)將攜兩款新品與觀眾見面,持續(xù)講述關(guān)于...
關(guān)鍵字:
MAKER
TC
BSP
模型
北京2022年8月23日 /美通社/ -- 8月16日,百度飛槳?人工智能產(chǎn)業(yè)創(chuàng)新應(yīng)用產(chǎn)業(yè)鏈專項賽決賽圓滿收官。決賽邀請了來自百度、藍馳創(chuàng)投、奇績創(chuàng)壇等單位的5名評審專家參加會議,對參賽項目進行了評審。 百度飛槳-人工...
關(guān)鍵字:
人工智能
大賽
創(chuàng)客
模型
北京2022年8月22日 /美通社/ -- 前言: 在企業(yè)數(shù)字化轉(zhuǎn)型的今天,數(shù)據(jù)已經(jīng)成為企業(yè)賴以生存的基礎(chǔ)。數(shù)據(jù)的丟失或者損壞將會給企業(yè)帶來無法估量的損失。因此如何進行數(shù)據(jù)保護與保障數(shù)據(jù)一致性成為必須面對的挑戰(zhàn)...
關(guān)鍵字:
內(nèi)存
虛擬化
OPENSTACK
OS