高速串行计算机扩展总线设备识别方法、装置及相关设备
文献发布时间:2024-04-18 19:59:31
技术领域
本发明涉及可编程逻辑器件技术领域,尤其涉及一种高速串行计算机扩展总线设备识别方法、装置及相关设备。
背景技术
在使用现场可编程门阵列(Field Programmable Gate Array,FPGA )实现的符合高速串行计算机扩展总线(Peripheral Component Interconnect Express,PCIe )标准的异构加速设备中,设备配置空间中的基地址寄存器(Base Address Register ,BAR)空间是实现上位机驱动与PCIe设备之间数据传输的重要媒介,从BAR空间中匹配到目标PCIe设备地址从而建立上位机驱动与PCIe设备之间连接,因此,BAR空间中匹配到目标PCIe设备地址识别影响数据传输速度。尤其是对于数据传输密集型的设备,BAR空间的访问速度直接决定了设备的传输时延。相关技术中,通过建立设备BAR空间与PCIe存储地址空间之间的映射关系表,并通过遍历该映射关系表实现对目标PCIe设备的识别。但在虚拟化场景下,尤其是高密度虚拟机场景中,往往采用PCIe-SRIOV(Single Root Input/Output Virtualization ,单根IO虚拟化)技术对设备数量进行扩展,此时BAR空间的总大小、总数量也随虚拟功能数量成倍数增加,此时,通过查表遍历方法会影响BAR空间地址匹配和访问路由速度。
并且,由于直接体现在扩展配置空间中的虚拟地址仅对应一个虚拟功能,其他虚拟功能的地址均由内核计算得到,因此为保证正确查表,虚拟功能BAR空间的总大小需于物理功能BAR空间大小相等,容易造成单个虚拟功能BAR空间大小受限或物理功能BAR空间资源浪费。
发明内容
本发明提供一种高速串行计算机扩展总线设备识别方法、装置及相关设备,用以解决传统通过遍历该映射关系表识别目标PCIe设备的方法,不适用于高密度虚拟机场景,以及容易造成单个虚拟功能BAR空间大小受限或物理功能BAR空间资源浪费的缺陷。
本发明提供一种高速串行计算机扩展总线设备识别方法,包括:
创建物理功能哈希表和虚拟功能哈希表;
接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;
根据所述物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述创建物理功能哈希表,包括:
获取上位机分配的物理功能基地址寄存器空间;
对所述物理功能基地址寄存器空间的地址进行第一哈希运算,得到多个物理功能有效值;
在所述多个物理功能有效值不存在冲突时,将物理功能有效值作为第一物理功能哈希表的哈希索引;
根据所述物理功能基地址寄存器空间以及第一物理功能哈希表的哈希索引创建第一物理功能哈希表。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述创建虚拟功能哈希表,包括:
获取上位机分配的虚拟功能基地址寄存器空间;
对所述虚拟功能基地址寄存器空间进行第一哈希运算,得到多个虚拟功能地址有效值;
在所述多个虚拟功能有效值不存在冲突时,将虚拟功能有效值作为第一虚拟功能哈希表的哈希索引;
根据所述虚拟功能基地址寄存器空间以及第一虚拟功能哈希表的哈希索引创建第一虚拟功能哈希表。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行哈希密钥计算生成访问物理功能哈希密钥,包括:
对所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行第一哈希运算,获取访问物理功能哈希密钥。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行哈希密钥计算生成访问虚拟功能哈希密钥,包括:
将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址去除对齐掩码,获取访问虚拟功能地址实际值;
对所述访问虚拟功能地址实际值进行第一哈希运算,获取访问虚拟功能哈希密钥。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述第一哈希运算包括:
对待运算地址的低位部分进行预设位数截取,将保留下来的地址作为运算结果。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述根据所述访问物理功能哈希密钥和访问虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息;
若所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,则根据所述访问虚拟功能哈希密钥与所述虚拟功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述物理功能哈希表包括多个物理表项,每个物理表项对应一个物理表项使能位,若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
若在所述物理功能哈希表中存在一个与所述访问物理功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,根据所述物理功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述虚拟功能哈希表包括多个虚拟表项,每个虚拟表项对应一个虚拟表项使能位,所述若所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,则根据所述访问虚拟功能哈希密钥与所述虚拟功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
若在所述虚拟功能哈希表中存在一个与所述访问虚拟功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,根据所述虚拟功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,若在所述虚拟功能哈希表中存在多个与所述访问虚拟功能哈希密钥相同的虚拟表项,且每个虚拟表项的使能位有效,还包括:
分别提取每个所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功的虚拟表项中的设备编号;
从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,在所述多个物理功能有效值存在冲突时,还包括:
对所述物理功能基地址寄存器空间的地址进行第二哈希运算,得到第二物理功能哈希表的哈希索引;
根据第二物理功能哈希表的哈希索引创建第二物理功能哈希表;
根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
根据所述第一访问密钥查找所述第一物理功能哈希表,以及,根据所述第二访问密钥查找所述第二物理功能哈希表;
根据查找结果获取匹配成功的物理功能哈希表,并从所述匹配成功的物理功能哈希表中获取所述待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,在所述多个虚拟功能有效值存在冲突时,还包括:
对所述虚拟功能基地址寄存器空间的地址进行第二哈希运算,得到第二虚拟功能哈希表的哈希索引;
根据第二虚拟功能哈希表的哈希索引创建第二虚拟功能哈希表;
根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
根据所述第一访问密钥查找所述第一虚拟功能哈希表,以及,根据所述第二访问密钥查找所述第二虚拟功能哈希表;
根据查找结果获取匹配成功的虚拟功能哈希表,
若在所述匹配成功的虚拟功能哈希表中存在多个匹配成功的虚拟表项,且每个匹配成功的虚拟表项的使能位有效,分别提取每个匹配成功的设备编号;
从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,不同物理功能下属的虚拟功能的对齐掩码不同,不同对齐掩码的虚拟功能地址存在于同一虚拟功能哈希表中。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,还包括:
创建多个虚拟功能哈希表副本,以使每个虚拟支路单独对应一个虚拟功能哈希表副本。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述虚拟功能哈希表以及所述物理功能哈希表中还包括:
基地址寄存器编号,所述基地址寄存器编号用于表征待访问的目的基地址寄存器编号,所述基地址寄存器编号为0~5范围内的整数值。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述虚拟功能哈希表以及所述物理功能哈希表中还包括:
虚拟功能标志位,所述虚拟功能标志位用于表征当前哈希表是否为虚拟功能哈希表,在所述虚拟功能标志位有效时,表征当前哈希表为虚拟功能哈希表。
根据本发明提供的一种高速串行计算机扩展总线设备识别方法,所述待访问高速串行计算机扩展总线设备的标识信息包括总线编号、设备编号和功能编号中的至少一种;
在所述虚拟功能标志位无效时,根据预设物理功能对应功能编号获取功能编号;
在所述虚拟功能标志位有效时,根据虚拟功能的地址有效值与对齐掩码的差值计算出功能编号。
本发明还提供一种高速串行计算机扩展总线设备识别装置,包括:
创建模块,用于创建物理功能哈希表和虚拟功能哈希表;
接收模块,用于接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
计算模块,用于根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;
查找模块,用于根据所述物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息。
本发明还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一项所述的高速串行计算机扩展总线设备识别方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的高速串行计算机扩展总线设备识别方法。
本发明提供的高速串行计算机扩展总线设备识别方法、装置及相关设备,通过创建物理功能哈希表和虚拟功能哈希表;接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取待访问高速串行计算机扩展总线设备的标识信息,通过并行运算、并行查表,在高密度设备场景下能够快速完成BAR空间访问请求的目标匹配,减少匹配时间;通过分别设计物理功能哈希和虚拟功能哈希表,使虚拟功能基地址 BAR空间大小摆脱物理功能基地址 BAR空间大小限制,提高设备设计的灵活性。
附图说明
为了更清楚地说明本发明或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的高速串行计算机扩展总线设备识别方法的流程示意图;
图2是设备BAR空间及其对应PCIe存储地址空间示意图;
图3是本发明提供的哈希表创建实例示意图;
图4是本发明提供的虚拟功能哈希表示意图;
图5是本发明提供的物理功能和虚拟功能的基地址寄存器结构示意图;
图6是本发明提供的BAR空间匹配阶段流程图;
图7是本发明提供的高速串行计算机扩展总线设备识别装置的功能结构示意图;
图8是本发明提供的高速串行计算机扩展总线设备识别系统的功能结构示意图;
图9是本发明提供的电子设备的功能结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的高速串行计算机扩展总线设备识别方法的流程图,如图1所示,本发明实施例提供的高速串行计算机扩展总线设备识别方法包括:
步骤101、创建物理功能哈希表和虚拟功能哈希表;
在本发明实施例中,PCIe-SRIOV标准将设备分为物理功能、虚拟功能两种类型。虚拟功能依托物理功能创建,其一部分配置信息位于物理功能的扩展配置空间中,这部分配置信息由物理功能下属的所有虚拟功能共用。虚拟功能与物理功能都有其独立的配置空间,在数据传输中互不影响。在实现符合SRIOV标准的物理功能、虚拟功能设备时,Linux内核会根据设备的实际配置分别为物理功能配置空间中的BAR、物理功能扩展配置空间中的虚拟功能 BAR分配地址,然后按照图1方式分配设备在PCIe存储地址空间中的地址。
如图2所示,在SRIOV高密度设备场景下,BAR空间总数可达成千上万个,传统遍历查表方法在BAR空间总数增加时,匹配时间也随之延长;且其地址空间大小不一,仅属于同一个虚拟功能基地址寄存器的BAR大小相同,对设备BAR空间的匹配路由设计造成很大困难。
本发明实施例通过对齐、哈希运算、查表、过滤等并行逻辑的设计,在收到BAR地址空间的访问请求时能够在固定的十几个硬件周期内计算出其目的设备地址,为整个FPGA异构设备的带宽、时延性能提供底层保障,在高密度PCIe-SRIOV设备场景下,能够以固定的时延开销完成BAR地址空间访问请求的目标匹配。并且,通过物理功能、虚拟功能哈希表不同的结构设计与哈希查表算法设计,使虚拟功能 BAR空间大小摆脱物理功能限制,提高设备设计的灵活性。
步骤102、接收上位机发送的设备基地址空间访问请求信息,该设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
步骤103、根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;
步骤104、根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息。
传统高速串行计算机扩展总线设备识别方法是通过建立设备BAR空间与PCIe存储地址空间之间的映射关系表,并通过遍历该映射关系表实现对目标PCIe设备的识别。但在虚拟化场景下,尤其是高密度虚拟机场景中,往往采用PCIe-SRIOV技术对设备数量进行扩展,此时BAR空间的总大小、总数量也随虚拟功能数量成倍数增加,此时,通过查表遍历方法会影响BAR空间地址匹配和访问路由速度。并且,由于直接体现在扩展配置空间中的虚拟地址仅对应一个虚拟功能,其他虚拟功能的地址均由内核计算得到,因此为保证正确查表,虚拟功能BAR空间的总大小需于物理功能BAR空间大小相等,容易造成单个虚拟功能BAR空间大小受限或物理功能BAR空间资源浪费。
本发明实施例提供的高速串行计算机扩展总线设备识别方法,通过创建物理功能哈希表和虚拟功能哈希表;接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取待访问高速串行计算机扩展总线设备的标识信息,通过并行运算、并行查表,在高密度设备场景下能够快速完成BAR空间访问请求的目标匹配,减少匹配时间;通过分别设计物理功能哈希和虚拟功能哈希表,使虚拟功能基地址 BAR空间大小摆脱物理功能基地址 BAR空间大小限制,提高设备设计的灵活性。
基于上述任一实施例,创建物理功能哈希表,包括:
获取上位机分配的物理功能基地址寄存器空间;对所述物理功能基地址寄存器空间的地址进行第一哈希运算,得到多个物理功能有效值;在所述多个物理功能有效值不存在冲突时,将物理功能有效值作为第一物理功能哈希表的哈希索引;根据所述物理功能基地址寄存器空间以及第一物理功能哈希表的哈希索引创建第一物理功能哈希表。
基于上述任一实施例,创建虚拟功能哈希表,包括:
获取上位机分配的虚拟功能基地址寄存器空间;对所述虚拟功能基地址寄存器空间进行第一哈希运算,得到多个虚拟功能地址有效值;在所述多个虚拟功能有效值不存在冲突时,将虚拟功能有效值作为第一虚拟功能哈希表的哈希索引;根据所述虚拟功能基地址寄存器空间以及第一虚拟功能哈希表的哈希索引创建第一虚拟功能哈希表。
在本发明实施例中,物理功能与虚拟功能哈希表独立设计,使虚拟功能 BAR空间大小摆脱物理功能限制,提高设备设计的灵活性。
如图3所示,上位机除直接分配物理功能BAR空间的地址外,还将分配首个虚拟功能 BAR空间的地址。对于物理功能,直接以其地址的有效值为索引创建哈希表项,每条表项对应一条物理支路,如906、907、C40、C41,其截取低10位的哈希结果分别为106、107、040、041,将不会产生哈希冲突,因此创建以十六进制040、041、106、107为索引的哈希表项。对于虚拟功能,将其地址有效值的低8为作为对齐掩码,将地址有效值去除对齐掩码后的有效值作为虚拟功能哈希表的索引,如9、A、C、D。两种索引用于创建两个独立的哈希表。对于不同物理功能下属的虚拟功能,其对齐掩码不同,但共用相同的虚拟功能哈希表,创建好的虚拟功能哈希表如图4所示,虚拟功能哈希表中每个虚拟功能地址对应一组基地址寄存器编号(BAR编号)、设备编号、虚拟功能标志位和表项使能位。
基于上述任一实施例,物理功能、虚拟功能哈希表均以哈希密钥为索引,每个地址对应内容包括哈希密钥、BAR编号、设备编号、虚拟功能标志位和表项使能位。
哈希密钥是内核给BAR空间直接分配的地址,包含了定位物理功能BAR空间的全部信息以及定位虚拟功能BAR空间的部分信息。
基地址寄存器编号用于表征待访问的目的基地址寄存器编号,所述基地址寄存器编号为0~5范围内的整数值。基地址寄存器编号信息在内核访问配置空间中的BAR时被记录在哈希表中,在内核访问BAR指向的地址空间时匹配并读出。
设备编号是请求希望访问的目的设备编号。TLP配置空间访问请求本身即包含目的BDF信息,可在内核进行配置空间访问时进行记录。设备编号是匹配阶段过滤无效交叉匹配的依据。
虚拟功能标志位用于表征当前哈希表是否为虚拟功能哈希表,在所述虚拟功能标志位有效时,表征当前哈希表为虚拟功能哈希表。虚拟功能标志位标记了此条哈希表项对应的物理功能设备还是虚拟功能设备。若内核配置的BAR位于设备配置空间,则标记该表项对应物理功能设备;若内核配置的BAR位于设备扩展配置空间,则标记该表象对应虚拟功能设备。虚拟功能标志位决定了匹配阶段是否需要从查表结果进一步计算功能编号。
在本发明实施例中,所述待访问高速串行计算机扩展总线设备的标识信息包括总线编号、设备编号和功能编号中的至少一种;
在所述虚拟功能标志位无效时,根据预设物理功能对应功能编号获取功能编号;
在所述虚拟功能标志位有效时,根据虚拟功能的地址有效值与对齐掩码的差值计算出功能编号。
例如,功能编号为虚拟功能的地址有效值与对齐掩码的差值加一。
根据所述BAR编号、设备编号和功能编号可以确定唯一高速串行计算机扩展总线设备,从而实现准确识别高速串行计算机扩展总线设备。
在本发明实施例中,不同物理功能下属的虚拟功能的对齐掩码不同,不同对齐掩码的虚拟功能地址存在于同一虚拟功能哈希表中。
在本发明一些实施例中,还包括:
创建多个虚拟功能哈希表副本,以使每条虚拟支路单独对应一个虚拟功能哈希表副本。图6中一个请求目标地址对应一条物理支路和两条虚拟支路。
在本发明实施例中,每条虚拟支路单独对应一个虚拟功能哈希表副本可以加快查表速度。
基于上述任一实施例,本发明实施例提供的高速串行计算机扩展总线设备识别方法包括:
步骤201、创建物理功能哈希表和虚拟功能哈希表;
步骤202、接收上位机发送的设备基地址空间访问请求信息,该设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
步骤203、对所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行第一哈希运算,获取访问物理功能哈希密钥,以及,将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址去除对齐掩码,获取访问虚拟功能地址实际值;对所述访问虚拟功能地址实际值进行第一哈希运算,获取访问虚拟功能哈希密钥;
在本发明实施例中,第一哈希运算包括:
对待运算地址的低位部分进行预设位数截取,将保留下来的地址作为运算结果。
步骤204、根据访问物理功能哈希密钥和访问虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,内核对PCIe设备进行枚举并为设备BAR空间分配地址。FPGA在检测到针对物理功能BAR空间的配置空间读写请求时,将整个可读写地址区域作为物理功能哈希表的哈希密钥;检测到针对虚拟功能BAR空间的配置空间读写请求时,将可读写地址区域的高位部分作为物理功能哈希表的哈希密钥,舍弃的低位称为对齐掩码,位宽与扩展的虚拟功能数量上限相关。本发明的物理功能、虚拟功能BAR空间结构如图5所示,64位BAR空间大小为1MB、每个物理功能扩展出255个虚拟功能情况下。
基于上述任一实施例,本发明实施例提供的高速串行计算机扩展总线设备识别方法包括:
步骤301、创建物理功能哈希表和虚拟功能哈希表;
步骤302、接收上位机发送的设备基地址空间访问请求信息,该设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
步骤303、对所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行第一哈希运算,获取访问物理功能哈希密钥,以及,将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址去除对齐掩码,获取访问虚拟功能地址实际值;对所述访问虚拟功能地址实际值进行第一哈希运算,获取访问虚拟功能哈希密钥;
步骤304、根据所述访问物理功能哈希密钥与所述访问虚拟功能哈希密钥并行查找所述物理功能哈希表和所述虚拟功能哈希表;
步骤305、若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息;
步骤306、若所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,则根据所述访问虚拟功能哈希密钥与所述虚拟功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息。
基于上述任一实施例,所述物理功能哈希表包括多个物理表项,每个物理表项对应一个物理表项使能位,若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
步骤401、创建物理功能哈希表和虚拟功能哈希表;
步骤402、接收上位机发送的设备基地址空间访问请求信息,该设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
步骤403、将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址作为所述物理功能哈希密钥;
步骤404、若在所述物理功能哈希表中存在一个与所述访问物理功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,根据所述物理功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
基于上述任一实施例,在物理功能哈希表存在哈希冲突时,本发明实施例提供的高速串行计算机扩展总线设备识别方法包括:
步骤501、对所述物理功能基地址寄存器空间的地址进行第二哈希运算,得到第二物理功能哈希表的哈希索引;
步骤502、根据第二物理功能哈希表的哈希索引创建第二物理功能哈希表;
步骤503、根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
步骤504、根据所述第一访问密钥查找所述第一物理功能哈希表,以及,根据所述第二访问密钥查找所述第二物理功能哈希表;
步骤505、根据查找结果获取匹配成功的物理功能哈希表,并从所述匹配成功的物理功能哈希表中获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,哈希冲突的避免主要体现在哈希表创建阶段哈希索引的计算过程中。例如截取哈希密钥的低十位作为哈希表索引,若未检测到索引冲突则创建该表项并写入第一种哈希算法对应哈希表。发现哈希冲突时,以哈希密钥按十位循环异或值作为哈希表索引并写入第二种哈希算法对应哈希表。此种设计最大承载2K个哈希表项,在内核分配连续地址的前提下可保证设备总地址空间不超过514(512+2)GB时不发生哈希冲突,在地址不连续前提下也能以最大概率避免哈希冲突。
基于上述任一实施例,所述虚拟功能哈希表包括多个虚拟表项,每个虚拟表项对应一个虚拟表项使能位,本发明提供的一种高速串行计算机扩展总线设备识别方法,包括:
步骤601、若在所述虚拟功能哈希表中存在一个与所述访问虚拟功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,根据所述虚拟功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
步骤602、若在所述虚拟功能哈希表中存在多个与所述访问虚拟功能哈希密钥相同的虚拟表项,且每个虚拟表项的使能位有效,还包括:分别提取每个所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功的虚拟表项中的设备编号;
步骤603、从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
基于上述任一实施例,在虚拟功能出现哈希冲突时,本发明实施例提供的高速串行计算机扩展总线设备识别方法包括:
步骤701、对所述虚拟功能基地址寄存器空间的地址进行第二哈希运算,得到第二虚拟功能哈希表的哈希索引;
步骤702、根据第二虚拟功能哈希表的哈希索引创建第二虚拟功能哈希表;
步骤703、根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
在本发明实施例中,第二访问密钥获取方法包括将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址去除对齐掩码,获取访问虚拟功能地址实际值;对所述访问虚拟功能地址实际值进行第二哈希运算,获取第二访问密钥。其中对齐掩码获取方法为将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址有效值的低位部分预设位数的位值作为对齐掩码;在本发明实施例中,虚拟功能哈希表引入对齐掩码,并且表中增加设备编号字段过滤出交叉匹配现象中的实际地址。
步骤704、根据所述第一访问密钥查找所述第一虚拟功能哈希表,以及,根据所述第二访问密钥查找所述第二虚拟功能哈希表;
步骤705、根据查找结果获取匹配成功的虚拟功能哈希表,
步骤706、若在所述匹配成功的虚拟功能哈希表中存在多个匹配成功的虚拟表项,且每个匹配成功的虚拟表项的使能位有效,分别提取每个匹配成功的设备编号;
步骤707、从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,采用第一哈希运算:低位截取、第二哈希运算循环异或两种哈希算法,在连续地址前提下避免哈希冲问题。
在本发明实施例中,通过两种实现简单的哈希算法的结合,解决本场景下绝大多数哈希冲突问题,在地址匹配阶段,FPGA收到的设备地址空间访问请求仅包含地址信息,依靠本设计计算出请求的目的BDF及BAR编号,完成上位机请求的快速路由。针对请求中的地址信息进行并行对其处理,其中物理功能哈希表查表支路直接提取请求地址中的哈希密钥,虚拟功能哈希表查表支路需要减去对应物理功能的虚拟功能BAR对齐掩码。
在本发明实施例中,虚拟功能总数为2的整数次幂,因此属于同一个虚拟功能的不同BAR对齐掩码相同,无需添加额外支路进行处理。
经过掩码处理后,物理功能支路与多个虚拟功能支路获得长度不同的哈希密钥,分别进行前述两种哈希运算,每条支路获得两种位宽相同的运算结果作为哈希表索引。使用哈希索引值查找对应支路的哈希表,获得包含哈希密钥、BAR编号、设备编号、虚拟功能标志位和表项使能位的哈希结果;确认哈希结果的表项使能位拉高,然后将对齐后原始请求地址的对应位与哈希结果中的哈希密钥字段对比,相同则表示匹配成功。匹配完成后,所有支路的查表结果将至少有一项匹配成功。由于本发明中对齐掩码的设计,在物理功能与物理功能交界处有极小概率某几个物理功能所属的虚拟功能哈希表均匹配成功,即物理功能所属虚拟功能的请求使用其他物理功能的对齐掩码对齐后,在该物理功能的哈希表中恰好查表成功,此时需将哈希表中设备编号字段与支路对应的设备编号进行对比,以辅助识别交叉匹配现象。
如图6所示,地址信息参照图3示例,上位机请求的目标地址为A050_0000:在地址对齐阶段,物理功能查表支路不做任何处理,直接提取请求地址的有效值作为查表地址,物理功能1所属的虚拟功能支路减去对齐掩码08,物理功能2所属的虚拟功能支路减去对齐掩码42,分别得到查表地址9、A以及对齐后偏置FD、C3;
哈希运算阶段,物理功能查表支路对A05分别进行截取低10位、计算10位循环异或值两种哈希运算,结果分别为205、207,物理功能1所属虚拟功能支路两种哈希运算结果均为9,物理功能2所属虚拟功能支路两种哈希运算结果均为A;
哈希查表阶段,物理功能查表支路205、207查表均失败,物理功能1、物理功能2所属虚拟功能支路查表均成功。
匹配判断阶段,物理功能1、物理功能2所属虚拟功能支路的查表结果中,使能位均拉高,对齐后原始请求地址的对应位9、A与哈希结果中的哈希密钥字段均相同。
交叉匹配过滤阶段,物理功能2所属虚拟功能支路的查表结果中设备编号对应物理功能1,因此判断此支路匹配结果无效。最后,成功获得地址A050_0000对应的设备及BAR空间编号为物理功能1,虚拟功能254,BAR0。
本发明实施例提供的高速串行计算机扩展总线设备识别方法,解决了传统方法的高时延、单个虚拟功能BAR大小受限、物理功能BAR空间资源浪费等问题,在内核软件读写BAR空间本身时为物理功能、虚拟功能分别创建结构不同的哈希表,在驱动读写BAR空间内的存储地址空间时将读写地址作按照特定方式对齐后作为哈希密钥并执行哈希运算,将运算结果并行查找物理功能、虚拟功能哈希表,最后通过过滤机制排除交叉匹配现象,最终得到驱动读写请求的目的设备、功能、BAR编号信息。并且采用两种实现简单的哈希算法互为补充,以表项资源开销换取冲突查表时延,能够满足本场景下大部分系统对哈希冲突避免的性能要求。通过大量的并行运算、并行查表设计,在高密度设备场景下能够快速完成BAR空间访问请求的目标匹配,相比建表并遍历比较的方法,从取决于设备数量的匹配时间改进到固定匹配时间;通过两种实现简单的哈希运算的结合,以低资源开销、低时延引入解决绝大多数哈希冲突问题;通过分别设计物理功能、虚拟功能哈希表并采用不同长度的哈希索引查表,使虚拟功能 BAR空间大小摆脱物理功能限制,提高设备设计的灵活性。
下面对本发明提供的高速串行计算机扩展总线设备识别装置进行描述,下文描述的高速串行计算机扩展总线设备识别装置与上文描述的高速串行计算机扩展总线设备识别方法可相互对应参照。
图7为本发明实施例提供的高速串行计算机扩展总线设备识别装置的功能结构示意图,如图7所示,本发明实施例提供的高速串行计算机扩展总线设备识别装置包括:
创建模块701,用于创建物理功能哈希表和虚拟功能哈希表;
接收模块702,用于接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;
计算模块703,用于根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成访问物理功能哈希密钥和访问虚拟功能哈希密钥;
查找模块704,用于根据所述访问物理功能哈希密钥和访问虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取所述待访问高速串行计算机扩展总线设备的标识信息。
本发明实施例提供的高速串行计算机扩展总线设备识别装置,通过创建物理功能哈希表和虚拟功能哈希表;接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取待访问高速串行计算机扩展总线设备的标识信息,通过并行运算、并行查表,在高密度设备场景下能够快速完成BAR空间访问请求的目标匹配,减少匹配时间;通过分别设计物理功能哈希和虚拟功能哈希表,使虚拟功能基地址 BAR空间大小摆脱物理功能基地址 BAR空间大小限制,提高设备设计的灵活性。
在本发明实施例中,计算模块703被配置为:
对所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址进行第一哈希运算,获取访问物理功能哈希密钥。
以及,将所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址去除对齐掩码,获取访问虚拟功能地址实际值;
对所述访问虚拟功能地址实际值进行第一哈希运算,获取访问虚拟功能哈希密钥。
在本发明实施例中,查找模块704被配置为:
若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息;
若所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,则根据所述访问虚拟功能哈希密钥与所述虚拟功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,所述物理功能哈希表包括多个物理表项,每个物理表项对应一个物理表项使能位,若所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,则根据所述访问物理功能哈希密钥与所述物理功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
若在所述物理功能哈希表中存在一个与所述访问物理功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问物理功能哈希密钥与所述物理功能哈希表匹配成功,根据所述物理功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,所述虚拟功能哈希表包括多个虚拟表项,每个虚拟表项对应一个虚拟表项使能位,所述若所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,则根据所述访问虚拟功能哈希密钥与所述虚拟功能哈希表的匹配结果获取所述待访问高速串行计算机扩展总线设备的标识信息,包括:
若在所述虚拟功能哈希表中存在一个与所述访问虚拟功能哈希密钥相同的表项,且该表项的使能位有效,则判定所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功,根据所述虚拟功能哈希表中地址与标识信息映射关系获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,若在所述虚拟功能哈希表中存在多个与所述访问虚拟功能哈希密钥相同的虚拟表项,且每个虚拟表项的使能位有效,还包括:
分别提取每个所述访问虚拟功能哈希密钥与所述虚拟功能哈希表匹配成功的虚拟表项中的设备编号;
从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,在所述多个物理功能有效值存在冲突时,还包括:对所述物理功能基地址寄存器空间的地址进行第二哈希运算,得到第二物理功能哈希表的哈希索引;
根据第二物理功能哈希表的哈希索引创建第二物理功能哈希表;
根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
根据所述第一访问密钥查找所述第一物理功能哈希表,以及,根据所述第二访问密钥查找所述第二物理功能哈希表;
根据查找结果获取匹配成功的物理功能哈希表,并从所述匹配成功的物理功能哈希表中获取所述待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,在所述多个虚拟功能有效值存在冲突时,还包括:对所述虚拟功能基地址寄存器空间的地址进行第二哈希运算,得到第二虚拟功能哈希表的哈希索引;
根据第二虚拟功能哈希表的哈希索引创建第二虚拟功能哈希表;
根据所述待访问高速串行计算机扩展总线设备的基地址寄存器空间地址分别进行第一哈希运算和第二哈希运算,得到第一访问密钥和第二访问密钥;
根据所述第一访问密钥查找所述第一虚拟功能哈希表,以及,根据所述第二访问密钥查找所述第二虚拟功能哈希表;
根据查找结果获取匹配成功的虚拟功能哈希表,
若在所述匹配成功的虚拟功能哈希表中存在多个匹配成功的虚拟表项,且每个匹配成功的虚拟表项的使能位有效,分别提取每个匹配成功的设备编号;
从匹配成功的多个虚拟表项中筛选出所述设备编号与对应虚拟支路中物理功能编号相同的虚拟表项,根据所述虚拟表项获取待访问高速串行计算机扩展总线设备的标识信息。
在本发明实施例中,创建模块701被配置为:
获取上位机分配的物理功能基地址寄存器空间;
对所述物理功能基地址寄存器空间的地址进行第一哈希运算,得到多个物理功能有效值;
在所述多个物理功能有效值不存在冲突时,将物理功能有效值作为第一物理功能哈希表的哈希索引;
根据所述物理功能基地址寄存器空间以及第一物理功能哈希表的哈希索引创建第一物理功能哈希表。
在本发明实施例中,创建模块701还被配置为:
获取上位机分配的虚拟功能基地址寄存器空间;
对所述虚拟功能基地址寄存器空间进行第一哈希运算,得到多个虚拟功能地址有效值;
在所述多个虚拟功能有效值不存在冲突时,将虚拟功能有效值作为第一虚拟功能哈希表的哈希索引;
根据所述虚拟功能基地址寄存器空间以及第一虚拟功能哈希表的哈希索引创建第一虚拟功能哈希表。
如图8所示,本发明实施例提供的高速串行计算机扩展总线设备识别系统包括:
哈希表初始化、BAR空间匹配两部分构成。两部分的功能时间上依次执行。哈希表初始化模块根据上位机为部分BAR空间直接分配的地址创建哈希表,并提供对齐掩码信息;BAR空间匹配模块接收上位机的BAR空间访问请求,执行地址对齐、哈希运算、哈希查表、匹配判断与过滤等操作,从地址信息中快速提取BDF(Bus,Device,Functio,总线编号,设备编号,功能编号)信息供底层模块处理使用。通过BDF信息可以识别唯一PCIe设备。
图9示例了一种电子设备的实体结构示意图,如图9所示,该服务器可以包括:处理器(processor)910、通信接口(Communications Interface)920、存储器(memory)930和通信总线940,其中,处理器910,通信接口920,存储器930通过通信总线940完成相互间的通信。处理器910可以调用存储器930中的逻辑指令,以执行高速串行计算机扩展总线设备识别方法,该方法包括:创建物理功能哈希表和虚拟功能哈希表;接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取待访问高速串行计算机扩展总线设备的标识信息。
另一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的高速串行计算机扩展总线设备识别方法,该方法包括:创建物理功能哈希表和虚拟功能哈希表;接收上位机发送的设备基地址空间访问请求信息,所述设备基地址空间访问请求信息包括待访问高速串行计算机扩展总线设备的基地址寄存器空间地址;根据待访问高速串行计算机扩展总线设备的基地址寄存器空间地址并行进行哈希密钥计算生成物理功能哈希密钥和虚拟功能哈希密钥;根据物理功能哈希密钥和虚拟功能哈希密钥并行查找所述物理功能哈希表和虚拟功能哈希表,获取待访问高速串行计算机扩展总线设备的标识信息。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
- 一种网络安全态势预测方法、装置、设备及存储介质
- 一种安全基线检测方法、装置、设备及可读存储介质
- 安全威胁处理方法、系统、安全感知服务器及存储介质
- 一种频谱感知方法、装置、设备、系统及存储介质
- 一种存储系统的状态检测方法、装置、设备及存储介质
- 一种感知态势处物联网安全检测方法及存储介质
- 感知态势处物联网安全检测方法、系统及存储介质