[root@master mdev]# vi Makefile

# SPDX-License-Identifier: GPL-2.0-only

mdev-y := mdev_core.o mdev_sysfs.o mdev_driver.o

obj-$(CONFIG_VFIO_MDEV) += mdev.o
obj-$(CONFIG_VFIO_MDEV_DEVICE) += vfio_mdev.o

如上,查看drivers/vfio/mdev/Makefile可以发现,mdev(Mediated Device)实际上是由两个而不是一个模块构成。

他俩是怎么分工的?

[root@custom-16-126 mdev]# lsmod |grep -i mdev
vfio_mdev 12841 0
mdev 20336 1 vfio_mdev
vfio 32656 3 vfio_mdev,vfio_iommu_type1,vfio_pci

从上面的模块可以看出,mdev模块是通用模块,虽然目前只有vfio_mdev来跟他适配,但设计来说,mdev可以看成bus总线,

比如pci总线,后面会有很多不同类型的pci总线设备接入,而vfio_mdev可以看做vfio驱动针对mdev总线的一种适配, vfio_mdev 与 vfio_pci的地位是一样的。

vfio_mdev.ko则是定义了mdev总线上的一种Driver,用来实现和VFIO的对接。

mdev出现的背景:

mdev的文档可以参考vfio-mediated-device.txt,就是内核源码自带的,他主要解决的问题是,不支持sr-iov的设备,如何做到切分,也就是说,虽然物理上

不支持vf的切分,他通过mdev,可以时分复用的方式来实现虚拟化,这样就实现了多个用户态驱动“同时“ 操作一块物理设备的能力。

我们为什么需要VFIO?一个原因是虚拟机经常时用直接设备访问(“device assignment”)来获得尽可能高的IO性能,

从设备和host的角度,这其实就是把VM变成了一个用户态驱动,VM也因此获得了这个IO设备的低延迟、高带宽和全虚拟化原生(bare-metal)设备驱动的直接应用。

从gpu虚拟化的角度来看,我们怎么看待sr-iov的虚拟化与mdev-vfio的趋势哪家会发展更好呢?

分片虚拟化不需要IOMMU硬件的支持。其只需要VFIO模块添加type1 IOMMU的驱动,来通知host将要进行的DMA传输的GFN,VA等信息,并在Host端的mdev设备驱动层完成GFN到PFN的翻译处理。

这个翻译是通过pin_page然后建好映射的方式来实现的,可以理解为软件层面上的IOMMU操作。

而AMD SRIOV与GPU passthrough方式下,IOMMU是必备组件。尤其IOMMU硬件完成GFN到PFN的地址转换,分片虚拟化对于不具备sr-iov虚拟化的硬件是一个很好的解决方案,但是从里面的原理

可以看出,这样方便了闭源的驱动加入到linux的家庭继续存在,其中以英伟达为最,因为它只要实现了mdev驱动要求的几个回调函数就行。既然是软件层面实现的iommu,那么意味着速度上肯定会

比硬件上慢,其实sr-iov的硬件,现在出现更多在网卡侧,比如智能网卡的产品落地,amd自从推出7150的显卡支持sr-iov之后,几年没有见到新的产品来支持sr-iov,而反观英伟达,借助mdev,将虚拟化做得风生水起。

虚拟化之mdev-vfio笔记的更多相关文章

  1. 虚拟化 模板制作 rhev笔记

    查看主机是否支持RHEV:一要支持vt-x, 一定是64位操作系统 cat /proc/cpuinfo 查看是否有lm(64位) 是否有, vmx(or svm)(vt-x) 虚拟化中制作Linux模 ...

  2. 美团网 KVM虚拟化公开课学习笔记

    KVM优化技术,美团开放平台--邱剑 基于KVM现有选项做一些优化.视频地址:http://www.osforce.cn/course/77/learn#lesson/80 CPU调优: 1.Cont ...

  3. KVM虚拟化知识的一些笔记

    一.KVM介绍 KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截.Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理. QEMU:修改过的为 KVM 虚机使 ...

  4. VMware workstation运维实践系列博客导航

    第一章:VMware workstation虚拟化1.1 VMware workstation计算网络存储介绍1.2 VMware workstation其他功能特性介绍1.3 VMware work ...

  5. KVM虚拟化学习笔记系列文章列表(转)

    Kernel-based Virtual Machine KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之k ...

  6. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  7. kvm虚拟化学习笔记(三)之windows kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  8. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  9. kvm虚拟化学习笔记(一)之kvm虚拟化环境安装

    平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...

随机推荐

  1. 数组——JavaSE基础

    数组 数组初始化 public class ArrayDemo02 { public static void main(String[] args) { // 静态初始化 int[] a = {1, ...

  2. java中关于@override注解的使用

    @Override是伪代码,表示重写,作用有:1.可以当注释用,方便阅读:2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例如:如果想重写父类的方法,比如to ...

  3. Centos6添加防火墙端口 以及相关操作命令的使用

    用命令 vim /etc/sysconfig/iptables 增加防火墙端口号:(添加你需要的端口号) service iptables start  启动防火墙 service iptables ...

  4. Spring cloud gateway 如何在路由时进行负载均衡

    本文为博主原创,转载请注明出处: 1.spring cloud gateway 配置路由 在网关模块的配置文件中配置路由: spring: cloud: gateway: routes: - id: ...

  5. c++ 超长整数加法 高精度加法

    c++ 超长整数加法 高精度加法 实现思路 不能直接使用加法,因为int和long long都已超出最大数据表示范围 数据读入采用string类型,读入后将数据的每一位存储到vector中 vecto ...

  6. 基于MybatisPlus代码生成器(2.0新版本)

    一.模块简介 1.功能亮点 实时读取库表结构元数据信息,比如表名.字段名.字段类型.注释等,选中修改后的表,点击一键生成,代码成即可提现出表结构的变化. 单表快速转化restful风格的API接口并对 ...

  7. 设计模式-策略模式前端应用校验vue写法

    1.定义:定义一系列算法,把它们一个个封装起来,并且它们可以相互替换 2.实际应用:减少if else的使用,在有多种算法相似的情况下,使用 if-else 所带来的复杂和难以维护,提高维护和可读性, ...

  8. RPA应用场景-海关报关

    场景概述海关报关 所涉系统名称海关页面,业务核心系统 人工操作(时间/次) 10 分钟 所涉人工数量 3 操作频率实时 场景流程 1.每日接收报关申请邮件: 2.根据邮件信息进入业务核心系统查询相关数 ...

  9. UiPath循环活动While的介绍和使用

    一.While循环的介绍 先判断条件是否满足, 如果满足, 再执行循环体, 直到判断条件不满足,则跳出循环 二.While循环在UiPath中的使用 1. 打开设计器,在设计库中新建一个Flowcha ...

  10. CentOS 7 快速安装docker-compose

    安装docker-composegithub的地址下载太慢了,国内可以使用http://get.daocloud.io/#install-compose网站上面的地址. 首先下载docker-comp ...