理解I/O虚拟化过程

I/O是什么

  • I:input,输入设备
  • O:output,输出设备

I/O分类

  • 字符设备(character device)
    • 用户通过这些设备实现与计算机系统的通信,比如键盘鼠标,写字板,摄像头,扫描仪
  • 块设备(block device)
    • 计算机外部存储设备,用于永久存储数据,比如硬盘,光盘,U盘
  • 网络设备(Network driver)
    • 用户计算机可以远程通讯的设备,比如网卡、调制解调器、光口

通过I/O接口的功能负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起

I/O虚拟化
理解I/O虚拟化过程
虚拟化由于增加了一层VMM逻辑层来管理虚拟机的资源使用

I/O虚拟化全虚拟化

  • 所有的VM虚拟机需要复用有限的外设资源,因为真实的I/O只有一个
  • 所有的虚拟机I/O都是通过VMM用软件模拟实现

理解I/O虚拟化过程
优点:兼容屏蔽了底层,方便移植
缺点:性能不足,虚拟机发出的 I/O 请求需要虚拟机和 VMM 之间的多次交互,产生大量的上下文切换,造成巨大的开销

I/O 半虚拟化

  • 前端设备驱动将数据通过VMM提供的接口转发到后端驱动
  • 后端驱动对VMM的数据进行分时分通道进行处理
    理解I/O虚拟化过程
  • Domain 0
    • I/O虚拟管理端,也就是后端驱动,所以的I/O驱动都是安装到这里面
  • Domain u
    • 代表所以的虚拟机,也就是前端驱动,虚拟机默认创建都是会加载前端驱动

虚拟机Tools工具

  • 由于Domain 0 一般我们没有能力做修改的,那么我们只能通过 Domain u也就是自己的前端驱动来进行增强虚拟I/O性能,显卡、硬盘这些

优点:由于基于C/S架构,能在很大程度上减少上下文切换开销,没有额外的硬件开销
缺点:需要VMM实现前端驱动,后端驱动可能成为瓶颈

I/O全虚拟化

  • 直接将物理设备分配给某个 Guest OS
  • Guest OS直接访问I/O设备(不经 VMM),但是需要硬件的支持
    理解I/O虚拟化过程
    优点:提升了VMM处理性能
    缺点:无法实现复用技术,设备被单个虚拟机占用

SR-IOV技术
一个物理设备可以虚拟出多个设备,分配给虚拟机使用

  • 物理功能(Physical Functions,PF):这是完整的带有 SR-IOV 能力的设备。PF 能像普通设备那样被发现、管理和配置。
  • 虚拟功能(Virtual Functions,VF):简单的设备功能,它只能处理I/O。每个 VF 都是从 PF中分离出来的。每个物理硬件都有一个 VF 数目的限制。一个 PF,能被虚拟成多个 VF 用于分配给多个虚拟机。

硬件辅助I/O虚拟技术

  • Intel vt-d
  • amd-vi

部分参考:http://www..com/article/315496053/

总结:目前好像都是使用半虚拟化的C/S架构多,KVM的Virtio,华为的前后端驱动模型(半虚拟化)