基于固件的外设虚拟化技术

(整期优先)网络出版时间:2021-12-21
/ 2

基于固件的外设虚拟化技术

张莉丽

湖南体育职业学院


【摘要】由于服务器硬件资源强大,处理器支持硬件虚拟化技术,能够在单一硬件系统上独立运行多个操作系统。本文对现有服务器固件程序进行分析,提出了基于固件的外设虚拟化技术,对设备配置流程进行改进,进而满足服务器全系统的虚拟化的需求。

【关键词】固件 服务器 外设



由于服务器硬件资源强大,处理器支持硬件虚拟化技术,能够在单一硬件系统上独立运行多个操作系统。作为与外界交互通道的I/O子系统为计算机系统提供了强大的可扩展能力,为了在多个操作系统中有效合理地利用资源,I/O子系统需要对硬件资源进行管理和划分。现有的分配方式只是在pci根层次上对设备进行了分配,系统灵活性和可扩展性严重不足。本文对现有服务器固件程序进行分析,提出了基于固件的外设虚拟化技术,对设备配置流程进行改进,进而满足服务器全系统的虚拟化需求。

1 固件

固件是在计算机加电后到操作系统控制计算之前的这一段时间内控制计算机的存放在ROM中的软件。固件的主要功能包括检测和初始化,确定硬件配置,装载或引导操作系统,以及为硬件和软件提供交互式的调试机制。他的主要任务有:

(1) 检测和初始化系统硬件

(2) 确定硬件的配置

(3) 从大容量储存设备或网络上启动操作系统

(4) 提供交互式测试硬件和软件的调试工具

2 设备配置

2.1 服务器设备配置概述

在服务器系统中,对于每一个I/O子系统的设备,都是通过PCI总线相连的。通过这种连接方式,构成了一个完整的设备体系。

在开放性固件系统中,对PCI设备的配置是通过PCI配置空间来进行的,PCI配置空间包含了一个PCI配置空间头,保存了设备的基本信息。对于I/O子系统的设备,大部分都是PCI插卡型设备,里面包含了Fcode程序,用于提供设备的驱动。

2.2 PCI配置空间

PCI配置空间是一段在设备初始化过程中每个PCI设备私有的256字节地址空间。在这段地址空间里,保存了设备初始化的必要信息。配置空间必须能够被“配置读”和“配置写”。

config-addr表示在配置空间中驻留的内存空间地址。设备的配置空间的第一个地址值可以通过my-space方法得到,剩下的值通过计算偏移量可以得到。

对于PCI外围设备,都包含一个PCI配置空间头。图1展示了PCI配置空间头的结构。

61c197dfdc881_html_41f99f2602cf497c.png

图1 PCI配置空间头的结构[1]

Device ID和Vendor ID:在自举过程中,程序遍历PCI设备时,通过返回“Device ID”和“Vendor ID”的值来判断是否为空的插槽。返回0xFFFFFFFF时,表示为空槽。其它值则表示包含设备。

命令寄存器:在Fcode驱动中,命令寄存器仅被用来开启或关闭PCI卡的一些地址空间和控制这个设备是否作为总线控制器。

基址地址寄存器:基址地址寄存器可以对设备卡的可设定地址资源进行重定位。0比特位是只读的并且指示给定的基址地址寄存器映射到内存空间还是I/O空间资源。

2.3 服务器配置流程分析

系统启动过程分析:为了实现系统虚拟化的需求,系统在启动过程中,由Hypervisor对系统的CPU、内存等统一配置并分配给不同的虚拟域,每一个虚拟域运行在Hypervisor之上。虚拟域内部由OBP接受控制权,并对计算机进行检测和初始化,确定硬件配置,装载或引导操作系统。其启动流程如图2所示:

61c197dfdc881_html_a8f978321f7caf42.gif

图2 系统启动流程

(1) 接通电源,系统开机

(2) 执行系统基本初始化,如CPU的初始化

(3) 运行Hypervisor,为整个系统配置CPU、内存等资源并分配给不同虚拟域

(4) 虚拟域中的OBP控制计算机,执行检测和初始化,确定硬件配置,装载或引导操作系统

(5) 操作系统控制计算机

(6) 当退出或重启系统,将回到OBP层,使OBP控制计算机

3 I/O虚拟化技术

3.1 设备的统一配置

通过对服务器PCI设备空间地址的分配,利用配置读和配置写可以实现设备的配置。但是每一个虚拟域在开机启动时,都将运行一段开放性固件程序,用于对设备进行配置,然后引导操作系统。

系统采取了对PCI设备统一配置的方式。即在指定的虚拟域(被称为Service Domain(SD))上,先对设备进行配置,生成完整的设备树。其它的虚拟域只需要读取设备信息,删除不需要的节点设备即可。

在对设备进行统一配置时,驱动的加载有可能改变设备配置。对于桥设备,需要加载桥驱动用以扫描桥以下的设备。对于其它设备,如果不属于此虚拟域,则不需要加载驱动,以保证统一配置的正确性。

3.2 设备读取

设备的统一配置完成后,其它的虚拟域需要读取配置信息。根据对服务器设备配置流程的分析,当建立设备节点时,为了配置设备属性,会用到assign-address方法。

对设备进行统一配置时,会调用方法probe-and-assign-bar。其它的虚拟域用到的方法为read-bar-resource,只有当此方法中probe-base-reg方法返回值为false时,才会对设备进行资源分配。对于统一配置下生成的设备树,不会出现未被遍历的设备,probe-base-reg的返回值均为true,因此不会再对设备分配资源。设备读取基本流程如下:

(1) 拦截所有的配置写,放开所有的配置读

(2) 对于不属于自己的设备,不需要加载驱动

1) 桥设备必须加载驱动,否则会打断扫描过程

2) 加载驱动过程中必须放开设备读写


4 结论

由于服务器硬件资源强大,处理器支持硬件虚拟化技术,能够在单一硬件系统上独立运行多个操作系统。针对现有的分配方式只是在pci根层次上对设备进行了分配,系统灵活性和可扩展性严重不足的问题。本文提出了基于固件的外设虚拟化技术,对现有服务器固件程序进行分析,对设备配置流程进行改进,进而满足服务器全系统的虚拟化的需求。

参考文献:

[1]. Writing FCode Programs for PCI: An Introduction to FCode Programming Fully Compliant with IEEE Standard 1275-1994, Revision C, 1996

[2]. Garcia Avenue, Mountain View. OpenBoot 3.x Command Reference Manual, Sun Microsystems, Inc. 1995

[3]. 杨林凤, 曹袖. 面向xen网络虚拟化的性能研究. 微型电脑应用,2009, 25(10): 11~14.

[4]. 王立明. 对于公司应用服务器虚拟化的研究. 计算机与网络, 2009, 24: 559.




【基金项目】2017年度湖南省教育厅科学研究项目,课题名称:虚拟计算环境固件支持技术研究和实现,项目编号:17C1034