著录项信息
| 专利名称 | 用于多根I/O虚拟化共享系统的I/O资源管理方法 |
| 申请号 | CN201210160593.9 | 申请日期 | 2012-05-22 |
| 法律状态 | 授权 | 申报国家 | 中国 |
| 公开/公告日 | 2012-10-10 | 公开/公告号 | CN102722414A |
| 优先权 | 暂无 | 优先权号 | 暂无 |
| 主分类号 | G06F9/50 | IPC分类号 | G;0;6;F;9;/;5;0;;;G;0;6;F;9;/;4;5;5查看分类表>
|
| 申请人 | 中国科学院计算技术研究所 | 申请人地址 | 北京市海淀区中关村科学院南路6号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
| 权利人 | 中国科学院计算技术研究所 | 当前权利人 | 中国科学院计算技术研究所 |
| 发明人 | 刘小丽;曹政;安学军;张佩珩;孙凝晖;王展;苏勇 |
| 代理机构 | 北京律诚同业知识产权代理有限公司 | 代理人 | 祁建国;梁挥 |
摘要
本发明公开一种用于多根I/O虚拟化共享系统的I/O资源管理方法,所述方法是指利用一个主控制根节点对多根I/O虚拟化共享系统中的所有I/O设备进行集中式的初始化配置和分配管理,包括:步骤1,主控制根节点对系统中的I/O资源枚举发现和初始化配置;步骤2,主控制根节点通过PCIe管理模块,辅助管理用户管理和控制系统中的I/O设备资源,执行管理用户制定的I/O资源分配策略;步骤3,主控制根节点通过PCIe管理模块和I/O资源分配表,建立设备功能与其所属的根节点的映射关系,实现I/O资源动态分配。
1.一种用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,包括:
步骤1,主控制根节点对系统中的I/O资源枚举发现和初始化配置;
步骤2,主控制根节点通过PCIe管理模块,辅助管理用户管理和控制系统中的I/O设备资源,执行管理用户制定的I/O资源分配策略;
步骤3,主控制根节点通过PCIe管理模块和I/O资源分配表,建立设备功能与其所属的根节点的映射关系,实现I/O资源动态分配;其中,I/O资源动态分配包括:I/O资源初始化分配,所述I/O资源初始化分配指在系统初始化时,主控制根节点为各从属根节点分配设备功能,建立初始的PCIe拓扑结构的过程;I/O资源回收,所述I/O资源回收指在不影响其他根节点工作的情况下,主控制根节点在从属根节点删除I/O设备功能的过程;I/O资源再分配,所述I/O资源再分配指在不影响其他根节点工作的情况下,主控制根节点向从属根节点增加I/O设备功能的过程。
2.如权利要求1所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述步骤2包括:
步骤21,PCIe管理模块收集系统中所有PCIe组件信息并呈现给管理用户,辅助管理用户初始化或者修改资源分配策略;其中,所述PCIe组件包括系统中所有的根节点和所有的I/O设备;
步骤22,PCIe管理模块根据用户的资源分配策略,发送设备分配指令,实现I/O资源的分配管理。
3.如权利要求2所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述PCIe组件信息包括:
根节点信息,所述根节点信息,包括根节点的数目、每个根节点拥有的I/O资源以及各根节点的负载状态;
I/O设备信息,所述I/O设备信息,包括设备功能ID号、设备功能描述信息以及设备功能占用情况。
4.如权利要求1所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述I/O资源分配表包括:
所述资源分配表位于多根I/O虚拟化共享控制器的每个PCIe下游端口中,每个I/O设备对应一张I/O资源分配表;所述资源分配表记录了设备功能与其所属的根节点的映射关系;其中,表索引是设备功能在主控制根节点PCIe域中的ID号,表条目内容描述了设备功能所属的根节点标识ID及其在所属根节点PCIe域中的ID号。
5.如权利要求1所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述I/O资源初始化分配包括:
步骤61,管理用户根据根节点的需求和系统的I/O资源制定初始的分配策略,并通过PCIe管理模块发送设备分配指令;
步骤62,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源分配策略;所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事务包指示了要操作的设备功能ID号,即在主控制根节点PCIe域中的ID号、该设备功能所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;其中,所属根节点ID号为从属根节点ID号,指示一个设备分配指令;
步骤63,PCIe下游端口接收到步骤62中所述设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;并将由设备功能所属的根节点标识ID和其在所属根节点PCIe域中的ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中,进而为各从属根节点指定了分配的I/O设备功能;
步骤64,主控制根节点完成对从属根节点的I/O设备资源初始化分配后,从属根节点被引导进行PCIe设备重扫描,发现和初始化配置分配得到的设备功能。
6.如权利要求1所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述I/O资源回收包括:
步骤71,管理用户根据需求决定从某个根从属节点删除某个设备功能,通过PCIe管理软件发送设备回收指令;
步骤72,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源回收指令;所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事物包指示了要操作的I/O设备功能ID号、该设备功能所属的根节点ID号以及其在所属根节点PCIe域中的ID号;其中,功能所属的根节点标识ID为主控制根节点标识ID,指示一个设备回收指令;
步骤73,PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;
步骤74,所属根节点标识ID判定;如果配置事务包中指示的所属根节点标识ID为主控制根节点标识ID,指示一个设备回收指令;
步骤75,读取事务包要操作的设备功能ID号指示的I/O资源分配表对应的表项,向表项指示的从属根节点发送一个虚拟热插拔事件,通知有I/O设备功能将被拔除;
步骤76,复位操作的设备功能ID号指示的I/O资源分配表相应的表项;将由主控制根节点标识ID和值为全零的功能ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中;
步骤77,目标从属根节点接收到该热插拔事件,将该设备从PCIe拓扑结构中移除,并卸载相应的驱动程序。
7.如权利要求1所述的用于多根I/O虚拟化共享系统的I/O资源管理方法,其特征在于,所述I/O资源再分配包括:
步骤81,管理用户根据需求决定并指示向某个从属根节点增加某个设备功备,通过PCIe管理软件发送设备再分配指令;
步骤82,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源再分配指令;
所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事务包指示了要操作的I/O设备功能ID号,即在主控制根节点PCIe域中的ID号、该设备功能所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;其中,功能所属的根节点标识ID为从属根节点标识ID,指示一个设备分配指令;
步骤83,PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;
步骤84,所属根节点标识ID判定;如果配置事务包中指示的所属根节点ID为非主控制根节点ID,指示一个设备分配指令;
步骤85,向事务包指示的从属根节点发送一个虚拟热插拔事件,通知对应的从属根节点有I/O设备插入其PCIe拓扑结构;同时,将由设备功能所属的根节点标识ID和其在所属根节点PCIe域中的ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中,进而为该从属根节点增加分配一个I/O设备功能;
步骤86,目标从属根节点接收到热插拔事件,对该设备进行扫描和初始化配置,并加载相应的驱动程序。
用于多根I/O虚拟化共享系统的I/O资源管理方法\n技术领域\n[0001] 本发明涉及I/O虚拟化技术,特别是涉及一种用于多根I/O虚拟化共享系统的I/O资源管理方法。\n背景技术\n[0002] 在传统数据中心或云计算中心中,每个刀片服务器都拥有独立的I/O资源,如网卡、HBA适配器等。然而计算与I/O资源的紧密耦合,使得两类资源的扩展同时受到服务器空间的限制。此外,高性能I/O设备(如10GigE网卡)仅依附一台服务器,无疑降低了其利用效率,提高了系统总成本。为解决上述问题,就要解除计算与I/O资源的紧密耦合,其关键就是实现I/O设备在多个服务器之间的共享。\n[0003] 近年来,I/O设备的共享技术得到了变革性的发展,行业标准组织PCI特别兴趣小组PCI-SIG先后制定了PCI-SIG Single Root I/O Virtualization(SR-IOV:单根IO虚拟化)和PCI-SIG Multi-Root I/O Virtualization(MR-IOV:多根IO虚拟化)规范。具备SR-IOV能力的PCI Express设备能够被运行在同一宿主机上的不同虚拟机(VM/Guest)所共享,并为虚拟机提供接近本机的I/O性能。目前SR-IOV已得到I/O设备厂商的广泛支持,如支持SR-IOV的千兆以太网卡、10G以太网卡、HBA适配器等。\n[0004] 具备MR-IOV能力的PCI Express设备能够被多个宿主机上运行的若干虚拟机(VM/Guest)所共享,MR-IOV技术可以完全解除计算与I/O间的紧密耦合。但由于PCI-SIG的MR-IOV协议对原有系统的较大改动(包括对PCIe基本协议、PCIe设备结构和PCIe交换机结构的修改),难以被工业界接受。然而,对于像SR-IOV和多功能设备等本身具备有同时供多个虚拟机直接共享的能力,如果对其提供一系列附加支持,实现I/O资源在多个根节点之间共享是可行的。\n[0005] 当一个I/O设备通过PCIe交换机结构被多个根节点共享时,每个根节点在系统启动后都将尝试枚举该设备。这将引起系统竞争,一个根节点对拓扑结构中I/O设备的修改,会影响其他根节点的运行,最终导致系统不能正常工作。\n发明内容\n[0006] 为解决上述问题,本发明提供了一种多根I/O虚拟化共享系统中的I/O资源管理方法,用于解决多根IO虚拟化共享系统的资源管理和分配的技术问题,避免多根I/O虚拟化共享系统中各根节点的冲突和竞争。\n[0007] 本发明公开一种用于多根I/O虚拟化共享系统的I/O资源管理方法,包括:\n[0008] 步骤1,主控制根节点对系统中的I/O资源枚举发现和初始化配置;\n[0009] 步骤2,主控制根节点通过PCIe管理模块,辅助管理用户管理和控制系统中的I/O设备资源,执行管理用户制定的I/O资源分配策略;\n[0010] 步骤3,主控制根节点通过PCIe管理模块和I/O资源分配表,建立设备功能与其所属的根节点的映射关系,实现I/O资源动态分配。\n[0011] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述步骤2包括:\n[0012] 步骤21,PCIe管理模块收集系统中所有PCIe组件信息并呈现给管理用户,辅助管理用户初始化或者修改资源分配策略;\n[0013] 步骤22,PCIe管理模块根据用户的I/O资源分配策略,发送设备分配指令,实现I/O资源的分配管理。\n[0014] 用于多根I/O虚拟化共享系统的资源管理方法,所述PCIe组件信息包括:\n[0015] 根节点信息,所述根节点信息,包括根节点的数目、每个根节点拥有的I/O资源以及各根节点的负载状态;\n[0016] I/O设备信息,所述I/O设备信息,包括设备功能ID号、设备功能描述信息以及设备功能占用情况。\n[0017] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述I/O资源分配表包括:\n[0018] 所述资源分配表位于多根I/O虚拟化共享控制器的每个PCIe下游端口中,每个I/O设备对应一张I/O资源分配表;所述资源分配表记录了设备功能与其所属的根节点的映射关系;其中,表索引是设备功能在主控制根节点PCIe域中的ID号,表条目内容描述了设备功能所属的根节点标识ID及其在所属根节点PCIe域中的ID号。\n[0019] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述步骤3中的I/O资源动态分配包括:\n[0020] I/O资源初始化分配,所述I/O资源初始化分配指在系统初始化时,主控制根节点为各从属根节点分配设备功能,建立初始的PCIe拓扑结构的过程;\n[0021] I/O资源回收,所述I/O资源回收指在不影响其他根节点工作的情况下,主控制根节点在从属根节点删除I/O设备功能的过程;\n[0022] I/O资源再分配,所述I/O资源再分配指在不影响其他根节点工作的情况下,主控制根节点向从属根节点增加I/O设备功能的过程。\n[0023] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述I/O资源初始化分配包括:\n[0024] 步骤61,管理用户根据根节点的需求和系统的I/O资源制定初始的分配策略,并通过PCIe管理模块发送设备分配指令;\n[0025] 步骤62,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源分配策略;所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事务包指示了要操作的设备功能ID号,即在主控制根节点PCIe域中的ID号、该设备功能所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;其中,所属根节点ID号为从属根节点ID号,指示一个设备分配指令;\n[0026] 步骤63,PCIe下游端口接收到步骤62中所述设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;并将由设备功能所属的根节点标识ID和其在所属根节点PCIe域中的ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中,进而为各从属根节点指定了分配的I/O设备功能;\n[0027] 步骤64,主控制根节点完成对从属根节点的I/O设备资源初始化分配后,从属根节点被引导进行PCIe设备重扫描,发现和初始化配置分配得到的设备功能。\n[0028] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述I/O资源回收包括:\n[0029] 步骤71,管理用户根据需求决定从某个根从属节点删除某个设备功能,通过PCIe管理软件发送设备回收指令;\n[0030] 步骤72,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源回收指令;所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事物包指示了要操作的I/O设备功能ID号、该设备功能所属的根节点ID号以及其在所属根节点PCIe域中的ID号;其中,功能所属的根节点标识ID为主控制根节点标识ID,指示一个设备回收指令;\n[0031] 步骤73,PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;\n[0032] 步骤74,所属根节点标识ID判定;如果配置事务包中指示的所属根节点标识ID为主控制根节点标识ID,指示一个设备回收指令;\n[0033] 步骤75,读取事务包要操作的设备功能ID号指示的I/O资源分配表对应的表项,向表项指示的从属根节点发送一个虚拟热插拔事件,通知有I/O设备功能将被拔除;\n[0034] 步骤76,复位操作的设备功能ID号指示的I/O资源分配表相应的表项;将由主控制根节点标识ID和值为全零的功能ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中;\n[0035] 步骤77,目标从属根节点接收到该热插拔事件,将该设备从PCIe拓扑结构中移除,并卸载相应的驱动程序。\n[0036] 用于多根I/O虚拟化共享系统的I/O资源管理方法,所述I/O资源再分配包括:\n[0037] 步骤81,管理用户根据需求决定并指示向某个从属根节点增加某个设备功备,通过PCIe管理软件发送设备再分配指令;\n[0038] 步骤82,PCIe管理模块通过发送设备分配事务包,执行管理用户的资源再分配指令;所述设备分配事务包,是PCIe内存写事务包,所述PCIe内存写事务包指示了要操作的I/O设备功能ID号,即在主控制根节点PCIe域中的ID号、该设备功能所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;其中,功能所属的根节点标识ID为从属根节点标识ID,指示一个设备分配指令;\n[0039] 步骤83,PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点标识ID以及其在所属根节点PCIe域中的ID号;\n[0040] 步骤84,所属根节点标识ID判定;如果配置事务包中指示的所属根节点ID为非主控制根节点ID,指示一个设备分配指令;\n[0041] 步骤85,向事务包指示的从属根节点发送一个虚拟热插拔事件,通知对应的从属根节点有I/O设备插入其PCIe拓扑结构;同时,将由设备功能所属的根节点标识ID和其在所属根节点PCIe域中的ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中,进而为该从属根节点增加分配一个I/O设备功能;\n[0042] 步骤86,目标从属根节点接收到热插拔事件,对该设备进行扫描和初始化配置,并加载相应的驱动程序。\n[0043] 本发明的有益效果为:通过本发明的I/O资源管理方法解决了多根I/O虚拟化共享系统中因一个I/O设备被多个根节点共享而引起的系统竞争和冲突,并能根据系统的需求实现I/O资源在多个根节点之间进行动态分配,同时为管理用户提供了一个可操作性的平台。\n附图说明\n[0044] 图1是多根I/O虚拟化共享系统的结构示意图;\n[0045] 图2是本发明多根共享一个SR-IOV设备示意图;\n[0046] 图3是本发明I/O资源分配表示意图;\n[0047] 图4是本发明I/O资源初始化配置表示意图;\n[0048] 图5是本发明I/O资源动态回收流程图;\n[0049] 图6是本发明I/O资源动态再分配流程图;\n[0050] 图7是本发明I/O资源管理方法示意图。\n具体实施方式\n[0051] 下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。\n[0052] 为避免多个根节点共享一个I/O设备时引起系统冲突和竞争,本发明提供了一种用于多根I/O虚拟化共享系统的I/O资源管理方法。如图7所示,所述I/O资源管理方法,是指利用一个主控制根节点对多根IO虚拟化共享系统中的所有I/O设备进行集中式的初始化配置和分配管理。它包括以下特征:\n[0053] a)只有主控制根节点能够枚举发现和初始化配置I/O设备资源。系统上电,启动的根节点首先利用现成的标准的系统初始化软件对系统中的所有PCIe设备进行搜索发现,只有主控制根节点能够枚举发现各I/O设备,并为各I/O设备初始化配置相应的I/O地址空间、内存地址空间和中断等资源。\n[0054] b)主控制根节点通过PCIe管理模块,辅助管理用户管理和控制系统中的I/O设备资源,执行管理用户制定的I/O资源分配策略。\n[0055] c)主控制根节点通过PCIe管理模块和I/O资源分配表,建立设备功能与其所属的根节点的映射关系,实现I/O资源动态分配。\n[0056] 所述PCIe管理模块,其特征在于:它收集系统中所有PCIe组件信息并呈现给管理用户,辅助管理用户制定或者修改资源分配策略。同时,PCIe管理模块根据用户的资源分配策略,发送设备分配指令,改写I/O资源分配表,实现I/O资源的分配管理。\n[0057] 所述PCIe组件包括但不限于系统中所有的根节点和所有的I/O设备。所述根节点信息包括但不限于:根节点的数目、每个根节点拥有的I/O资源以及各根节点的负载状态。\n所述I/O设备信息包括但不限于:设备功能ID标识符(如B/D/F)、设备功能描述信息(包括厂商ID,设备ID,版本ID等)以及设备功能占用情况等。\n[0058] 所述I/O资源分配表,其特征在于:所述资源分配表位于多根I/O虚拟化共享控制器的每个PCIe下游端口中,每个I/O设备对应一张I/O资源分配表;所述资源分配表记录了设备功能与其所属的根节点的映射关系。其中,表索引是设备功能在主控制根节点PCIe域中的ID号(如功能号),表条目内容描述了设备功能所属的根节点标识ID及其在所属根节点PCIe域中的ID号(如总线号Bus/设备号Device/功能号Function)。\n[0059] 图1描绘了多根I/O虚拟化共享系统的结构示意图。多根I/O虚拟化共享系统主要包括三个部分:根节点子系统、I/O设备子系统和多根I/O虚拟化共享控制器。多根IO虚拟化共享控制器通过PCIe接口协议将根节点子系统和I/O设备子系统耦合在一起,实现一个I/O设备资源被多个根节点直接共享。\n[0060] 多根I/O虚拟化共享系统中的根节点子系统包含多个根节点,每个根节点由根联合体(Root Complex,RC)及其连接的CPU组(CPU set)和内存(Mem)组成。其中,运行有PCIe管理相关软件的根节点称之为主控制根节点(Master Root Node,mRN),主控制根节点只有一个(下文使用mRN0标识),包含一组PCIe管理软件;它对系统中的所有I/O设备资源具有绝对的管理控制权,并根据用户制定的资源分配策略,将系统中I/O设备的硬件资源以设备功能为单位,动态地分配给其他根节点。其他根节点称为从属根节点(Slave Root Node,sRN),从属根节点可以有多个(下文使用sRN1,sRN2,…,sRNn标识),并根据主控制根节点的分配,拥有一定I/O资源的独立使用权,能且仅能使用主控根节点分配给它的I/O设备资源。根节点上可以运行多个同构或者异构虚拟机(Virtual Machine,VM),虚拟机管理程序(Virtual Machine Manager,VMM)负责调度主控制根节点分配的I/O资源为各VM所用。\n[0061] 多根I/O虚拟化共享系统中的I/O设备子系统包含多个I/O设备,它们具备同时为多个虚拟机提供服务的能力,可以是包含一个物理功能(Physical Function,PF)及其对应的多个虚拟功能(Virtual Function,VF)的SR-IOV设备或者包含多个PF及其对应的多个VF的SR-IOV设备,也可以是多功能I/O设备等。\n[0062] 多根I/O虚拟化共享系统中的多根I/O虚拟化共享控制器包由若干个PCIe上游端口(PCIe Upstream Port)、PCIe多根交换机和若干个PCIe下游端口(PCIe Downstream Port)三个部分组成。其中,PCIe上游端口包含符合PCI-Express基本规范中的PCIe端口类型定义的PCIe控制器,它负责与根节点子系统的互连,以及事务包在PCIe单根环境和PCIe多根环境之间的转换;PCIe多根交换机,实质是由多个PCI桥建立的N+M个端口的交换机,通过为每个根节点建立一个1+M端口的虚拟PCIe交换机,实现各根节点与M个I/O设备的逻辑连接;PCIe下游端口,包含符合PCI-Express基本规范中的PCIe端口类型定义的PCIe控制器和直接I/O虚拟化接口设备两个功能部分,负责与I/O设备子系统的互连,以及事务包在PCIe单根环境和PCIe多根环境之间的转换,实现各根节点直接访问物理I/O设备功能。\n[0063] 图2描述了多个根节点共享一个SR-IOV设备的示意图。多个根节点通过PCIe多根交换机共享连接在PCIe下游端口的SR-IOV设备资源。在系统启动时,每个根节点都将尝试枚举PCIe多根交换机下连接的I/O设备,实质是枚举PCIe下游端口下连接的同一I/O设备。这将引起系统竞争,一个根节点对SR-IOV设备的修改,会影响其他根节点的运行,最终导致系统不能正常工作。因此,为了避免各系统的冲突和竞争,同时实现一个SR-IOV设备资源能被多个根节点所共享,本发明利用一个主控制根节点mRN0对SR-IOV设备进行控制和管理,并通过设备I/O资源分配表为从属根节点分配设备。I/O资源分配表位于多根I/O虚拟化共享控制器的每个PCIe下游端口中,每个I/O设备对应一张I/O资源分配表。\n从属根节点只能发现和使用设备IO资源分配表中记录的分配给它的设备功能。\n[0064] I/O资源分配表如图3所示,表项记录了设备功能与其所属的根节点的映射关系。\n多根I/O虚拟化共享系统的每个设备对应一张I/O资源分配表,其中表索引是设备功能在主控制根节点PCIe域的标识符(如功能号),表条目内容描述了设备功能所属的根节点标识ID及其在从属根节点PCIe域中的标识。通过配置I/O资源分配表,将一个设备的I/O资源以设备功能为单位挂载到各根节点,进而为各根节点建立了相应的独立的PCIe拓扑结构,实现了多个根节点对设备I/O资源的共享。\n[0065] 如图2所示,根节点子系统上电时,根节点启动并利用现成的标准的系统初始化软件对SR-IOV设备进行搜索发现和初始化配置。然而,由于此时设备IO资源分配表没有记录任何设备功能的分配信息,除了主控制根节点mRN0,所有从属根节点(sRN1,sRN2,…,sRNn)都不能发现SR-IOV设备中功能。系统启动完成之后,主控制根节点mRN0根据用户资源分配策略,通过配置设备IO资源分配表记录设备功能分配信息,将SR-IOV设备硬件资源以设备功能为单位(一个虚拟功能)分配给从属根节点。在设备初始化分配完成后,从属根节点被引导进行PCIe设备重扫描。通过设备I/O资源分配表,从属根节点才能够发现分配得到的SR-IOV设备中的虚拟功能。当从属根节点完成PCIe设备重扫描,加载相应的虚拟功能VF驱动,即可以使用特定的虚拟功能,进而实现SR-IOV设备资源的多根共享。\n[0066] 本发明提供的一种用于多根I/O虚拟化共享系统的I/O资源管理方法,能够根据用户制定的资源分配策略,实现I/O资源在多个根节点之间的动态分配。所述I/O资源动态分配包括I/O资源初始化分配,I/O资源回收和I/O资源再分配。\n[0067] 图4描述了利用主控制根节点对I/O资源初始化配置的流程图。所述I/O资源初始化配置,指在系统启动时,主控制根节点枚举发现和初始化配置系统中所有I/O设备,并根据管理用户制定的I/O资源分配策略,为各从属根节点分配设备功能,建立初始的PCIe拓扑结构的过程,它包括以下步骤:\n[0068] 首先,根节点子系统上电,启动的根节点首先利用现成的标准的系统初始化软件对系统中的所有PCIe设备进行搜索发现和初始化配置。设备初始化期间,系统配置软件访问设备中每个功能的配置空间,分配功能在系统中的ID号,同时根据其资源需求为其分配相应的I/O地址空间、内存地址空间和中断等资源。在系统上电启动初期,只有主控制根节点能够发现和初始化配置I/O子系统中各I/O设备,并为每个I/O设备对应的I/O资源分配表配置内存地址。\n[0069] 主控制根节点初始化软件完成设备发现和配置后,其上运行的PCIe管理软件收集系统中所有PCIe组件信息并呈现给管理用户,辅助管理用户进行资源分配策略的制定。\n所述收集的PCIe组件包括但不限于系统中所有的根节点和所有的I/O设备。所述根节点信息包括但不限于:根节点的数目、每个根节点拥有的I/O资源以及各根节点的负载状态。\n所述I/O设备信息包括但不限于:设备功能ID标识符(如B/D/F)、设备功能描述信息(包括厂商ID,设备ID,版本ID等)、设备的属性(如多功能设备或者SR-IOV设备等)以及设备功能占用情况等。\n[0070] 然后,管理用户根据各根节点的需求和现有的I/O资源制定初始的分配策略,并通过PCIe管理软件发送设备分配指令。\n[0071] PCIe管理软件接收到指令后,通过发送设备分配事务包执行管理用户的资源分配策略。所述设备分配事务包,是PCIe内存写事务包,它指示了要操作的设备功能ID号(在主控制根节点PCIe域中的ID号)、该设备功能所属的根节点ID号以及其在所属根节点PCIe域中的ID号。其中,所属根节点ID号为从属根节点ID号,指示一个设备分配指令。\n[0072] PCIe下游端口接收到上述设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点ID号以及其在所属根节点PCIe域中的ID号;并将由设备功能所属的根节点ID号和其在所属根节点PCIe域中的ID号组成内容,写入要分配的设备功能ID号指示的I/O资源分配表相应的表项中,进而为各从属根节点指定了分配的I/O设备功能。\n[0073] 主控制根节点完成对从属根节点的I/O设备资源初始化分配后,各从属根节点被引导进行PCIe设备重扫描。各从属根节点根据I/O资源分配表,可以发现分配得到的设备功能,并根据其资源需求为其分配在本地PCIe域中的ID号、IO地址空间、内存地址空间和中断等资源。\n[0074] 多根I/O虚拟化共享系统在工作过程中,可以在不影响其他根节点工作的情况下,动态地进行系统设备更新升级,以及对现有的I/O资源进行重新分配。无论是设备更新升级还是现有设备资源的重新分配,实质都是从根节点删除相应设备功能和向根节点增加相应设备功能的过程。本发明提供了一种I/O资源动态分配方法,能够在不影响其他根节点工作的情况下,从从属根节点删除I/O设备功能或者向从属根节点增加I/O设备功能。从从属根节点删除I/O设备功能称之为I/O资源回收,向从属根节点增加I/O设备功能的过程称之为I/O资源再分配。\n[0075] 图5描述了I/O资源回收的流程图,其过程如下所述:\n[0076] 首先,管理用户根据需求决定从某个从属根节点删除某个设备功备,并通过PCIe管理软件发送设备回收指令。\n[0077] 然后PCIe管理软件通过发送设备分配事务包,执行管理用户的资源回收指令。所述设备分配事务包,是PCIe内存写事务包,它指示了要操作的I/O设备功能ID号(在主控制根节点PCIe域中的ID号)、该设备功能所属的根节点ID号以及其在所属根节点PCIe域中的ID号。其中,功能所属的根节点ID号为主控制根节点ID号,指示一个设备回收指令。\n[0078] 当PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点ID号以及其在所属根节点PCIe域中的ID号。并对所属根节点ID进行判定,如果配置事务包中指示的所属根节点ID为主控制根节点ID,指示一个设备回收指令。\n然后,读取事务包要操作的设备功能ID号指示的I/O资源分配表对应的表项,并向表项指示的从属根节点发送一个虚拟热插拔事件,通知有I/O设备功能将被拔除。同时,将由主控制根节点ID号和值为全零的功能ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中。\n[0079] 当目标从属根节点接收到上述虚拟热插拔事件后,根据系统运行状态决定该请求的生效时间,然后将该设备功能从系统中移除,并卸载相关的驱动程序,终止所有未完成的事务及要生成的事务。\n[0080] 图6描述了I/O资源再分配的流程图,其过程如下所述:\n[0081] 首先管理用户根据需求决定向某个从属根节点增加某个设备功能,并通过PCIe管理软件发送设备回收指令\n[0082] 然后PCIe管理软件通过发送设备分配事务包,执行管理用户的资源再分配指令。\n所述设备分配事务包,是PCIe内存写事务包,它指示了要操作的I/O设备功能ID号(在主控制根节点PCIe域中的ID号)、该设备功能所属的根节点ID号以及其在所属根节点PCIe域中的ID号。其中,功能所属的根节点ID号为从属根节点ID号,指示一个设备分配指令。\n[0083] 当PCIe下游端口接收设备分配事务包,解析事务包获取要操作的设备功能ID号、其所属的根节点ID号以及其在所属根节点PCIe域中的ID号。并对所属根节点ID进行判定,如果配置事务包中指示的所属根节点ID不是主控制根节点ID,指示一个设备回收指令。然后,向事务包指示的从属根节点发送一个虚拟热插拔事件,通知对应的从属根节点有I/O设备插入其PCIe拓扑结构。同时,将由设备功能所属的根节点ID号和其在所属根节点PCIe域中的ID号组成内容,写入要操作的设备功能ID号指示的I/O资源分配表相应的表项中,进而为该从属根节点增加分配一个I/O设备功能。\n[0084] 当目标从属根节点接收到上述虚拟热插拔事件后,根据系统运行状态决定该请求的生效时间,然后对该设备进行扫描和初始化配置,并加载相应的驱动程序。\n[0085] 本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
法律信息
- 2014-04-02
- 2012-12-05
实质审查的生效
IPC(主分类): G06F 9/50
专利申请号: 201210160593.9
申请日: 2012.05.22
- 2012-10-10
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |