博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DPDK virtio-user
阅读量:7008 次
发布时间:2019-06-28

本文共 1546 字,大约阅读时间需要 5 分钟。

PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家。

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,在使用的时候,我们只需要定义好相应的适配接口即可,如下:

431521-20180429193555327-1738919710.png

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 官网,上面都有介绍。

431521-20180429193627926-952501164.png

和容器网络的方案使用 vhost_user 作为后端驱动一样,要使得 virtio_user 和内核通信,只需加载内核模块 vhost.ko,让它充当的是 virtio_user 的后端通信驱动即可。

所以,我们可以看到,其实这两种方案本质上是一样,只是换了个后端驱动而已,这也是 virtio 的优势所在,定义一套通用的接口标准,需要什么类型的通信方式只需加载相应驱动即可,改动非常少,扩展性非常高。

PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,目前已经沉淀多篇干货。

431521-20180429193713157-1980683078.jpg

转载地址:http://fxjtl.baihongyu.com/

你可能感兴趣的文章
mysql8.0.11安装、启动与基本设置
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
Yum编译安装Error Downloading Packages报错
查看>>
Linux创建分区开机自动挂载
查看>>
碧生源牌常润茶 商品库存调整
查看>>
求两个字符串的最长公共子字符串
查看>>
Linux下Mysql数据库备份和恢复全攻略
查看>>
font-family常用字体列表
查看>>
Windows 2012部署活动目录
查看>>
我的友情链接
查看>>
go语言编程音乐库代码
查看>>
将UltraEdit添加到右键菜单
查看>>
QML入门教程(3)
查看>>
es学习3-refresh
查看>>
最实用的播放器
查看>>
我的友情链接
查看>>
Extjs 和 SpringMVC 结合后,Extjs的Ajax回调函数无响应
查看>>
WebStorm 2017 最新版激活(activation code方式)
查看>>
Java正则表达式应用小结
查看>>
也谈谈StatSVN
查看>>