新聞中心
說一說虛擬化繞不開的IO半虛擬化
作者:kvm虛擬化 2018-01-17 15:15:22
云計(jì)算
虛擬化 QEMU-KVM作為一個(gè)VMM提供了全虛擬化環(huán)境,guest不經(jīng)過任何修改就能運(yùn)行在KVM環(huán)境中。不過KVM在IO虛擬化方面,使用QEMU純軟件的方式來模擬IO設(shè)備,效率并不高。在KVM中,要想提高IO虛擬化的效率,就要使用半虛擬化的方式:virtio。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出信宜免費(fèi)做網(wǎng)站回饋大家。
QEMU-KVM作為一個(gè)VMM提供了全虛擬化環(huán)境,guest不經(jīng)過任何修改就能運(yùn)行在KVM環(huán)境中。不過KVM在IO虛擬化方面,使用QEMU純軟件的方式來模擬IO設(shè)備,效率并不高。在KVM中,要想提高IO虛擬化的效率,就要使用半虛擬化的方式:virtio。
簡(jiǎn)單介紹全虛擬化和半虛擬化
在全虛擬化 中,guest操作系統(tǒng)運(yùn)行在VMM之上,并不知道它已被虛擬化,不需要任何更改就可以工作。相反,在半虛擬化中,guest操作系統(tǒng)不僅知道它運(yùn)行在 VMM上,還需要做修改來對(duì)接VMM的代碼。
在全虛擬化中,VMM必須模擬設(shè)備硬件,盡管這種模擬很徹底很干凈,但它效率低代碼最復(fù)雜。在半虛擬化模式中,guest和 VMM共同合作,模擬更加高效。
IO全虛擬化使用QEMU軟件模擬
1.當(dāng)虛擬機(jī)進(jìn)行I/O操作時(shí),根據(jù)《也談Intel的cpu虛擬化》我們知道,虛擬機(jī)通過VM exit將cpu控制權(quán)返回給VMM,從而陷入到root模式下的ring0內(nèi)的VMM,進(jìn)行”陷入模擬“。
2.將本次I/O請(qǐng)求的信息存放到IO共享頁,QEMU從IO共享頁讀取信息后由硬件模擬代碼來模擬出本次的IO操作,并調(diào)用內(nèi)核中的硬件驅(qū)動(dòng)把IO請(qǐng)求發(fā)送到物理硬件,完成之后將結(jié)果放回到IO共享頁。
3.KVM模塊中的捕獲代碼讀取IO共享頁中的結(jié)果,把結(jié)果返回到guest。
4.通過VM entry,guest再次獲得cpu控制權(quán),根據(jù)IO返回的結(jié)果進(jìn)行處理。
說明:VMM和guest的IO信息共享不光IO共享頁一種,還可以使用DMA。QEMU不把IO結(jié)果放到IO共享頁中,而是通過DMA將結(jié)果直接寫到guest的內(nèi)存中去,然后通過KVM模塊告訴客戶機(jī)DMA操作已經(jīng)完成。
下面這張圖(來自網(wǎng)絡(luò))是軟件模擬IO的流程圖:
IO半虛擬化virtio
guest和host使用使用virtio前后端的技術(shù)減少了guest IO時(shí)的VM Exit(guest和host的上下文切換)并且使guest和host能并行處理IO來提高throughput和減少latency。但是IO的路徑并沒有比全虛擬化技術(shù)減少。下面是virtio的IO路徑:
guest在IO請(qǐng)求時(shí),首先guest需要切換到host kernel,然后host kernel會(huì)切換到hyperisor來處理guest的請(qǐng)求,hypervisor通過系統(tǒng)調(diào)用將數(shù)據(jù)包發(fā)送到外部網(wǎng)絡(luò)后切換回host kernel,然后再切換回guest。這個(gè)長(zhǎng)IO路徑和全虛擬化時(shí)相同的,只是減少了VM exit和VM entry。
vhost
為了解決virio的IO路徑太長(zhǎng)的問題,vhost產(chǎn)生了。它是位于host kernel的一個(gè)模塊,用于和guest直接通信,所以數(shù)據(jù)交換就在guest和host kernel間進(jìn)行,減少了上下文的切換。vhost相對(duì)與virto架構(gòu),把virtio驅(qū)動(dòng)后端驅(qū)動(dòng)從用戶態(tài)放到了內(nèi)核態(tài)中(vhost的內(nèi)核模塊充當(dāng)virtiO后端驅(qū)動(dòng))
下面這張圖(來自redhat)描述了在virtio和vhost(vhost-net時(shí)vhost架構(gòu)中的網(wǎng)卡實(shí)現(xiàn))架構(gòu)下內(nèi)核的不同工作流程:
下面這張圖(來自intel)介紹了vhost工作原理:
vhost-user
vhost-user和vhost類似,只是使用一個(gè)用戶態(tài)進(jìn)程vhost-user代替了內(nèi)核中的vhost模塊。vhost-user進(jìn)程和Guset之間時(shí)通過共享內(nèi)存的方式進(jìn)行數(shù)據(jù)操作。vhost-user相對(duì)與vhost架構(gòu),把virtio驅(qū)動(dòng)后端驅(qū)動(dòng)從內(nèi)核態(tài)又放回到了用戶態(tài)中(vhost-user進(jìn)程充當(dāng)virtiO后端驅(qū)動(dòng))。
下面這張圖(來自intel)介紹了vhost-user的工作原理:
總結(jié)
io虛擬化經(jīng)歷了從全虛擬化io到半虛擬化virtio。半虛擬化的后端驅(qū)動(dòng)又經(jīng)歷了從VMM中到內(nèi)核中,從內(nèi)核中到用戶空間中的過程。
分享題目:說一說虛擬化繞不開的IO半虛擬化
當(dāng)前地址:http://fisionsoft.com.cn/article/djhcheh.html


咨詢
建站咨詢
