Virtio/Vhost是什么

Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接叫Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,virtio可以获得很好的性能,在数据中心中得到了广泛的应用。

Vhost有两种实现:内核态和用户态

内核态实现


vhost_net将部分的Virtio驱动从用户空间(其实是QEMU中)移到了kernel中,从而跳过QEMU,减少QEMU和内核之间的上下文切换开销,从而提升网络IO的性能。

通过在内核态增加了一个vhost驱动,与virtio相比,只需要进行一次用户态内核态切换(因为内核态的vhost-net.ko可以直接访问内核态的TAP设备,少了一次切换),另外,由于引入vhost技术共享了虚拟机的网卡缓冲区也省了一次数据拷贝(vhost-net.ko充当vhost backend,kvm.ko充当vhost client)。

用户态实现

vhost_user是将vhost_net驱动移动到用户态来实现零切换和零拷贝,从而进一步提升性能。一些实现了vhost backend的交换机(如snabbswitch)直接在用户态从vhost共享的虚拟机网卡缓存区virtio-ring中把网络数据进行读取,然后snabbswtich又实现了SR-IOV的物理网卡驱动直接将读到的虚拟机网络数据送到物理网卡上,从而大大提升了性能。

DPDK的实现

dpdk对虚拟化环境也是一个逐步支持的过程,不同的版本实现的功能不尽相同,具体的发展历程可以参考下图:

从最初版本的guest virtio PMD + kernel vhost_net发展至今,主机端实现用户态的vhost user,guest端采用virtio PMD。架构已经基本定型,后期的工作主要集中在性能优化和稳定性两个方面。用户态的vhost其原理和内核态的vhost-net类似,实现了用户态API,卸载了QEMU在Virtio-net上所承载的虚拟队列功能,同时基于QEMU共享内存空间、虚拟化队列的访问地址和事件文件描述符,使得vhost能够进行报文处理以及与guest通信。

DPDK的vhost包含的基本功能有:

  • virtio-net网络设备管理,包括设备的创建和销毁
  • 虚拟队列中描述符列表、可用环表和已用环表在vhost进程的虚拟地址空间的映射和解除,以及实际的数据报文缓冲区的映射和解除
  • 收到报文时,通知guest;发送报文时,接收来自guest的消息通知
  • 虚拟队列和实际的物理网卡间的报文交换。可使用VMDQ机制对报文进行分类和排序,避免软件方式的报文交换
  • virtio-net后端设备的实现以及部分新特性实现:如支持多队列,TSO,支持巨型帧等等

先看下OVS+DPDK的概念,传统的vSwitch要使用kernel来完成转发面的实现以及和物理NIC的对接;在OVS+DPDK方案中,完全bypass 内核,通过dpdk + PMD来实现之前kernel提供的功能,从而将所有的功能都一直到用户态来实现。

基于这样的方案来实现的VNFs示意图就可以如下:


扩散:

当然除了上述VNFs部署方式,还可以采用下面的方式来部署:

这种部署方式需要NIC支持SR-IOV,同时在VNF中运行VF PMD。 这种方式的优点是性能高,相当于直接从物理网卡中读取报文;缺点是对硬件有依赖,而且动态迁移比较麻烦。

来比较下在云环境不同实现方式路径(性能从左到右逐渐提升):

参考链接:https://www.redhat.com/en/blog/boosting-nfv-datapath-rhel-openstack-platform

DPDK vhost-user研究(十二)相关推荐

  1. 《深入浅出DPDK》读书笔记(十二):DPDK虚拟化技术篇(半虚拟化Virtio)

    Table of Contents 半虚拟化Virtio 132.Virtio使用场景 133.Virtio规范和原理 11.2.1 设备的配置 1. 设备的初始化 2. 设备的发现 3. 传统模式v ...

  2. (五十二):多模态情感分析研究综述_张亚洲

    (五十二):多模态情感分析研究综述_张亚洲 Abstract 1 叙述式多模态情感分析 1. 1 静态多模态情感分析(文本与图像划分为静态文档) 1. 1. 1 基于机器学习的方法 1. 1. 2 基 ...

  3. 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........

    4月18日,中国科学院官方微博发布消息,披露了这篇论文为<人机交互式机器翻译方法研究与实现>,作者是2017年毕业于中国科学院大学的工学博士黄国平. 这篇论文中情感真挚的<致谢> ...

  4. 构建之法第十,十一,十二章阅读

    第十章经典用户和场景 虽说经典场景和经典用户很有必要去研究去效仿,但是随着时间发展,新的用户新的需求不断涌现,那该怎么平衡? 第十一章软件设计与实现 软件设计过程中,如何管理设计变更呢? 第十二章用户 ...

  5. Android Studio(十二):打包多个发布渠道的apk文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  6. ROS探索总结(十)(十一)(十二)——语音控制 机器视觉 坐标系统

    ROS探索总结(十)--语音控制 如今语音识别在PC机和智能手机上炒的火热,ROS走在技术的最前沿当然也不会错过这么帅的技术.ROS中使用了CMU Sphinx和Festival开源项目中的代码,发布 ...

  7. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  8. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  9. 数字图像处理:第十二章 小波变换

    第十二章 小波变换 目录 1         引言 2         连续小波变换 3         二进小波变换 3.1      Haar变换 4         离散小波变换 4.1     ...

  10. 初中数学四十二个几何模型_【初中数学】一题贯穿初中几何

    一题贯穿初中几何 重要说明 本题是常州于新华(于特)供题,中国数学教育名师讲堂众大师巧解,扬州段广猛老师整理. 典例 (第二十五届"五羊杯"卷第19题)如图,△ABC中,∠C=90 ...

最新文章

  1. 口语学习Day4:今天带你们一起逛一下博物馆
  2. win8 查看 linux硬盘大小,如何查看显存大小_win8如何查看显存大小
  3. 1.关于QT中json数据处理和密码md5加密
  4. e.html5.qq.com,QQ群官网-开放能力
  5. thinkPhp5.1配置常量与输出
  6. MultiRow发现之旅(五)- MultiRow版俄罗斯方块(exe + 源码)
  7. win10绿联usb转串口_win10 usb转串口驱动-win10 usb转串口sb转驱动下载 PL2303 最新版 - 河东下载站...
  8. Redis底层数据结构——跳跃列表
  9. axure侧弹层遮罩_Axure实现遮罩效果
  10. 子标签获取父级Id值
  11. 打印机手动打印双面的防止顺序
  12. 网站制作教程:新手如何用PageAdmin建站系统做网站
  13. 如何使用射手影音寻找字幕
  14. 企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
  15. 用大气噪声生成Java中的随机数
  16. 防火墙产品最大吞吐量性能测试:丢包概念
  17. C语言实现秒与时间的互相转换
  18. “丧心病狂”的C语言小程序,拿去恶搞好友
  19. 利用MATLAB绘制逆发动机MAP图
  20. LoadRunner11 实现token的解析与认证

热门文章

  1. python代码画图案-python基本图形绘制
  2. 报班学python到底怎么样-学Python真的能让你找到出路吗?
  3. python搜题软件-智慧职教mooc的APPPython程序设计基础章节测验答案
  4. python培训出来的有公司要吗-Python培训班出来好找工作吗?
  5. python基础指令-python的一些基本命令
  6. python程序实例电话本-Python示例
  7. python怎么安装包-安装python第三方包
  8. python的模块的导入和包的导入
  9. hdu1.3.5 排列2
  10. LeetCode Same Tree