热插拔设备预留资源分配方法、装置和系统与流程

文档序号:11864617阅读:612来源:国知局
热插拔设备预留资源分配方法、装置和系统与流程

本发明涉及Linux操作系统领域,尤其涉及一种热插拔设备预留资源分配方法、装置和系统。



背景技术:

PCIe(英文全称:peripheral component interconnect express,中文全称:外围器件互联通道)总线是一种高性能的32/64位总线,用于处理器与外围设备之间互联。目前,针对PCIe总线的热插拔技术已经很成熟,例如,对于Linux操作系统来说,在Linux内核版本中提供标准的热插拔驱动模块,以支持采用PCIe标准的热插拔方式。其中,支持PCIe热插拔设备工作的最重要前提是如何为PCIe热插拔设备分配合适的预留资源。

在现有技术,在基于PCIe总线的处理器系统中,通过PCIe Switch(中文名称:交换器)的级联来扩展PCIe端口以接入更多的PCIe热插拔设备,并且通过下行端口为PCIe热插拔设备预留资源的分配方式是:遵循均匀性原则,按照相同大小的资源平均分配。但是这种均分的资源分配方式在实际使用过程中并不灵活。

例如,参照图1中所示,交换器101的下行端口1连接交换器102的上行端口,交换器102有三个下行端口用于接入PCIe热插拔设备。假设交换器101为交换器102分配的不可预读取内存空间资源为9M,则交换器102的下行端口1、下行端口2、下行端口3这三个PCIe下行端口共同平分9M资源,因此每个下行端口可分配3M资源,因此交换器102的每个下行端口可支持的PCIe热插拔设备的不可预读取内存空间资源最大为3M,对于不可预读取内存空间资源需求超过3M的PCIe热插拔设备,则不能正常使用。



技术实现要素:

本发明的实施例提供一种热插拔设备预留资源分配方法、装置和系统,用于解决现有技术中PCIe总线为PCIe热插拔设备预留资源的分配方式不灵活的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,提供了一种热插拔设备预留资源分配方法,该方法包括:

获取设备树源文件DTS配置信息,其中,所述DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,所述PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,所述预留资源信息指示为所述PCIe热插拔设备的位置分配的预留资源;

在对所述PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据所述DTS配置信息,为被扫描的PCIe热插拔设备的位置分配所述预留资源。

第二方面,提供了一种热插拔设备预留资源分配装置,该装置包括:

获取单元,用于获取设备树源文件DTS配置信息,其中,所述DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,所述PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,所述预留资源信息指示为所述PCIe热插拔设备的位置分配的预留资源;

分配单元,用于在对所述PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据所述获取单元配置的DTS配置信息,为被扫描的PCIe热插拔设备的位置分配所述预留资源。

第三方面,提供了一种热插拔设备预留资源分配系统,包括如第二方面所述的热插拔设备预留资源分配装置。

本发明的实施例提供的热插拔设备预留资源分配方法、装置和系统,通过获取配置DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,预留资源信息指示为该PCIe热插拔设备的位置分配的预留资源;在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据DTS配置信息,为被扫描的PCIe热插拔设备的位置分配预留资源。在DTS配置信息中可以针对不同PCIe热插拔设备位置设置不同的预留资源大小,在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描时,可以根据DTS配置信息为不同位置分配相应预留资源,因此解决了现有技术中PCIe总线为PCIe热插拔设备预留资源的分配方式不灵活的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中PCIe交换器的所有下行端口平分上行端口资源的示意图;

图2为本发明的实施例提供的热插拔设备预留资源分配系统的结构示意图;

图3为本发明的实施例提供的一种热插拔设备预留资源分配方法的流程示意图;

图4为本发明的实施例提供的另一种热插拔设备预留资源分配方法的流程示意图;

图5为本发明的实施例提供的一种DTS配置信息的格式示意图;

图6为本发明的实施例提供的一种热插拔设备预留资源分配装置的结构示意图;

图7为本发明的实施例提供的分配单元的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参照图2中所示,为热插拔设备预留资源分配系统的结构示意图,其中,该系统包括:热插拔设备预留资源分配装置201、CPU(英文全称:central processing unit,中文全称:中央处理单元)202、RC(英文全称:root complex,中文全称:根组件)、交换器204、交换器205、EP(英文全称:endpoint,中文全称:终端)206、EP207和EP208。

CPU202只是示例性的给出了一个,本领域的技术人员可以理解还可以包括多个CPU。

在不同的处理器系统中,RC203的实现有较大差异。PCIe总线规范并没有规定RC的实现细则。在有些处理器系统中,RC相当于PCIe主桥,也有的处理器系统也将PCIe主桥称为PCIe总线控制器。而在x86处理器系统中,RC203除了包含PCIe总线控制器之外,还包含一些其他组成部件,因此RC203并不等同于PCIe总线控制器。

