1. 需求

虚拟机cpu加速有intel vt-x,memory加速有intel ept技术,剩下就是网络和存储io加速,io路径长,网络io路径是虚拟机virtio-ovs-vxlan-host内核协议栈出物理机,存储io是虚拟机virtio-qemu-host内核存储栈到ceph,io大量占用host上的cpu资源,而且性能低。

2. vdpa

vdpa是virtio控制面软件模拟,数据面硬件实现,控制面复杂用硬件实现难,数据面简单用硬件实现容易,厂商自己实现自己的驱动,数据是用dma mapping直接从虚拟机内存手动物理硬件上,硬件再vxlan处理或者对接ceph,听起来有点vfio-mdev的感觉,vfio只能处理pci通用结构和流程,vfio-mdev处理那些硬件实现不了sr-iov功能的设备,也就是硬件不能模拟出pci标准结构的哪些硬件,vfio-mdev给虚拟机假象以为自己独占硬件,虚拟机运行硬件驱动使用硬件,其实是在host的严密监视下共享硬件资源,由于硬件不同qemu中多多少少会有一些硬件相关的代码。vdpa基本virtio标准设备,肯定希望虚拟机中只运行中立的virtio驱动,qemu中只有vdpa厂商中立代码,厂商实现的vdpa驱动在技术栈最底层,所以说和vifo-mdev还是不一样。

另一个角度考虑,vfio没有vhost中关于virtio的ioctl实现,vdpa两者都需要,如果qemu用了viommu,vhost也得支持viommu,vhost迟早得添加地址转换的ioctl,在这个基础上vhost再调用iommu实现硬件dma mapping的功能,所以vdpa复用vhost的ioctl和代码是最佳选择,以前看一些资料上写的vhost-vfio和vhost-mdev等,总之就是为把vhost和vfio ioctl结合在一起用的,都没能成功upstream代码。

vdpa厂商的驱动一种方式是运行在用户态,如dpdk中实现的vdpa驱动,另一方式运行在内核中,如intel的ifcvf和mellanox的mlx5,已经合入upstream内核。

VDPA support for Mellanox ConnectX devices

linux/drivers/vdpa/mlx5 at master · torvalds/linux

http://lkml.iu.edu/hypermail/linux/kernel/2008.1/02434.html

Linux kernel source tree

两种方式都需要qemu支持vdpa,一种是vhost-user,配合dpdk中的vpda运行,dpdk再调用厂商开发的用户态vdpa驱动,另一种是vhost-vdpa,通过ioctl调用到内核通用vdpa模拟,通用vdpa模块再调用厂商硬件专有的vdpa驱动。

  • 热迁移

如果硬件支持停止DMA并且有地方记录DMA写内存的dirty log,那么就可以热迁移,如果硬件不支持需要软件辅助。

[v1] vDPA software assisted live migration

[v4,00/10] support SW assisted VDPA live migration

  • software vdpa

mellanox connect5及以上支持,也叫vf relay,由于需要软件把virtio descriptor ring转换成mellanox dma descriptor ring,只能采用mellanox ovs-dpdk在用户态做转换,转换完了再由硬件offload加速,稍微影响性能。给硬件下offload的ovs可以运行在用户态也可以运行在内核态,但转换关系目前只有用户态的代码。

  • hareware vdpa

connectX 6及以上才支持,硬件支持ring的转换。用dpdk中的vdpa示例程序配置,说明需要把vdpa示例程序集成到ovs-dpdk中,实现vdpa/openflow/vxlan offload,如果用ovs-kernel那么用内核vdpa通用框架即可。

  • VDUSE

vdpa可以由硬件实现,intel有自己的硬件驱动,mellanox有自己的硬件驱动,硬件驱动生成一个vdpa_device,挂载到vdpa_bus上。也可以由软件实现,intel在内核写了一个vdpa_sim,用户态用软件模拟vdpa硬件就是VDUSE,用户态和内核态得建立通道,用户态通过这个通道给内核注册一个vdpa_device,这个device收到vpda控制信息转发给用户态,数据面通过用户态和内核态共享内存实现。我理解好处就是硬件支持vdpa用硬件的,硬件不支持用软件实现的vdpa,屏蔽底层差异,软件实现在用户态更简单,很多硬件实现了网络io vdpa加速,但目前没有看到硬件实现存储io vdpa加速,字节跳动提出的VDUSE借助内核vdpa框架统一了容器和虚拟机的存储,如果哪天硬件实现了存储io vdpa加速,线上切换到硬件方案相对来说比较容易。

Commits · bytedance/qemu

[RFC,v3,00/11] Introduce VDUSE - vDPA Device in Userspace

  • 测试

这两个链接很详细写着如何测试mellanox vdpa。

https://github.com/Mellanox/scalablefunctions/wiki/Upstream-how-to-use-SF-DPDK-vdpa-device

https://github.com/Mellanox/scalablefunctions/wiki/Upstream-how-to-use-SF-kernel-vdpa-device#12-load-vdpa-drivers

3.vdpa终极方案

更简单的方式就是bluefield2构造出virtio-net和virtio-blk,直接用vfio passthrough给虚拟机,网络和存储io问题都解决了,不知道能不能热迁移?理论上是可以的,virtio-net和virtio-blk是bluefield2模拟出来的,qemu和bluefield2交互肯定有办法读取virtio-net和virtio-blk的所有状态,接口和代码在哪里?已经和vdpa没什么关系了,又回到vfio,好处就是虚拟机加速和裸金属统一了。

