目前PCIe总线规范,依然在迅猛发展,但并不是所有PCIe设备都支持这些在PCIe总线的最新规范中提及的概念。一般说来,PCIe总线规范提出的新的概念,最先在x86处理器系统的Chipset和Intel设计的PCIe设备中出现。
本章将在第11.3节介绍PCI总线的“序”,并在第11.4节,详细介绍PCIe总线的“序”。其中PCIe总线的“序”基于PCI总线的序,并适当简化了PCI总线的强序模型,补充了PCIe总线的“RelaxedOrdering”和IDO(ID-BaseOrdering)模型。
第12章PCIe总线的应用
本章从分析一个EP的硬件设计原理和基于这个EP的Linux驱动程序为线索,说明PCIe设备和基于该设备的Linux驱动程序的设计流程。本章使用的PCIe设备基于Xilinx公司Vetex-5XC5VLX50T内嵌的PCIExpressEP模块,该模块也被Xilinx称为LogiCORE。
LogiCORE提供了PCIe设备的物理层和数据链路层,并做了一些基本的与事务层相关的工作,这使得许多设计者在并不完全清楚PCIe体系结构的情况下,也可以实现具有PCIe总线接口的设备。本章所述的PCIe设备基于LogiCORE,本章将该PCIe设备简称为Capric卡。
第13章PCIe总线与虚拟化技术
目前虚拟化技术在处理器体系结构中,已经占据一席之地。虚拟化技术由来已久,其含义也较为广泛,多个进程共享一个CPU,多个进程的虚拟空间共享同一个物理内存等一系列在体系结构中已经根深蒂固的概念,都可以归于虚拟化技术。
本章所强调的虚拟化技术是指在一个处理器系统[1]中运行多个虚拟处理器系统的技术。其中每一个虚拟处理器系统都有独立的虚拟运行环境,包括CPU、内存和外部设备。在这个虚拟环境中运行的操作系统彼此独立,但是这些操作系统仍使用相同的物理资源。
因此处理器需要为虚拟化环境设置专门的硬件,以支持多个虚拟处理器系统在一个物理环境中的资源共享。虚拟化技术的核心是通过VMM(VirtualMachineMonitor)集中管理物理资源,而每个虚拟处理器系统通过VMM访问实际的物理资源。有时为了提高虚拟机访问外部设备的效率,虚拟处理器系统也可以直接访问物理资源。
在一个处理器系统中,这些物理资源包括CPU、主存储器、外部设备和中断。IA处理器[2]使用EPT(ExtendedPageTable)和VPID技术对主存储器进行管理,而使用虚拟中断控制器接管中断请求以实现中断的虚拟化。目前这些技术较为成熟,对这些内容感兴趣的读者可参阅《系统虚拟化——原理与实现》,本章对此不做详细分析。
本章重点关注的是VMM对外部设备的管理,而在外部设备中重点关注对PCI设备的管理。在一个处理器系统中,设置了许多专用硬件,如IOMMU、PCIe总线的ATS机制、SR-IOV(SingleRootI/OVirtualization)和MR-IOV(Multi-RootI/OVirtualization)机制以便于VMM对外部设备的管理。