DPDK virtio-user
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
virtio-user 是 DPDK 针对特定场景提出的一种解决方案,它主要有两种场景的用途,一种是用于 DPDK 应用容器对 virtio 的支持,这是 DPDK v16.07 开始支持的;另一种是用于和内核通信,这是 DPDK v17.02 推出的。
virtio_user 用于容器网络
我们知道,对于虚拟机,有 virtio 这套半虚拟化的标准协议来指导虚拟机和宿主机之间的通信,但对于容器的环境,直接沿用 virtio 是不行的,原因是虚拟机是通过 Qemu 来模拟的,Qemu 会将它虚拟出的整个 KVM 虚拟机的信息共享给宿主机,但对于 DPDK 加速的容器化环境来说显然是不合理的。因为 DPDK 容器与宿主机的通信只用得到虚拟内存中的大页内存部分,其他都是用不到的,全部共享也没有任何意义,DPDK 主要基于大页内存来收发数据包的。
所以,virtio_user 其实就是在 virtio PMD 的基础上进行了少量修改形成的,简单来说,就是添加大页共享的部分逻辑,并精简了整块共享内存部分的逻辑。
有兴趣可以对照 /driver/net/virtio 中的代码和 DPDK virtio_user 代码,其实大部分是相同的。
从 DPDK 的角度看,virtio_user 是作为一个虚拟设备(vdev)来加载的,它充当的是一个 virtio 前端驱动,与之对应的后端通信驱动,是用户态的 vhost_user,在使用的时候,我们只需要定义好相应的适配接口即可,如下:
vhost 和 vhost_user 本质上是采用共享内存的 IPC 方式,通过在 host 端创建 vhost_user 共享内存文件,然后 virtio_user 启动的时候指定该文件即可,如:
1)首先创建 vhost_user 共享内存文件
--vdev 'eth_vhost_user0,iface=/tmp/vhost_user0'
2)启动 virtio_user 指定文件路径
--vdev=virtio_user0,path=/tmp/vhost_user0
virtio_user 作为 exception path 用于与内核通信
virtio_user 的一个用途就是作为 exception path 用于与内核通信。我们知道,DPDK 是旁路内核的转包方案,这也是它高性能的原因,但有些时候从 DPDK 收到的包(如控制报文)需要丢到内核网络协议栈去做进一步的处理,这个路径在 DPDK 中就被称为 exception path。
在这之前,已经存在几种 exception path 的方案,如传统的 Tun/Tap,KNI(Kernel NIC Interface),AF_Packet 以及基于 SR-IOV 的 Flow Bifurcation。这些方案就不做过多介绍了,感兴趣的可看 DPDK 官网,上面都有介绍。
和容器网络的方案使用 vhost_user 作为后端驱动一样,要使得 virtio_user 和内核通信,只需加载内核模块 vhost.ko,让它充当的是 virtio_user 的后端通信驱动即可。
所以,我们可以看到,其实这两种方案本质上是一样,只是换了个后端驱动而已,这也是 virtio 的优势所在,定义一套通用的接口标准,需要什么类型的通信方式只需加载相应驱动即可,改动非常少,扩展性非常高。
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
DPDK virtio-user的更多相关文章
- 探秘DPDK Virtio的不同路径
什么是Vhost/Virtio Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接叫Virtio, 在宿主 ...
- VNF网络性能提升解决方案及实践
VNF网络性能提升解决方案及实践 2016年7月 作者: 王智民 贡献者: 创建时间: 2016-7-20 稳定程度: 初稿 修改历史 版本 日期 修订人 说明 1.0 20 ...
- [dpdk] 熟悉SDK与初步使用 (一)(qemu搭建实验环境)
搭建实验环境: troubleshoot 第一步加载驱动 第二步切换驱动 使用了所有qemu支持的卡 [tong@T7:~/VM/dpdk] % cat start.sh sudo qemu-syst ...
- [dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)
对例子IP Fragmentation的熟悉,使用,以及源码分析. 功能: 该例子的功能有二: 一: 将IP分片? 二: 根据路由表,做包转发. 路由表如下: IP_FRAG: Socket : ad ...
- [Virtualization][qemu][kvm][virtio] 使用 QEMU/KVM 模拟网卡多队列
序: 做DPDK例子的时候,发现一些例子需要多队列,而我当前所使用的虚拟机并不是多队列的.关于我当前虚拟机的状态,可以见前文. 所以,我的需求就是,让虚拟机里的网卡,有多队列! 参考: http:// ...
- [dpdk] 读官方文档(3)
续前节, 测试小程序 1. 想编译测试程序首先需要设置两个环境变量,为什么呢,因为测试程序的Makefile里用了... rpm装了打包好的devel包,这个rpm也会自带这两个环境变量.就是说写第三 ...
- [qemu] 在前端驱动使用virtio的情况下,如何让后端使用vhost-user [未解决]
首先,如果你更关心原理和知识,请读读这个 http://chuansong.me/n/2186528 (值得细细的逐字读). 在<<深入浅出dpdk>>中提到,vhost-us ...
- [dpdk] 读官方文档(2)
续前节.切好继续: 一,文档里提到uio_pci_generic, igb_uio, vfio_pci三个内核模块,完全搞不懂,以及dpdk-devbind.py用来查看网卡状态,我得到了下边的输出: ...
- [dpdk] 读官方文档(1)
前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>. 目标:读官方文档,同时跟着文档进行安装编译等工作. http://dpdk.org/doc/guides/index ...
- DPDK support for vhost-user
转载:http://blog.csdn.net/quqi99/article/details/47321023 X86体系早期没有在硬件设计上对虚拟化提供支持,因此虚拟化完全通过软件实现.一个典型的做 ...
随机推荐
- springMVC系列之(三) spring+springMVC集成(annotation方式)
个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想.实践出真知. 1.基本概念 1.1.Spring Spri ...
- UNIX网络编程——利用ARP和ICMP协议解释ping命令
一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit) ...
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...
- 关于"net::ERR_CONNECTION_ABORTED"和"Firebug 达到了 Post 请求大小限制"的问题
1.其中"net::ERR_CONNECTION_ABORTED"是在Chrome的控制台中打印出来的. 2."Firebug 达到了 Post 请求大小限制" ...
- 数据库再设计(Database Redesign)
数据库设计有三个来源:(1)可以从现有数据开始设计数据库,例如从excel表格等,这种模式下需要考虑的问题是数据的normalization,最终通常将数据转化为BCNF范式:(2)设计新的数据库,这 ...
- CentOS 64-bit下安装JDK和Tomcat并设置Tomcat开机启动操作步骤
准备文件如下: 1.CentOS-6.4-x86_64-bin-DVD1.iso 2.jdk-7u67-linux-x64.rpm 3.apache-tomcat-7.0.55.tar.gz 安装步骤 ...
- UNIX环境高级编程——System V 共享内存区
共享内存区域是被多个进程共享的一部分物理内存.如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信.共享内存是进程间共享数据的一种最 ...
- iOS学习新知识-加速计和陀螺仪
一.CoreMotion框架介绍 我们知道有一些iOS的应用,会有一些特殊的要求,比如: 电子罗盘指南针之类的应用:让我们知道方向. 运动类型软件:让我们知道我们跑步多少公里. 社交软件中的摇一摇功能 ...
- xml解析方式之JAXP解析入门
XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...
- 7、Libgdx网络操作
(官网:www.libgdx.cn) Libgdx包含了一些跨平台的网络操作类,这些类在Gdx.net中. 特性 跨平台HTTP请求 多平台TCP C/S Socket支持(可配置) TCP C/S优 ...