摘要:針對于同一物理節(jié)點(diǎn)上的不同虛擬機(jī)之間網(wǎng)絡(luò)網(wǎng)絡(luò)通信的特點(diǎn),本文提出并實現(xiàn)了一種基于內(nèi)存共享的KVM虛擬機(jī)網(wǎng)絡(luò)通信的方法,該方法能提高KVM網(wǎng)絡(luò)I/O的吞吐量。
關(guān)鍵詞:KVM;網(wǎng)絡(luò);優(yōu)化
中圖分類號:TP391.9 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2012) 21-0000-02
1 引言
由于虛擬化技術(shù)的不斷發(fā)展,虛擬化技術(shù)越來越多地應(yīng)用于實際環(huán)境中。虛擬機(jī)天然的隔離特性使得虛擬化技術(shù)在服務(wù)器整合、軟件調(diào)試、系統(tǒng)安全和災(zāi)難恢復(fù)等眾多方面發(fā)揮出了重要的作用,然而這種特性也使虛擬機(jī)之間的信息交互和數(shù)據(jù)傳輸變得困難。在一些虛擬化網(wǎng)絡(luò)的實際應(yīng)用中,比如網(wǎng)格計算、web服務(wù)、分布式存儲系統(tǒng)等,虛擬機(jī)之間的數(shù)據(jù)通信十分頻繁,并且這些虛擬機(jī)經(jīng)常配置在同一物理節(jié)點(diǎn)上,實際的通信過程中并不需要經(jīng)過真實的物理網(wǎng)絡(luò)。
在內(nèi)核虛擬機(jī)(Kernel-based Virtual Machine,KVM)中,對這種網(wǎng)絡(luò)通信并沒有做特別的優(yōu)化,而是將其和普通的虛擬機(jī)網(wǎng)絡(luò)通信同等對待,等待VM和宿主機(jī)操作系統(tǒng)的統(tǒng)一處理。為此,針對于同一物理節(jié)點(diǎn)上的不同虛擬機(jī)之間網(wǎng)絡(luò)網(wǎng)絡(luò)通信的特點(diǎn),本文設(shè)計并實現(xiàn)了一種基于內(nèi)存共享提高KVM網(wǎng)絡(luò)I/O吞吐量的方法。
2 KVM半虛擬化I/O框架及其網(wǎng)絡(luò)架構(gòu)
目前I/O虛擬化的實現(xiàn)主要有三種:軟件I/O全虛擬化,基于類虛擬化的I/O虛擬化,基于硬件輔助的I/O虛擬化。這三種方法在KVM的I/O虛擬化框架中都或多或少的有所體現(xiàn)。例如KVM要求物理機(jī)CPU支持Intel VT/AMD-V技術(shù),與其相應(yīng)的基于硬件輔助的I/O虛擬化技術(shù)會作為輔助手段,提高全虛擬化的QEMU提高I/O虛擬化的性能。除此之外,Russell等在2007年提出的virtio半虛擬化框架也已經(jīng)被KVM加入支持。
2.1 KVM半虛擬化I/O框架[1]
virtio是一組通用模擬設(shè)備的抽象。在KVM中,virtio是Linux內(nèi)核所提供的一個API接口,通過在Linux內(nèi)核中加入virtio抽象層,就可以通過調(diào)用virtio設(shè)計實現(xiàn)的API,實現(xiàn)為多種不同類型的VMM提供不同種類的虛擬I/O設(shè)備的目的。有了半虛擬化VMM之后,客戶操作系統(tǒng)能夠?qū)崿F(xiàn)一組通用的接口,在一組后端驅(qū)動程序之后采用特定的設(shè)備模擬。后端驅(qū)動程序不需要是通用的,因為它們只實現(xiàn)前端所需的行為。圖1為virtio結(jié)構(gòu)示意圖。