I/O是什么
- I:input,输入设备
- O:output,输出设备
I/O分类
- 字符设备(character device)
- 用户通过这些设备实现与计算机系统的通信,比如键盘鼠标,写字板,摄像头,扫描仪
- 块设备(block device)
- 计算机外部存储设备,用于永久存储数据,比如硬盘,光盘,U盘
- 网络设备(Network driver)
- 用户计算机可以远程通讯的设备,比如网卡、调制解调器、光口
通过I/O接口的功能负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起
I/O虚拟化
虚拟化由于增加了一层VMM逻辑层来管理虚拟机的资源使用
I/O全虚拟化
- 所有的VM虚拟机需要复用有限的外设资源,因为真实的I/O只有一个
- 所有的虚拟机I/O都是通过VMM用软件模拟实现
优点:兼容屏蔽了底层,方便移植
缺点:性能不足,虚拟机发出的 I/O 请求需要虚拟机和 VMM 之间的多次交互,产生大量的上下文切换,造成巨大的开销
I/O 半虚拟化
- 前端设备驱动将数据通过VMM提供的接口转发到后端驱动
- 后端驱动对VMM的数据进行分时分通道进行处理
采用C/S架构分离VMM完全管理,减轻VMM的性能消耗 - 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),但是需要硬件的支持
优点:提升了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.pianshen.com/article/315496053/
总结:目前好像都是使用半虚拟化的C/S架构多,KVM的Virtio,华为的前后端驱动模型(半虚拟化)