美文网首页
SPDK (part 3, virtio/vhost基础)

SPDK (part 3, virtio/vhost基础)

作者: 拖鞋花短裤 | 来源:发表于2018-09-12 17:14 被阅读0次

    KVM

    KVM

    virtio

    virtio是linux下的半虚拟化框架,半虚拟化相对于全虚拟化而已,即虚机需要感知当前的虚拟化状态,通过虚机中的driver配合host上的device进行通信实现全功能的虚拟化,主要作用在于:1)统一的驱动,之前各个虚拟化系统vmware,xen,kvm都有自己的块设备,网络设备的驱动;2)提供统一接口实现缓存buffer的发布和使用;3)设备发现和配置。

    virtio layer

    其中virtqueue作为guest os内存的一部分用来实现前后端(guest os和qemu)的连接,virtqueue的内存分布内部通过vring的一个数据结构来提炼。用户通过get_buf和kick实现数据从guest os向qemu的写入,通过get_buf实现数据从qemu的读取。

    virtqueue数据结构

    有兴趣可以阅读想法提出者 Rusty Russell 的论文 https://ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf

    回到之前的对比,guest virtio driver通过访问port地址空间向qemu的virtio device发送IO发起消息。而设备通过读写irqfd或者IOCTL fd_vm将I/O的完成情况通知给Guest的驱动。irqfd和ioeventfd是KVM为用户程序基于内核eventfd机制提供的通知机制,以实现异步的IO处理(这样发起IO请求的vcpu将不会阻塞)。guest通过kvm提供的通知机制向qemu发送I/O消息,从guest切换到kvm,再由kvm切换到用户空间的qemu进程,qemu完成对设备的读写。

    KVM+QEMU

    vhost

    相比于virtio减少了一次上下文切换(host切回到guest),vhost-net负责将虚机的报文从NIC发出。

    vhost

    vhost-user

    vhost-user的提交者是Luke Gorrie,他也是snabbswitch的作者。vhost-backend从原来kernel中的vhost-net变成了用户空间的snabbswitch,snabbswitch直接接管物理网卡的驱动,从而直接控制网络信息的输入输出。snabbswitch主要使用了下面的技术来提高性能:

    - 采用了大页来作为host和vm之间通信的内存空间

    - 用户态操作网卡,使用类似于netmap的zero copy技术来加速对物理设备的访问

    - 使用numa技术,加快中断响应速率

    值得一提的是使用snabbswitch后,不用再使用原来的tap设备模拟的网卡。

    使用vhost-user技术,从虚拟机到host上实现了数据的zero copy(通过大页共享),host到NIC的zero copy(snabbswitch实现的驱动),能进一步加快数据的传输。

    vhost-user

    DPDK support

    DPDK便是一个在用户态可以直接操作物理网卡的库函数,它和vhost-user结合便可以实现类似于snabbswitch一样性能强劲的用户态交换机了。2015年6月16日dpdk vhost-user ports特性合并到了ovs社区,dpdkvhostuser port将创建unix socket将虚机的virtio-net虚拟网卡的网卡缓冲区共享给物理机上的ovs port设备。

    Virtio specification

    virtqueue

    包括三部分,分别是描述符表,可用环(buffer),已用环(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

    相关文章

      网友评论

          本文标题:SPDK (part 3, virtio/vhost基础)

          本文链接:https://www.haomeiwen.com/subject/pchbgftx.html