0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

虛擬化技術(shù)—CPU虛擬化

冬至子 ? 來(lái)源:天翼云開(kāi)發(fā)者社區(qū) ? 作者:謝**悅 ? 2023-06-06 15:47 ? 次閱讀

物理機(jī)器是由CPU,內(nèi)存和I/O設(shè)備等一組資源構(gòu)成的實(shí)體。虛擬機(jī)也一樣,由虛擬CPU,虛擬內(nèi)存和虛擬I/O設(shè)備等組成。VMM(VM Monitor)按照與傳統(tǒng)OS并發(fā)執(zhí)行用戶進(jìn)程的相似方式,仲裁對(duì)所有共享資源的訪問(wèn)。本文將分別討論CPU虛擬化、內(nèi)存虛擬化和I/O虛擬化技術(shù)的原理和實(shí)現(xiàn)。

在虛擬化的平臺(tái)上,虛擬機(jī)(guest VM)所使用的多個(gè)虛擬CPU(以下稱(chēng)vCPU)可能是共享同一個(gè)物理CPU(以下稱(chēng)pCPU)的。VMM負(fù)責(zé)vCPU的調(diào)度,當(dāng)一個(gè)vCPU被調(diào)度到獲得pCPU的使用權(quán)后,基于該vCPU運(yùn)行的guest OS又可以調(diào)度OS中的各個(gè)線程/進(jìn)程了。也就是說(shuō),guest OS中的各個(gè)線程/進(jìn)程分時(shí)復(fù)用了vCPU,而各個(gè)vCPU又分時(shí)復(fù)用了pCPU。

為了從硬件上提供對(duì)vCPU調(diào)度和切換的支持,Intel推出了被稱(chēng)為VT-x(Virtualization Technology for x86)的CPU虛擬化擴(kuò)展技術(shù),用戶可通過(guò)VMXON/VMXOFF指令打開(kāi)/關(guān)閉這個(gè)功能。和Intel亦敵亦友的AMD也推出了被稱(chēng)為AMD-V的對(duì)應(yīng)技術(shù)。

Linux中,從用戶空間trap到內(nèi)核空間可以通過(guò)system call或者interrupt/exception。以system call基于x86的實(shí)現(xiàn)為例,早期x86提供的trap方法是int 0x80這樣的software interrupt機(jī)制,而后改成了SYSENTER/SYSEXIT的指令對(duì),現(xiàn)在則已經(jīng)被速度更快的SYSCALL/SYSRET取代了。

類(lèi)似地,在VT-x中,從guest VM進(jìn)入VMM(這個(gè)過(guò)程被稱(chēng)為VM exit)通常有三種方式:

1)執(zhí)行VMCALL指令,這種方式被稱(chēng)為hyper call,跟執(zhí)行SYSCALL指令實(shí)現(xiàn)的system call原理差不多。

2)發(fā)生了硬件中斷或軟件異常。

3)guest VM執(zhí)行了一些敏感指令。有一些敏感指令并不會(huì)產(chǎn)生VM exit,比如SYSENTER;有一些敏感指令則可以根據(jù)下面將要介紹的VM executation control fields配置來(lái)選擇是否產(chǎn)生VM exit。

進(jìn)入VMM就意味著從non-root mode進(jìn)入了root mode,反之,從VMM返回guest VM(這個(gè)過(guò)程被稱(chēng)為VM entry)則是重新回到了non-root mode,mode的切換意味著上下文(context)的保存和恢復(fù)。

上下文其實(shí)是個(gè)難以定義的概念,它是從CPU的角度引出的,簡(jiǎn)單地說(shuō),上下文就是程序(進(jìn)程/中斷)運(yùn)行時(shí)所需要的寄存器的最小集合,這些寄存器的后面可能代表著程序運(yùn)行的一類(lèi)資源。

上下文切換是指程序從一種狀態(tài)切換到另一種狀態(tài)(比如從用戶態(tài)切換到內(nèi)核態(tài)),或者從一個(gè)程序切換到另一個(gè)程序(比如進(jìn)程切換)時(shí),導(dǎo)致上下文相關(guān)寄存器的值變化的行為。對(duì)于上下文切換時(shí)不需要改變的寄存器,也可以說(shuō)它不是該程序的上下文。

VMCS

在Linux中,一個(gè)進(jìn)程的相關(guān)信息保存在task_struct中。虛擬機(jī)的上下文比進(jìn)程的上下文更為復(fù)雜,在VT-x中,由VMCS(Virtual-Machine Control data Structures)負(fù)責(zé)保存vCPU需要的相關(guān)狀態(tài)和上下文信息。

