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

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

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

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

冬至子 ? 來源:天翼云開發(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)程的相似方式,仲裁對所有共享資源的訪問。本文將分別討論CPU虛擬化、內(nèi)存虛擬化和I/O虛擬化技術(shù)的原理和實(shí)現(xiàn)。

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

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

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

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

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

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

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

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

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

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

VMCS

在Linux中,一個進(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在使用時需要和pCPU綁定。一個pCPU可以對應(yīng)多個vCPU,而一個vCPU對應(yīng)一個VMCS,但在任意給定時刻,一個pCPU上只能運(yùn)行一個vCPU(就像在多線程調(diào)度中,某一時刻,一個CPU上只能運(yùn)行一個線程一樣)。

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

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    31

    文章

    5294

    瀏覽量

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

    關(guān)注

    4

    文章

    590

    瀏覽量

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

    關(guān)注

    1

    文章

    904

    瀏覽量

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

    關(guān)注

    0

    文章

    11

    瀏覽量

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

    關(guān)注

    0

    文章

    11

    瀏覽量

    10043
收藏 人收藏

    評論

    相關(guān)推薦

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

    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ù)器、存儲以及網(wǎng)絡(luò)。網(wǎng)絡(luò)的虛擬
    發(fā)表于 08-14 06:52

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

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

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

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

    CPU虛擬技術(shù)

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

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

    虛擬技術(shù)具有可以減少服務(wù)器的過度提供、提高設(shè)備利用率、減少IT的總體投資、增強(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.8w次閱讀

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

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

    服務(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ù)是什么,常見虛擬架構(gòu)有哪些

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

    I/O軟件模擬虛擬和類虛擬

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

    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 ?3950次閱讀

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

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

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

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