虚拟化之mdev-vfio笔记
[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笔记的更多相关文章
- 虚拟化 模板制作 rhev笔记
查看主机是否支持RHEV:一要支持vt-x, 一定是64位操作系统 cat /proc/cpuinfo 查看是否有lm(64位) 是否有, vmx(or svm)(vt-x) 虚拟化中制作Linux模 ...
- 美团网 KVM虚拟化公开课学习笔记
KVM优化技术,美团开放平台--邱剑 基于KVM现有选项做一些优化.视频地址:http://www.osforce.cn/course/77/learn#lesson/80 CPU调优: 1.Cont ...
- KVM虚拟化知识的一些笔记
一.KVM介绍 KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截.Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理. QEMU:修改过的为 KVM 虚机使 ...
- VMware workstation运维实践系列博客导航
第一章:VMware workstation虚拟化1.1 VMware workstation计算网络存储介绍1.2 VMware workstation其他功能特性介绍1.3 VMware work ...
- KVM虚拟化学习笔记系列文章列表(转)
Kernel-based Virtual Machine KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之k ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟化学习笔记(三)之windows kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟化学习笔记(二)之linux kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装
平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...
随机推荐
- Python的关键字参数与斜杠“/”
Python3.8 新增了一种语法,可以使用斜杠 / 占据一个参数的位置,表示在此之前的参数都只接受位置参数的传参形式. 例如,对以下函数声明: def func(a, b, /, c, d, *, ...
- JAVA - 类的加载过程
JAVA - 类的加载过程 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化. 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象 ...
- Linux系统下运行.sh文件
在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个vip666.sh文件 #chmod +x *.sh的文件名 #./*.sh的文件名 第一种(这种办法需要用chmod使得文件具备 ...
- Java使用FreeMarker模版技术动态生成word实践
一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...
- 聊聊 C# 和 C++ 中的 泛型模板 底层玩法
最近在看 C++ 的方法和类模板,我就在想 C# 中也是有这个概念的,不过叫法不一样,人家叫模板,我们叫泛型,哈哈,有点意思,这一篇我们来聊聊它们底层是怎么玩的? 一:C++ 中的模板玩法 毕竟 C+ ...
- Vue 安装 vue的基本使用 vue的初步使用步骤
1. 资源: https://cn.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5 进入官网学习 2. 点击安装,要把vue下载到本地文件的根目录中,不要选择压缩版的,这 ...
- Linux修改默认ssh22端口
1.检查端口是否可用 使用下面的命令检查您想增加或修改的端口号是否被占用,执行命令后如果没有任何打印,说明这个端口没有被占用 netstat -lnp|grep 23456 2.修改配置文件 ssh配 ...
- Halcon 条形码识别
read_image (Image, 'C:/Users/HJ/Desktop/test_image/image.png') create_bar_code_model([], [], BarCode ...
- 零基础学Java(3)运算符
运算符 运算符用于连接值.Java提供了一组丰富的算术和逻辑运算符以及数学函数. 算术运算符 在Java中,使用算术运算符+.-.*./表示加.减.乘.除运算.当参与/运算的两个操作数都是整数时,表示 ...
- 重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
欢迎关注公众号:bin的技术小屋 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以 ...