I/O 虚拟化是网络虚拟化技术的重要组成部分,其性能对系统整体性能的提高有至关重要的作用。
然而目前I/O虚拟化面临的一个重大挑战是如何在虚拟化的情况下获得良好的I/O性能,并且有效地共享I/O设备。
1、I/O架构
如果将计算机执行的任务进行一个粗略的分类,则只有 CPU 运算和 I/O 两种操作。I/O是CPU访问外部设备的方法,设备通常通过寄存器和设备RAM将自身的功能展现给CPU,CPU读写这些寄存器和RAM即可完成访问设备的操作。
以x86为例,通过访问方式的不同可以将I/O分成如下两类。
- 端口I/O(Port I/O):通过I/O端口访问设备寄存器,x86有65 536个8位的I/O端口,编号为0x0~0xFFFF。如果把端口号看做访问设备端口的地址,那么这65 536个端口就构成了 64 KB的地址空间,称为“I/O 端口地址空间”。使用 IN/OUT指令访问端口时 CPU通过一个特殊的管脚标识这是一次 I/O 端口访问,于是芯片组知道地址线上的地址是 I/O 端口号并执行相应的操作。
- 内存映射I/O(Memory Map I/O,MMIO):即通过内存访问形式访问设备寄存器或设备RAM。在x86架构下,MMIO和端口I/O最大的不同是要占用CPU的物理地址空间。它把设备的寄存器和设备RAM映射到