KVM
virtio
virtio是linux下的半虛擬化框架,半虛擬化相對于全虛擬化而已意荤,即虛機需要感知當前的虛擬化狀態(tài),通過虛機中的driver配合host上的device進行通信實現(xiàn)全功能的虛擬化,主要作用在于:1)統(tǒng)一的驅(qū)動阻肿,之前各個虛擬化系統(tǒng)vmware,xen沮尿,kvm都有自己的塊設備丛塌,網(wǎng)絡設備的驅(qū)動较解;2)提供統(tǒng)一接口實現(xiàn)緩存buffer的發(fā)布和使用;3)設備發(fā)現(xiàn)和配置赴邻。
其中virtqueue作為guest os內(nèi)存的一部分用來實現(xiàn)前后端(guest os和qemu)的連接印衔,virtqueue的內(nèi)存分布內(nèi)部通過vring的一個數(shù)據(jù)結(jié)構(gòu)來提煉。用戶通過get_buf和kick實現(xiàn)數(shù)據(jù)從guest os向qemu的寫入姥敛,通過get_buf實現(xiàn)數(shù)據(jù)從qemu的讀取奸焙。
有興趣可以閱讀想法提出者?Rusty Russell?的論文?https://ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf
回到之前的對比,guest virtio driver通過訪問port地址空間向qemu的virtio device發(fā)送IO發(fā)起消息彤敛。而設備通過讀寫irqfd或者IOCTL fd_vm將I/O的完成情況通知給Guest的驅(qū)動与帆。irqfd和ioeventfd是KVM為用戶程序基于內(nèi)核eventfd機制提供的通知機制,以實現(xiàn)異步的IO處理(這樣發(fā)起IO請求的vcpu將不會阻塞)墨榄。guest通過kvm提供的通知機制向qemu發(fā)送I/O消息玄糟,從guest切換到kvm,再由kvm切換到用戶空間的qemu進程袄秩,qemu完成對設備的讀寫茶凳。
vhost
相比于virtio減少了一次上下文切換(host切回到guest),vhost-net負責將虛機的報文從NIC發(fā)出播揪。
vhost-user
vhost-user的提交者是Luke Gorrie贮喧,他也是snabbswitch的作者。vhost-backend從原來kernel中的vhost-net變成了用戶空間的snabbswitch猪狈,snabbswitch直接接管物理網(wǎng)卡的驅(qū)動箱沦,從而直接控制網(wǎng)絡信息的輸入輸出。snabbswitch主要使用了下面的技術來提高性能:
- 采用了大頁來作為host和vm之間通信的內(nèi)存空間
- 用戶態(tài)操作網(wǎng)卡雇庙,使用類似于netmap的zero copy技術來加速對物理設備的訪問
- 使用numa技術谓形,加快中斷響應速率
值得一提的是使用snabbswitch后,不用再使用原來的tap設備模擬的網(wǎng)卡疆前。
使用vhost-user技術寒跳,從虛擬機到host上實現(xiàn)了數(shù)據(jù)的zero copy(通過大頁共享),host到NIC的zero copy(snabbswitch實現(xiàn)的驅(qū)動)竹椒,能進一步加快數(shù)據(jù)的傳輸童太。
DPDK support
DPDK便是一個在用戶態(tài)可以直接操作物理網(wǎng)卡的庫函數(shù),它和vhost-user結(jié)合便可以實現(xiàn)類似于snabbswitch一樣性能強勁的用戶態(tài)交換機了胸完。2015年6月16日dpdk vhost-user ports特性合并到了ovs社區(qū)书释,dpdkvhostuser port將創(chuàng)建unix socket將虛機的virtio-net虛擬網(wǎng)卡的網(wǎng)卡緩沖區(qū)共享給物理機上的ovs port設備。
Virtio specification
virtqueue
包括三部分赊窥,分別是描述符表爆惧,可用環(huán)(buffer),已用環(huán)(buffer):
? Descriptor Table
? Available Ring
? Used Ring
參閱:
1. qemu-kvm. git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
2. Linux-2.6{/virt/kvm/*, arch/x86/kvm/*, drivers/virtio/*, drivers/block/virtio_blk.c, drivers/vhost/*}
3. Intel? Virtualization Technology for Directed I/O
4. Intel? 64 and IA-32 Architectures Software Developer’s Manual 3B.
5. Towards Virtual Passthrough I/O on Commodity Devices. 2008.
6. kvm: the Linux Virtual Machine Monitor. 2007.
7. virtio: Towards a De-Facto Standard For Virtual I/O Devices. 2008
8. High Performance Network Virtualization with SR-IOV. 2010.
9. QEMU, a Fast and Portable Dynamic Translator. 2005.
10. https://blog.csdn.net/wj_j2ee/article/details/7978259
11. https://blog.csdn.net/quqi99/article/details/47321023
12.?https://blog.csdn.net/qq_15437629/article/details/77899905