4.vhost-vdpa支持情况

  • 内核:Linux 5.7+
2020-04-02 vhost: introduce vDPA-based backend Tiwei Bie 5 -0/+930
  • qemu: 5.1+
108a64818e-Cindy Lu(lulu@redhat.com) 2020-07-01 22:55:37 +0800 vhost-vdpa: introduce vhost-vdpa backend
  • libvirt: 6.9.0+
08f8fd8413-Jonathon Jongsma(jjongsma@redhat.com) 2020-10-14 12:08:25 -0500 conf: Add support for vDPA network devices

相关链接:

https://qemu-project.gitlab.io/qemu/interop/vhost-user.html

https://qemu-project.gitlab.io/qemu/interop/vhost-vdpa.html

https://www.redhat.com/en/blog/introduction-vdpa-kernel-framework

https://specs.openstack.org/openstack/nova-specs/specs/wallaby/implemented/libvirt-vdpa-support.html

kvm网卡虚拟化之vdpa技术相关推荐

  1. KVM虚拟化集群技术概述

    一. 虚拟化集群介绍.设计思路及架构 使用虚拟化集群的目标是克服单机虚拟化的局限性,利用技术手段提高虚拟机可用性,最终达到业务不中断或者减少中断时间,确保业务数据更安全的目标. 1. 虚拟化集群介绍 ...

  2. XEN和KVM云计算虚拟化技术

    一.XEN和KVM云计算虚拟化技术 01_虚拟化技术基础原理详解 02_Xen虚拟化及DomU的实现 03_Xen基于iscsi共享实现实时迁移 04_kvm虚拟化 下载链接:链接:http://pa ...

  3. 阿里云受邀参加KVM虚拟化重量级国际技术论坛

    阿里云受邀参加KVM虚拟化重量级国际技术论坛       Topic录取数量在全球公有云厂商中与Google并列第一 Linux基金会于10月份在捷克举行了一系列的重要会议,包括Linux 内核峰会. ...

  4. 虚拟化精华问答 | 虚拟化的关键技术有哪些?

    在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件.今天就让我们一起来看看关于虚拟化的精华问答吧. 1 Q ...

  5. 智能网卡的网络加速技术

    2021年9月25日,由"科创中国"未来网络专业科技服务团指导,江苏省未来网络创新研究院.网络通信与安全紫金山实验室联合主办.SDNLAB社区承办的2021中国智能网卡研讨会中,多 ...

  6. 网络I/O虚拟化,SR-IOV技术

    网络I/O虚拟化,SR-IOV技术 1.简介 网络I/O虚拟化是服务器虚拟化技术的重要组成部分,在服务器虚拟化技术领域,计算虚拟化(如CPU和内存虚拟化)已经日趋成熟,但是,网络I/O虚拟化技术的发展 ...

  7. KVM(虚拟化平台)概念及部署

    KVM(虚拟化平台)概念及部署 一.虚拟化技术 二.虚拟化技术发展 三.虚拟化特性 优势: 劣势: 四.KVM架构及原理 (一)KVM虚拟化架构/三种模式 (二)KVM原理 总结: (三)KVM工作流 ...

  8. KVM — 内存虚拟化

    目录 文章目录 目录 内存虚拟化 常规软件内存虚拟化 影子页表技术 EPT 技术 /dev/kvm 设备 内存虚拟化 虚拟化分为软件虚拟化和硬件虚拟化,而且遵循 intercept 和 virtual ...

  9. 基于KVM的虚拟化研究及应用

    引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM/370大型机上,这项技术极大地提高了大型机资源利用率.随着软硬件技术的迅速发展,这项属于大型机及专利的技术开始在普通X86计算机上应用并成为 ...

最新文章

  1. 修复mysql数据库供应商_修复MYSQL数据库
  2. HTML 表格tablecaptionthtrtdtheadtbodytfootcolcolgroup
  3. 3299元起!结缘梅奔F1车队,Redmi K50电竞版发布
  4. csrf攻击ajax,如何在使用ajax post时处理CSRF攻击?
  5. 三星w609 java_完美复刻叫板三星W2019,这款商务手机有点牛
  6. Linux 引导流程解析
  7. 品优购电商系统 1 - 分布式框架Dubbox
  8. 未转变者怎么调服务器难度,未转变者服务器怎么设置出生点 | 手游网游页游攻略大全...
  9. unity anysdk android,Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件
  10. JDK内置并发框架AQS对CLH锁的优化
  11. java中遍历Set的方法
  12. 工厂模式--大侠,您要预定金疮药还是黑玉断续膏?
  13. 什么是net驻场开发
  14. [180609] A fumble fish week(BISTU第九届C语言基本技能比赛 解题报告)
  15. 程序员是“短命”职业吗?年龄大了是不是没前途?
  16. cad线段总和lisp_cad lisp-求线段总长度
  17. 解决微信小程序请求后端接口碰到合法域名的问题 http-405j及java接口和数据接口的概念区分
  18. Hibernate 中的attachDirty,attachClean,merge,findByProperty和findByExample
  19. 【学习笔记】专业术语
  20. 【计组复习(二)指令】

热门文章

  1. mysql学习笔记--表操作
  2. spin lock自旋锁
  3. 你所坚信的,就是你的生活
  4. JSON.parse()、eval()、JSON.stringify()、jQuery.parseJSON()的用法
  5. PLSQL触发器随笔
  6. Windbg简明教程(转)
  7. java实现qq自动添加好友
  8. json和gson的一些区别
  9. PHPSTORM实用快捷键
  10. PHP操作Memcache实例介绍