日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

virtio-blk简介[转]

發(fā)布時(shí)間:2023/12/13 综合教程 46 生活家
生活随笔 收集整理的這篇文章主要介紹了 virtio-blk简介[转] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:

本博客歡迎轉(zhuǎn)發(fā),但請(qǐng)保留原作者信息!
新浪微博:@孔令賢HW;
博客地址:http://lingxiankong.github.io/
內(nèi)容系本人學(xué)習(xí)、研究和總結(jié),如有雷同,實(shí)屬榮幸!


virtio-blk是虛擬化KVM平臺(tái)下虛擬磁盤的一種實(shí)現(xiàn)方式,也是存儲(chǔ)虛擬化所研究的主要對(duì)象之一。在KVM平臺(tái)下,qemu程序負(fù)責(zé)模擬一臺(tái)PC的整個(gè)工作過程,是虛擬化技術(shù)的精髓所在。大家知道,在物理PC中,磁盤是必不可少的設(shè)備,系統(tǒng)、應(yīng)用程序的安裝和數(shù)據(jù)的存放都離不開磁盤。在虛擬化場景下,qemu自然也需要提供對(duì)磁盤的模擬。那qemu到底是如何模擬磁盤的?virtio-blk又是一種什么樣的虛擬磁盤呢?

qemu對(duì)設(shè)備的模擬可以分成兩類:全模擬和半模擬。全模擬即完全模擬物理設(shè)備的工作過程,使得運(yùn)行在虛擬機(jī)上的軟件完全感知不到自身運(yùn)行環(huán)境的差異。例如qemu中實(shí)現(xiàn)了對(duì)IDE磁盤、LSI控制器(其上可接SCSI磁盤)等物理存儲(chǔ)設(shè)備的模擬,原先運(yùn)行在物理機(jī)上的IDE驅(qū)動(dòng)、LSI驅(qū)動(dòng)或應(yīng)用程序不做任何改動(dòng)即可運(yùn)行在虛擬機(jī)中。因此,全模擬的優(yōu)點(diǎn)比較明顯,即不用提供專門針對(duì)虛擬化場景的設(shè)備驅(qū)動(dòng),完全可以復(fù)用物理環(huán)境下的驅(qū)動(dòng)程序。那么全模擬有何缺點(diǎn)呢?全模擬時(shí),虛擬機(jī)內(nèi)部驅(qū)動(dòng)會(huì)頻繁訪問虛擬機(jī)IO端口,KVM平臺(tái)下會(huì)導(dǎo)致大量的陷入和陷出操作;另外虛擬機(jī)內(nèi)外數(shù)據(jù)傳輸時(shí)只能通過以字節(jié)為單位的拷貝方式進(jìn)行,無法直接采用共享內(nèi)存的方式,因此存在較大的訪問性能問題。

為解決全虛擬化在性能上的問題,半模擬技術(shù)應(yīng)運(yùn)而生。它構(gòu)造了一種虛擬化環(huán)境所獨(dú)有的存儲(chǔ)設(shè)備,因此需要在虛擬機(jī)內(nèi)部安裝特定的驅(qū)動(dòng)程序才能正常驅(qū)使該設(shè)備進(jìn)行工作。通常我們稱虛擬機(jī)內(nèi)部的驅(qū)動(dòng)為前端驅(qū)動(dòng),稱負(fù)責(zé)實(shí)現(xiàn)其功能模擬的程序(KVM平臺(tái)下即為qemu程序)為后端程序,半模擬技術(shù)也常常被叫做前后端技術(shù)。采用半摸擬技術(shù)后,配合前端驅(qū)動(dòng),虛擬化設(shè)備完全可以采用全新的事件通知和數(shù)據(jù)傳遞機(jī)制進(jìn)而大幅提升性能,例如在virtio-blk磁盤中,采用io_event_fd進(jìn)行前端到后端通知,采用中斷注入方式實(shí)現(xiàn)后端到前端的通知,并通過IO環(huán)(vring)進(jìn)行數(shù)據(jù)的共享。

