這篇文章主要介紹“什么是IO設(shè)備虛擬化”,在日常操作中,相信很多人在什么是IO設(shè)備虛擬化問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”什么是IO設(shè)備虛擬化”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
目前成都創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、丹江口網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
IO虛擬化是計(jì)算機(jī)虛擬化最復(fù)雜的部分,因?yàn)樯婕暗紺PU、操作系統(tǒng)、Hypervisor以及IO設(shè)備的相互配合。IO虛擬化也經(jīng)歷了從軟件模擬虛擬化、類(lèi)虛擬化向完全硬件虛擬化的轉(zhuǎn)變。
IO設(shè)備虛擬化場(chǎng)景,既要關(guān)注IO設(shè)備模擬,也要關(guān)注vCPU和虛擬IO設(shè)備的交互,許多條件交織在一起,使得整個(gè)問(wèn)題變的非常復(fù)雜。IO虛擬化性能代價(jià)主要體現(xiàn)在三個(gè)方面:驅(qū)動(dòng)訪問(wèn)設(shè)備寄存器的代價(jià);設(shè)備通過(guò)中斷和DMA訪問(wèn)驅(qū)動(dòng)的代價(jià);設(shè)備模擬本身的代價(jià)。因此,IO虛擬化性能優(yōu)化主要是通過(guò)五個(gè)角度:
減少I(mǎi)O訪問(wèn)寄存器的代價(jià):一方面是把部分IO的訪問(wèn)變成MMIO訪問(wèn),這樣就不需要陷入Hypervisor;另一方面是優(yōu)化VM-exit/VM-entry切換的代價(jià)。
減少I(mǎi)O訪問(wèn)的次數(shù):比如簡(jiǎn)化通知機(jī)制,簡(jiǎn)化虛擬化設(shè)備功能等。
優(yōu)化中斷:主要有如APIC的中斷硬件虛擬化或者不需要中斷的輪詢(xún)驅(qū)動(dòng)。
減少DMA訪問(wèn)的代價(jià):通過(guò)IOMMU等實(shí)現(xiàn)Pass Through模式。
減少設(shè)備模擬的代價(jià):則主要是通過(guò)硬件SR-IOV機(jī)制實(shí)現(xiàn)硬件設(shè)備。
如圖 3.30(a),虛擬機(jī)中看到的設(shè)備,一般是由Hypervisor模擬出來(lái)的。虛擬設(shè)備的功能,可以少于也可以多于物理的設(shè)備,甚至可以模擬出一些不存在的特性,模擬出不存在的硬件設(shè)備。通過(guò)IO軟件模擬的方式,我們稱(chēng)之為IO設(shè)備軟件模擬虛擬化。在IO軟件模擬虛擬化的解決方案中,客戶(hù)機(jī)VM要使用底層的硬件資源,需要Hypervisor來(lái)截獲每一條請(qǐng)求指令,然后模擬出這些指令的行為。我們都知道Hypervisor截獲指令的動(dòng)作就是從VM-exit,處理完模擬然后再VM-entry的過(guò)程,這個(gè)過(guò)程的代價(jià)很高,每條指令都要如此,帶來(lái)的性能開(kāi)銷(xiāo)必然是非常龐大的。
如圖 3.30(b)所示,Virtio提供的類(lèi)虛擬化方式,客戶(hù)機(jī)完成設(shè)備的前端驅(qū)動(dòng)程序,Hypervisor配合客戶(hù)機(jī)完成相應(yīng)的后端驅(qū)動(dòng)程序,這樣兩者之間通過(guò)交互機(jī)制就可以實(shí)現(xiàn)高效的虛擬化過(guò)程。
圖 3.30 IO設(shè)備虛擬化
Virtio框架如圖 3.31所示,使用Virtqueue來(lái)實(shí)現(xiàn)其IO機(jī)制,每個(gè)Virtqueue就是一個(gè)承載大量數(shù)據(jù)的Queue。VRing是Virtqueue的具體實(shí)現(xiàn)方式,針對(duì)VRing會(huì)有相應(yīng)的描述符表格進(jìn)行描述。Virtio是一個(gè)通用的驅(qū)動(dòng)和設(shè)備接口框架,基于Virtio分別實(shí)現(xiàn)了Virtio-net、Virtio-blk、Virtio-scsi等很多不同類(lèi)型的模擬設(shè)備及設(shè)備驅(qū)動(dòng)。
圖 3.31 Virtio框架
Virtio類(lèi)虛擬化比傳統(tǒng)的IO設(shè)備軟件模擬的性能優(yōu)勢(shì)體現(xiàn)在:很多控制和狀態(tài)信息不需要通過(guò)寄存器讀寫(xiě)操作來(lái)交互的,而是通過(guò)寫(xiě)入Virtqueue的相關(guān)數(shù)據(jù)結(jié)構(gòu)來(lái)讓驅(qū)動(dòng)(Driver)和設(shè)備(Device)雙方交互。并且在數(shù)據(jù)交互的時(shí)候,只需要在一定批量數(shù)據(jù)變化需要對(duì)方處理的時(shí)候才會(huì)通知對(duì)方,驅(qū)動(dòng)通知設(shè)備是通過(guò)寫(xiě)Kick寄存器,設(shè)備通知驅(qū)動(dòng)是通過(guò)中斷。
評(píng)價(jià)IO虛擬化技術(shù)的兩個(gè)指標(biāo)——性能和通用性。性能,當(dāng)然是越接近無(wú)虛擬化環(huán)境下的IO性能最好;而通用性,則是IO虛擬化對(duì)客戶(hù)操作系統(tǒng)越透明越好。要想要高性能,最直接的方法就是讓客戶(hù)機(jī)直接使用真實(shí)的硬件設(shè)備;要想要通用性,則是要用想辦法讓客戶(hù)機(jī)操作系統(tǒng)自帶的驅(qū)動(dòng)程序能夠發(fā)現(xiàn)設(shè)備并操作設(shè)備。
客戶(hù)機(jī)直接操作設(shè)備面臨兩個(gè)問(wèn)題:第一,如何讓客戶(hù)機(jī)直接訪問(wèn)到設(shè)備真實(shí)的IO地址空間(包括IO和MMIO);第二,如何讓設(shè)備的DMA直接訪問(wèn)客戶(hù)機(jī)的內(nèi)存空間。內(nèi)存硬件虛擬化的EPT技術(shù)可以解決第一個(gè)問(wèn)題。而VT-d技術(shù)則用來(lái)解決第二個(gè)問(wèn)題。VT-d技術(shù)主要是引入地址重映射(IOMMU+IOTLB),負(fù)責(zé)提供重映射和設(shè)備直接分配。從設(shè)備端的DMA訪問(wèn),都會(huì)進(jìn)入地址重映射進(jìn)行地址轉(zhuǎn)換,使得設(shè)備可以訪問(wèn)到對(duì)應(yīng)客戶(hù)機(jī)特定的內(nèi)存區(qū)域。
VT-d技術(shù)雖然可以將物理的IO設(shè)備直接透?jìng)鹘o虛擬機(jī),但是一臺(tái)計(jì)算機(jī)系統(tǒng)受限于接口,可以連的物理設(shè)備畢竟有限。因此,PCIe SR-IOV技術(shù)應(yīng)運(yùn)而生。通過(guò)PCIe SR-IOV技術(shù),一個(gè)物理IO設(shè)備可以虛擬出多個(gè)虛擬設(shè)備,分配給虛擬機(jī)使用。
如圖 3.30(c)所示,SR-IOV引入了兩個(gè)PCIe的功能類(lèi)型:
PFs(Physical Functions):包括管理SR-IOV功能在內(nèi)的所有PCIe設(shè)備。
VFs(Virtual Functions):輕量級(jí)的PCIe設(shè)備,只能進(jìn)行必要的配置和數(shù)據(jù)傳輸。
Hypervisor把VF分配給虛擬機(jī),通過(guò)IOMMU等硬件輔助技術(shù)提供的DMA數(shù)據(jù)映射,直接在虛擬機(jī)和硬件設(shè)備之間傳輸數(shù)據(jù)。
到此,關(guān)于“什么是IO設(shè)備虛擬化”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!