全部課程
發(fā)布時間: 2020-06-30 14:27:40
?云計算存儲虛擬化之virtio?
默認情況下使用QEMU模擬I/O的情況下,當客戶機中的設備驅(qū)動程序(device driver)發(fā)起I/O操作請求之時,KVM模塊中的I/O操作捕獲代碼會攔截這次I/O請求,然后經(jīng)過處理后將本次I/O請求的信息存放到I/O共享頁,并通知用戶控件的QEMU程序。QEMU模擬程序獲得I/O操作的具體信息之后,交由硬件模擬代碼來模擬出本次的I/O操作,完成之后,將結(jié)果放回到I/O共享頁,并通知KVM模塊中的I/O操作捕獲代碼。最后,由KVM模塊中的捕獲代碼讀取I/O共享頁中的操作結(jié)果,并把結(jié)果返回到客戶機中。當然,這個操作過程中客戶機作為一個QEMU進程在等待I/O時也可能被阻塞。另外,當客戶機通過DMA(Direct Memory Access)訪問大塊I/O之時,QEMU模擬程序?qū)⒉粫巡僮鹘Y(jié)果放到I/O共享頁中,而是通過內(nèi)存映射的方式將結(jié)果直接寫到客戶機的內(nèi)存中去,然后通過KVM模塊告訴客戶機DMA操作已經(jīng)完成。
QEMU模擬I/O設備的方式,其優(yōu)點是可以通過軟件模擬出各種各樣的硬件設備,包括一些不常用的或者很老很經(jīng)典的設備(如4.5節(jié)中提到RTL8139的網(wǎng)卡),而且它不用修改客戶機操作系統(tǒng),就可以實現(xiàn)模擬設備在客戶機中正常工作。在KVM客戶機中使用這種方式,對于解決手上沒有足夠設備的軟件開發(fā)及調(diào)試有非常大的好處。而它的缺點是,每次I/O操作的路徑比較長,有較多的VMEntry、VMExit發(fā)生,需要多次上下文切換(context switch),也需要多次數(shù)據(jù)復制,所以它的性能較差。
然而使用Virtio可以提高這個數(shù)據(jù)處理的速度。
中前端驅(qū)動(frondend,如virtio-blk、virtio-net等)是在客戶機中存在的驅(qū)動程序模塊,而后端處理程序(backend)是在QEMU中實現(xiàn)的[2]。在這前后端驅(qū)動之間,還定義了兩層來支持客戶機與QEMU之間的通信。其中,“virtio”這一層是虛擬隊列接口,它在概念上將前端驅(qū)動程序附加到后端處理程序。一個前端驅(qū)動程序可以使用0個或多個隊列,具體數(shù)量取決于需求。例如,virtio-net網(wǎng)絡驅(qū)動程序使用兩個虛擬隊列(一個用于接收,另一個用于發(fā)送),而virtio-blk塊驅(qū)動程序僅使用一個虛擬隊列。虛擬隊列實際上被實現(xiàn)為跨越客戶機操作系統(tǒng)和hypervisor的銜接點,但它可以通過任意方式實現(xiàn),前提是客戶機操作系統(tǒng)和virtio后端程序都遵循一定的標準,以相互匹配的方式實現(xiàn)它。而virtio-ring實現(xiàn)了環(huán)形緩沖區(qū)(ring buffer),用于保存前端驅(qū)動和后端處理程序執(zhí)行的信息,并且它可以一次性保存前端驅(qū)動的多次I/O請求,并且交由后端去動去批量處理,最后實際調(diào)用宿主機中設備驅(qū)動實現(xiàn)物理上的I/O操作,這樣做就可以根據(jù)約定實現(xiàn)批量處理而不是客戶機中每次I/O請求都需要處理一次,從而提高客戶機與hypervisor信息交換的效率。
Virtio半虛擬化驅(qū)動的方式,可以獲得很好的I/O性能,其性能幾乎可以達到和native(即:非虛擬化環(huán)境中的原生系統(tǒng))差不多的I/O性能。所以,在使用KVM之時,如果宿主機內(nèi)核和客戶機都支持virtio的情況下,一般推薦使用virtio達到更好的性能。當然,virtio的也是有缺點的,它必須要客戶機安裝特定的Virtio驅(qū)動使其知道是運行在虛擬化環(huán)境中,且按照Virtio的規(guī)定格式進行數(shù)據(jù)傳輸,不過客戶機中可能有一些老的Linux系統(tǒng)不支持virtio和主流的Windows系統(tǒng)需要安裝特定的驅(qū)動才支持Virtio。不過,較新的一些Linux發(fā)行版(如RHEL 6.3、Fedora 17等)默認都將virtio相關(guān)驅(qū)動編譯為模塊,可直接作為客戶機使用virtio,而且對于主流Windows系統(tǒng)都有對應的virtio驅(qū)動程序可供下載使用。
這樣的話。節(jié)省了VMM的開銷,提升了性能。?
上一篇: 【Java技術(shù)】?SpringBoot整合JDBC
下一篇: 【人工智能】機器學習訓練方法—梯度下降