1、UIO的出现,允许将驱动程序用到用户态空间里实现,但UIO有它的不足之处,如不支持DMA、中断等;

2、随着虚拟化的出现,IOMMU也随之出现,IOMMU为每个直通的设备分配独立的页表,因此不同的直通设备,彼此之间相互隔离;

3、有一些场景,多个PCI设备之间是有相互联系的,他们互相组成一个功能实体,彼此之间是可以相互访问的,因此IOMMU针对这些设备是行不通的,随之出现VFIO技术,VFIO兼顾了UIO和IOMMU的优点,在VFIO里,直通的最小单元不再是某个单独的设备了,而是分布在同一个group的所有设备;

4、kvm的PCI、PCIE设备直通,默认都是通过VFIO实现的(通过virsh attach-device xxx会自动插vfio的相关ko,自动生成vfio的container);

5、PCIE与PCI直通的区别是:PCI只能直通给某个特定的虚拟机,而PCIE有可能可以给多个虚拟机用,如具有SR-IOV功能的PCIE设备,通过在HOST上抽象出多个的VF,每个VF再通过VFIO直通给虚拟机,最终的表现就是一个物理PCIE网卡可以直通给多个虚拟机用;

6、SR-IOV是针对PCIE设备的,PCI设备理论上不具有SR-IOV功能;

原文链接:https://blog.csdn.net/zgy666/article/details/78649777

linux用户态驱动--VIFIO、IOMMU、UIO(二)相关推荐

  1. linux用户态驱动--VFIO(一)

    序言 设备驱动可以运行在内核态,也可以运行在用户态,不管用户态驱动还是内核态驱动,他们都有各自的缺点.内核态驱动的问题是:系统调用开销大:学习曲线陡峭:接口稳定性差:调试困难:bug致命:编程语言选择 ...

  2. linux用户态驱动--IOMMU(三)

    在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接DMA-capabl ...

  3. linux用户层驱动--VFIO(五)

    概述 VFIO是一套用户态驱动框架,它提供两种基本服务: 向用户态提供访问硬件设备的接口 向用户态提供配置IOMMU的接口 VFIO由平台无关的接口层与平台相关的实现层组成.接口层将服务抽象为IOCT ...

  4. [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序...

    如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...

  5. linux 用户态与内核态通信方式简介

    我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式.(关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: pro ...

  6. JVM内存划分、Linux用户态、内核态简介

    JVM内存划分 1.在Java运行的时候 JVM虚拟机拿到自己能支配的内存 将内存进行分割2.本地方法栈存储是C++ native方法3.程序计数器指向程序当前运行的位置4.方法区存储元数据信息在jd ...

  7. Linux用户态与内核态通信的几种方式(待完善)

    文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...

  8. Linux 用户态与内核态的交互——netlink 篇

    [size=4]Linux 用户态与内核态的交互 --netlink 篇[/size] 作者:Kendo 2006-9-3 这是一篇学习笔记,主要是对<Linux 系统内核空间与用户空间通信的实 ...

  9. Linux / 用户态和内核态的切换耗费时间的原因

    应用程序的执行必须依托于内核提供的资源,包括 CPU 资源.存储资源.I/O 资源等.为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用.因此,如果一个程序需要从用户态进入 ...

最新文章

  1. MariaDB Spider分库分表引擎调研
  2. python编译pyd
  3. 【NOSQL ]】 redis 安装
  4. python 查看当前目录_「Python」打包分发工具setuptools学习
  5. seata不兼容mysql8的解决方案
  6. 使用dataadapter和dataset更新数据库
  7. linux shell 递归统计代码行数
  8. 部门管理系统_维修工单管理系统的功能介绍
  9. SQL高级---SQL ALTER TABLE 语句
  10. 计算机毕业设计java+jsp旅游网站(源码+系统+mysql数据库+Lw文档)
  11. 共享计算机网络无法连接打印机驱动,win7共享打印机xp无法安装驱动怎么解决
  12. python绘制emoji_使用Emoji表情拼成汉字
  13. css中怎么把数字改成罗马数字,罗马数字和阿拉伯数字相互转换
  14. 电脑32位和64位是什么
  15. Debian7安装NVIDIA显卡驱动
  16. 微信小程序 + shiro 实现登录(安全管理) —— 保姆级教学
  17. --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...
  18. ERP SQL Server 1 - 2
  19. 06_NetBean主类使用库项目类中的方法
  20. 精仿CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码

热门文章

  1. python 调用linux命令-四种执行python系统命令的方法
  2. python基础教程是什么意思-python基础教程都有什么?
  3. python教程下载视频-python怎么下载视频
  4. python类装饰器详解-python 中的装饰器详解
  5. python编程爱心-用python 打印出爱心
  6. python基础知识资料-学习Python列表的基础知识汇总
  7. php cache缓存 购物车,Yii2使用Redis缓存购物车等数据
  8. UVa455 Periodic Strings(kmp)
  9. php中需要注意的问题
  10. mysql中的G标志实现纵向显示