PCIe总线采用端到端的连接方式,每一个PCIe端口只能连接一个EP,当然PCIe端口也可以连接交换器进行链路扩展。通过交换器扩展出的PCIe链路可以继续挂接EP或者其他交换器。交换器的上行端口使用上一级为其分配的资源,交换器的下行端口分别使用上述分配的资源中的一部分。EP作为终端设备,可以为PCIe热插拔设备。图中仅是示例性的给出了交换器204和交换器205,以及EP206、EP207和EP208,本领域的技术人员还可以理解,采用其他数量的交换器和EP以及采用其他联结方式,都适用于本发明。

热插拔设备预留资源分配装置201通过RC203来与PCIe总线上挂载的各个设备进行通信。

本发明提供的热插拔设备预留资源分配方法、装置和系统,利用Linux操作系统中通过管理DTS(英文全称:device tree source,中文全称:设备树源文件)来按照树形结构挂载设备,并且DTS可以自定义通信协议的特点,首先自定义DTS,其中,自定义的DTS中包括PCIe热插拔设备所挂载的位置以及为其分配的预留资源,各个挂载位置的预留资源可以相同或者不同。当内核启动时,会扫描PCIe总线上的所有挂载位置,并且与自定义的DTS中的挂载位置相对应,如果能匹配到则将相应的预留资源分配给相应的挂载位置,解决了现有技术中PCIe总线为PCIe热插拔设备预留资源的分配方式不灵活的问题。

实施例1、

本发明提供了一种热插拔设备预留资源分配方法,参照图3中所示,包括:

S101、获取DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,预留资源信息指示为该PCIe热插拔设备的位置分配的预留资源。

嵌入式Linux系统的发展出现了大量描述各种板级信息的Linux内核代码,为避免Linux内核中充斥大量类似的代码,Linux使用了DTS来传递硬件板级信息,DTS成为与Linux内核进行信息传递的一种通用机制,并且具体的通信协议可以根据实际情况自行决定。

本发明即按照一定数据格式自定义了一种DTS配置信息,其中,该DTS配置信息包含PCIe热插拔设备位置信息以及对应的预留资源信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,PCIe热插拔设备位置信息指示在PCIe总线上能够挂载热插拔设备的位置,预留资源信息指示为该能够挂载热插拔设备的位置所分配的预留资源。当内核读取该DTS配置信息时,即可以根据PCIe热插拔设备位置信息和预留资源信息为相应位置预留资源。

S102、在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据DTS配置信息,为被扫描的PCIe热插拔设备的位置分配预留资源。

对PCIe总线上能够挂载PCIe热插拔设备的位置的扫描基于深度优先搜索算法(英文简称:DFS,英文全称:depth first search),最终会遍历总线上所有能够挂载PCIe热插拔设备的位置。对于每个位置,都与DTS配置信息中的PCIe热插拔设备位置信息进行匹配,如果能够匹配成功,则为该位置分配预留资源信息所指示的预留资源大小。

本发明提供的热插拔设备预留资源分配方法,通过配置DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,预留资源信息指示为该PCIe热插拔设备的位置分配的预留资源;在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据DTS配置信息,为被扫描的PCIe热插拔设备的位置分配预留资源。在DTS配置信息中可以针对不同PCIe热插拔设备位置设置不同的预留资源大小,在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描时,可以根据DTS配置信息为不同位置分配相应预留资源,因此解决了现有技术中PCIe总线为PCIe热插拔设备预留资源的分配方式不灵活的问题。

实施例2、

本发明提供了另一种热插拔设备预留资源分配方法,参照图4中所示,包括:

S201、按照一定数据格式配置DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息。

该步骤与步骤S101相同,下面对DTS配置信息的格式进行具体说明。参照图5中所示。

具体的,预留资源信息可以包括但不限于:预留的I/O(英文全称:input/output,中文全称:输入/输出)空间资源和预留的内存空间资源。

具体的,PCIe热插拔设备位置信息可以包括:PCIe热插拔设备上级桥总线号(英文全称:bus number)、PCIe热插拔设备上级桥设备功能号以及端口号。

DTS配置信息为按照预定格式预配置的,其中所述预定格式包括:指示所述预留的I/O空间资源的字段、指示所述预留的内存空间资源的字段、指示所述PCIe热插拔设备上级桥总线号的字段、指示所述PCIe热插拔设备上级桥设备功能号的字段和指示所述端口号的字段。

其中,PCIe热插拔设备上级桥设备功能号包括设备号(英文全称:device number)和功能号(英文名称:function number),由于在Linux操作系统中设备号占5bit,功能号占3bit,因此可以将设备号和功能号合并为一个字节,因此统称为PCIe热插拔设备上级桥设备功能号。总线号、设备号和功能号三者用于在软件中确定唯一端口,而端口号用于在硬件上确定唯一端口,将总线号、设备号和功能号与端口号映射可以通过软件来访问和控制硬件上的唯一端口。在所确定的硬件上的唯一端口上即可接入PCIe热插拔设备,为该唯一端口分配预留资源,即相当于为待接入的PCIe热插拔设备分配预留资源。