VMCS在使用時(shí)需要和pCPU綁定。一個(gè)pCPU可以對(duì)應(yīng)多個(gè)vCPU,而一個(gè)vCPU對(duì)應(yīng)一個(gè)VMCS,但在任意給定時(shí)刻,一個(gè)pCPU上只能運(yùn)行一個(gè)vCPU(就像在多線程調(diào)度中,某一時(shí)刻,一個(gè)CPU上只能運(yùn)行一個(gè)線程一樣)。

因此,一個(gè)pCPU只能綁定一個(gè)VMCS,一個(gè)VMCS也只能與一個(gè)pCPU綁定,可分別通過(guò)VMPTRLD/VMCLEAR指令建立/解除兩者的綁定關(guān)系。VMCS存放在內(nèi)存中,一個(gè)VMCS占據(jù)4KB大小,由6個(gè)區(qū)域組成:

1)Guest state area,用于保存CPU在non-root mode下運(yùn)行時(shí)的狀態(tài)。當(dāng)發(fā)生VM exit的時(shí)候,CPU將自己當(dāng)前的狀態(tài)保存到guest state area中,當(dāng)發(fā)生VM entry的時(shí)候,guest state area保存的狀態(tài)將被自動(dòng)加載到CPU中。

其實(shí)也不用一口氣將所有寄存器的值都恢復(fù),反正都是保存在VMCS中的,可以等到該寄存器真正被guest使用到時(shí)再恢復(fù),這就是LazySave/Restore,其基本思想是盡量將寄存器的保存/恢復(fù)延遲到最后一刻,減少無(wú)用功,提高上下文切換的效率。這種思想在Linux的實(shí)現(xiàn)中也比比皆是,比如copy on write, demand paging等,拖延癥也不見(jiàn)得是件壞事哈。

2)Host state area,用于保存CPU在root mode下運(yùn)行時(shí)的狀態(tài)。需要保存的寄存器和guest state area是差不多的,但是保存/恢復(fù)的過(guò)程是剛好反過(guò)來(lái)的。

3)VM executation control fields,用于控制non-root模式下CPU的行為。出于優(yōu)化的目的,VMM可以讓某些敏感指令不產(chǎn)生VM exit,以減少mode切換帶來(lái)的上下文開(kāi)銷(xiāo),而這就是由VM execution control來(lái)實(shí)現(xiàn)的。

比如讀取timestamp的RDTSC指令,在一些延時(shí)函數(shù)的實(shí)現(xiàn)中,該指令會(huì)被頻繁使用,如果每次guest執(zhí)行該指令的時(shí)候都trap到VMM,那系統(tǒng)開(kāi)銷(xiāo)就太大了,這時(shí)VMM可以選擇每隔一段時(shí)間讀取物理CPU真實(shí)的 timestamp值,然后填寫(xiě)guest 的timestamp虛擬寄存器,來(lái)達(dá)到模擬RDTSC指令的效果。

4)VM exit control fields,用于規(guī)定VM exit時(shí)CPU的行為,比如是否應(yīng)答外部中斷。

5)VM exit information fields。VMM除了通過(guò)VM exit control fields來(lái)控制VM exit的行為,還需要知道VM exit的相關(guān)信息(比如trap的具體原因),這些信息就是保存在VM exit information fields中的。

6)VM entry control fields,用于控制VM entry的過(guò)程,比如后續(xù)的文章要介紹的中斷注入。

VM executation control可理解為what to trap,就是哪些event會(huì)引起trap,哪些不會(huì)。VM exit control可理解為how to trap,VM exit information則可理解為why to trap。讀寫(xiě)VMCS這段內(nèi)存空間需要使用專(zhuān)門(mén)的VMREAD和VMWRITE指令。

