zoukankan      html  css  js  c++  java
  • virtio、vhost和 vhost-user

    1. virtio:针对Linux的I/O的虚拟化框架


    在虚机中,可以通过qemu模拟e1000网卡,这样的经典网卡一般各种客户操作系统都会提供inbox驱动,所以从兼容性上来看,使用类似e1000的模拟网卡是非常一个不错的选择。
    但是,e1000网卡上也包含了复杂的io端口,寄存器,缓存配置,虚拟机每次收发包都会引起更多的io和mmio操作,使得虚拟机频繁的陷出,最终导致网络性能不佳。
    为了解决上述全虚拟化的性能问题,IBM在2005年提出了virtio, 虚拟机中的半虚拟化前端驱动和主机上的后端服务简单的使用virtqueue共享队列交换数据,大幅的减少了e1000模拟时复杂的io操作,从而可以较大程度的提升虚拟网络性能。


    virtio是qemu的半虚拟化驱动,guest使用virtio driver将请求发送给virtio-backend。

     virtio是qemu的半虚拟化驱动,guest使用virtio driver将请求发送给virtio-backend。

    virtio的io路径:
        guest设置好tx
        kick host
        guest陷出到kvm
        kvm从内核切换到用户态的qemu进程
        qemu将tx数据投递到tap设备

    2. vhost

    vhost技术对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以在内核态得到处理。

    图中描述了vhost的io路径: guest发出中断信号退出kvm,kvm直接和vhost-net.ko通信,然后由vhost-net.ko访问tap设备。 这样网络数据只需要经过从用户态到内核态的一次切换,就可以完成数据的传输。大大提高了虚拟网卡的性能。 由于这个技术中vhost-backend在内核中,所以也被叫做vhost-kernel。

    vhost的io路径:
        guest设置好tx
        kick host
        guest陷出到kvm
        vhost-net将tx数据投递到tap设备

    3.Vhost-user

    随着技术的发展,将网络数据放入用户态处理将可以得到更灵活的形式。在原有的vhost架构中,进行了改动,增加了 一种新的vhost-backend,叫做vhost-user。

    vhost-user的io路径:
        guest设置好tx
        kick host
        guest陷出到kvm
        kvm将通知vhost-backend
        vhost-backend将tx数据直接发送到nic设备

    vhost-user的提交者是Luke Gorrie,他也是snabbswitch的作者。从图上可以看到vhost-backend从原来咋kernel中的vhost-net 变成了用户空间的snabbswitch。 snabbswitch直接接管物理网卡的驱动,从而直接控制网络信息的输入输出。

    snabbswitch主要使用了下面的技术来提高性能

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

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

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

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

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

    来源:
        https://blog.csdn.net/hbuxiaofei/article/details/106744467
  • 相关阅读:
    windows线程消息通信和处理 PostThreadMessage和PeekMessage GetMessage
    如何:对 Windows 窗体控件进行线程安全调用(转载自msdn)
    How to: Develop a Simple Windows Forms Control(转载)
    《Effective C#》 翻译札记(转载)
    对制造者线程和使用者线程进行同步
    用户模式与内核模式(转)
    焊接技巧
    TextBox控件滚动条自动下拉(转)
    books
    CODE::BLOCKS GLUT 完整开发包
  • 原文地址:https://www.cnblogs.com/drchen/p/15337248.html
Copyright © 2011-2022 走看看