之所以将各个数据统一为4字节是因为在32位操作系统中按照4字节读取数据,便于数据处理。

S202、将DTS配置信息发送给Linux内核。

S203、Linux内核获取并解析上述DTS配置信息,并使用数据结构保存其中的数据。

S204、Linux内核启动过程中,对PCIe总线上能够挂载PCIe热插拔设备的特定位置进行扫描,在扫描过程中使用PCIe总线上特定置处的PCIe总线号与步骤S203中保存的PCIe热插拔设备上级桥总线号进行匹配,并且将PCIe总线上特定位置处的PCIe设备功能号与步骤S203中保存的PCIe热插拔设备上级桥设备功能号进行匹配。

S205、如果匹配成功,则Linux内核按照步骤S203中的预留资源信息为特定位置处分配相应的预留I/O空间资源或预留内存空间资源,同时将分配到的预留I/O空间资源或预留内存空间资源的信息写入PCIe桥设备的寄存器中。

其中,PCIe桥设备的寄存器为图1或图2中所示交换器。

S206、当有PCIe热插拔设备插入该特定位置处时,则Linux内核为该PCIe热插拔设备分配步骤S205中所述的预留I/O空间资源或预留内存空间资源,并且Linux内核将分配到的预留I/O空间资源或预留内存空间资源的信息写入该PCIe热插拔设备的寄存器中。

本发明的实施例提供的热插拔设备预留资源分配方法,按照一定数据格式配置DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息;将DTS配置信息发送给Linux内核;Linux内核解析上述DTS配置信息,并使用数据结构保存其中的数据;Linux内核启动过程中,对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描,在扫描过程中使用各位置处的PCIe总线号与保存的PCIe热插拔设备上级桥总线号进行匹配,并且将PCIe设备功能号与保存的PCIe热插拔设备上级桥设备功能号进行匹配;如果匹配成功,则Linux内核按照预留资源信息分配相应的预留I/O空间资源或预留内存空间资源,同时将分配到的预留I/O空间资源或预留内存空间资源的信息写入PCIe桥设备的寄存器中;当有PCIe热插拔设备插入交换器的下行端口时,PCIe热插拔设备即可以使用分配的预留I/O空间资源或预留内存空间资源,并且Linux内核将分配到的预留I/O空间资源或预留内存空间资源的信息写入该PCIe热插拔设备的寄存器中。在DTS配置信息中可以针对不同PCIe热插拔设备位置设置不同的预留资源大小,在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描时,可以根据DTS配置信息为不同位置分配相应预留资源,因此解决了现有技术中PCIe总线为PCIe热插拔设备预留资源的分配方式不灵活的问题

实施例3、

本发明提供了一种热插拔设备预留资源分配装置,应用于上述热插拔设备预留资源分配方法,作为图2中所述的热插拔设备预留资源分配装置201,可以为Linux内核或者运行Linux内核的装置,参照图6中所示,该装置包括:

获取单元2011,用于获取设备树源文件DTS配置信息,其中,DTS配置信息包含PCIe热插拔设备位置信息和预留资源信息,PCIe热插拔设备位置信息指示在外围器件互联通道PCIe总线上能够挂载PCIe热插拔设备的位置,预留资源信息指示为PCIe热插拔设备的位置分配的预留资源;

分配单元2012,用于在对PCIe总线上能够挂载PCIe热插拔设备的位置进行扫描的过程中,根据获取单元2011配置的DTS配置信息,为被扫描的PCIe热插拔设备的位置分配预留资源。

具体的,参照图7中所示,分配单元2012包括:

匹配子模块20121,用于将所述PCIe总线上特定位置处的PCIe总线号与所述PCIe热插拔设备上级桥总线号进行匹配,并且将所述PCIe总线上所述特定位置处的PCIe设备功能号与所述PCIe热插拔设备上级桥设备功能号进行匹配。

分配子模块20122,用于如果匹配成功,则根据所述预留资源信息为所述特定位置处分配对应的预留I/O空间资源或预留内存空间资源。

所述分配子模块20122,还用于当有PCIe热插拔设备插入所述特定位置处时,为所述PCIe热插拔设备分配所述对应的预留I/O空间资源或预留内存空间资源。

由于本发明实施例中的热插拔设备预留资源分配装置可以用于执行上述方法流程,因此,其所能获得的技术效果也可参考上述方法实施例,本发明实施例在此不再赘述。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:read-only memory,英文简称:ROM)、随机存取存储器(英文全称:random access memory,英文简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1