小結(jié)一下,一個(gè)完整的VT-x使用流程是這樣的:首先需要通過(guò)CPUID指令檢查當(dāng)前CPU是否支持虛擬化擴(kuò)展。如果支持,則通過(guò)VMXON使能VT-x,建立VMCS并通過(guò)VMPTRLD綁定物理CPU。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120375
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    593

    瀏覽量

    27397
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    917

    瀏覽量

    28202
  • 硬件中斷
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    6843
  • VMM
    VMM
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    10073
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 云計(jì)算:6.3 CPU虛擬-類(lèi)虛擬

    cpu云計(jì)算虛擬
    Mr_haohao
    發(fā)布于 :2022年10月15日 13:23:46

    Linux上的虛擬技術(shù)歷史回顧

    虛擬技術(shù)的應(yīng)用十分廣泛. 當(dāng)前虛擬技術(shù)主要關(guān)注于服務(wù)器的
    發(fā)表于 07-22 07:18

    幾種主要的虛擬技術(shù)有什么不同?

    虛擬技術(shù)作為建設(shè)綠色數(shù)據(jù)中心的一項(xiàng)重要技術(shù),一直在不斷發(fā)展完善,其應(yīng)用領(lǐng)域包括操作系統(tǒng)、服務(wù)器、存儲(chǔ)以及網(wǎng)絡(luò)。網(wǎng)絡(luò)的虛擬
    發(fā)表于 08-14 06:52

    有關(guān)虛擬機(jī)及虛擬技術(shù)的幾點(diǎn)詮注

    虛擬機(jī)及虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)及虛擬
    發(fā)表于 06-22 18:04 ?36次下載

    虛擬機(jī)及虛擬技術(shù)

    虛擬機(jī)及虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)及虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    CPU虛擬技術(shù)

    CPU虛擬技術(shù)             
    發(fā)表于 12-24 10:58 ?684次閱讀

    虛擬技術(shù)的應(yīng)用

    虛擬技術(shù)具有可以減少服務(wù)器的過(guò)度提供、提高設(shè)備利用率、減少I(mǎi)T的總體投資、增強(qiáng)提供IT環(huán)境的靈活性、可以共享資源等優(yōu)點(diǎn),但虛擬
    的頭像 發(fā)表于 01-02 16:15 ?1.3w次閱讀

    虛擬技術(shù)有哪些

    本視頻主要詳細(xì)介紹了虛擬技術(shù)有哪些,分別有CPU虛擬、網(wǎng)絡(luò)
    的頭像 發(fā)表于 01-02 16:25 ?3.9w次閱讀

    CPU虛擬助力將會(huì)給云計(jì)算帶來(lái)什么

    虛擬技術(shù)是一套解決方案,完整的情況需要CPU、主板芯片組、BIOS和軟件的支持,例如虛擬機(jī)監(jiān)視器軟件或者某些操作系統(tǒng)本身。
    發(fā)表于 01-02 14:10 ?667次閱讀

    服務(wù)器虛擬技術(shù)到底是什么

    是PowerKVM;以及AIX虛擬PowerVM,支持vSCSI和NPIV兩種技術(shù)虛擬出系統(tǒng)叫VIOS)。今天的內(nèi)容覆蓋了CPU
    發(fā)表于 06-10 08:00 ?0次下載
    服務(wù)器<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術(shù)</b>到底是什么

    服務(wù)器虛擬技術(shù)是什么,常見(jiàn)虛擬架構(gòu)有哪些

    服務(wù)器虛擬技術(shù)是什么?對(duì)于服務(wù)器虛擬技術(shù)其實(shí)應(yīng)用是比較廣泛的,它主要是將任何的一種形式的資源
    的頭像 發(fā)表于 09-01 16:51 ?7875次閱讀

    I/O軟件模擬虛擬和類(lèi)虛擬

    最復(fù)雜的部分,因?yàn)樯婕暗?b class='flag-5'>CPU、操作系統(tǒng)、Hypervisor以及I/O設(shè)備的相互配合。I/O虛擬也經(jīng)歷了從軟件模擬虛擬、類(lèi)
    的頭像 發(fā)表于 10-13 11:09 ?2639次閱讀

    I/O虛擬及Virtio接口介紹

    I/O虛擬是計(jì)算機(jī)虛擬最復(fù)雜的部分,因?yàn)樯婕暗?b class='flag-5'>CPU、操作系統(tǒng)、Hypervisor以及I/O設(shè)備的相互配合。I/O
    的頭像 發(fā)表于 10-26 17:21 ?4236次閱讀

    虛擬技術(shù)是什么 虛擬技術(shù)介紹

    利用率的思路,從而實(shí)現(xiàn)簡(jiǎn)化管理,優(yōu)化資源等目的的解決方案,就叫做虛擬技術(shù)。  以下是一些業(yè)界標(biāo)準(zhǔn)組織對(duì)虛擬的定義。  “
    發(fā)表于 07-19 11:26 ?1次下載

    云計(jì)算中的虛擬技術(shù)應(yīng)用

    云計(jì)算中的虛擬技術(shù)是一種將計(jì)算機(jī)物理實(shí)體(如服務(wù)器、存儲(chǔ)設(shè)備、網(wǎng)絡(luò)設(shè)備)通過(guò)軟件技術(shù)劃分為多個(gè)虛擬實(shí)體的
    的頭像 發(fā)表于 10-24 09:22 ?697次閱讀