至此,主要說明了virtio-blk產(chǎn)生的背景及其價(jià)值。附上qemu所模擬的PC(基于intel i440fx主板架構(gòu))的組成結(jié)構(gòu)圖,以作為后續(xù)深入分析的基礎(chǔ)。

qemu模擬實(shí)現(xiàn)的virtio-blk設(shè)備的組成結(jié)構(gòu)如下圖所示:

從圖中可見,virtio-blk設(shè)備“內(nèi)嵌”在一塊PCI設(shè)備板(即virtio-blk-pci設(shè)備)上,其內(nèi)部通過一條virtio總線連接PCI接口和virtio-blk設(shè)備。為何要將virtio-blk設(shè)備設(shè)計(jì)成這樣呢?

qemu模擬的所有設(shè)備都通過總線相連,總線下可掛接若干設(shè)備,橋接設(shè)備又可生成子總線;整個(gè)PC只有一條根總線(即Main System Bus,對(duì)應(yīng)前端總線FSB)。因此,qemu內(nèi)模擬的所有設(shè)備構(gòu)成一棵總線與設(shè)備交替衍生的樹。virito-blk是一種什么樣的設(shè)備?又該連接在什么總線上呢?雖然virtio-blk僅在虛擬化環(huán)境下存在,但如果完全憑空創(chuàng)造一種新的設(shè)備類型,那前端驅(qū)動(dòng)開發(fā)將是一個(gè)很大的挑戰(zhàn)。PCI設(shè)備是PC中最為常見的一種設(shè)備類別,且有較為完善的規(guī)范說明,因此可將virtio-blk設(shè)備模擬成一種PCI設(shè)備,這樣可復(fù)用虛擬機(jī)內(nèi)部已有的PCI驅(qū)動(dòng)。

virtio-blk設(shè)備從功能上來看,核心功能就是實(shí)現(xiàn)虛擬機(jī)內(nèi)外的事件通知和數(shù)據(jù)傳遞:虛擬機(jī)內(nèi)部的前端驅(qū)動(dòng)準(zhǔn)備好待處理的IO請(qǐng)求和數(shù)據(jù)存放空間并通知后端;虛擬機(jī)外部的后端程序獲取待處理的請(qǐng)求并交給真正的IO子系統(tǒng)處理,完成后將處理結(jié)果通知前端。實(shí)際上,除了虛擬磁盤,虛擬網(wǎng)卡也完全可以復(fù)用這套機(jī)制,從而實(shí)現(xiàn)半模擬的網(wǎng)絡(luò)前后端(virtio-net)。如果將virtio-blk或virtio-net設(shè)計(jì)成不同類型的PCI設(shè)備,那么前端驅(qū)動(dòng)中會(huì)存在大量關(guān)于事件通知和數(shù)據(jù)傳遞的重復(fù)代碼。

綜上分析,virtio-blk首先是PCI設(shè)備;其次為了復(fù)用半模擬中通用的事件通知和數(shù)據(jù)傳遞機(jī)制,抽象出一類virtio-pci設(shè)備,其內(nèi)部通過virtio總線連接不同的virtio設(shè)備。這樣virtio-blk設(shè)備就通過virtio總線連接到virtio-blk-pci設(shè)備的PCI接口上,virtio-net也通過virtio總線連接到virtio-net-pci設(shè)備的PCI接口上。可能有的人會(huì)問,為何通過設(shè)備的抽象就能復(fù)用前端驅(qū)動(dòng)的代碼?在virtio-blk-pci或virtio-net-pci前端驅(qū)動(dòng)加載時(shí),最初識(shí)別到的都是virtio-pci設(shè)備,這樣都可調(diào)用virtio-pci驅(qū)動(dòng)進(jìn)行事件通知和數(shù)據(jù)傳遞的初始化,后續(xù)也可使用virtio-pci中相關(guān)函數(shù)進(jìn)行事件通知和數(shù)據(jù)傳遞。

因此virtio-blk完全是基于通用的virtio框架實(shí)現(xiàn)的磁盤前后端,virtio框架中最為核心的就是事件通知和數(shù)據(jù)傳遞機(jī)制。

敦品厚德 格物致知

總結(jié)

以上是生活随笔為你收集整理的virtio-blk简介[转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。