具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
图1示意性示出了根据本公开实施例的资源分配装置的结构示意图。
如图1所示,资源分配装置100包括第一分配单元110、第二分配单元120和第三分配单元130。
在本公开实施例中,第一分配单元110响应于来自多个第一功能电路的接入请求,将总资源分配给多个第一功能电路,得到分配信息。分配信息表征了满足多个第一功能电路运行需求的运行资源。
在本公开实施例中,多个第一功能电路发起接入PCIe***的请求,第一分配单元110响应于请求,将PCIe***的总资源分配给多个第一功能电路,使多个第一功能电路能基于分配得到运行资源正常运行。
例如,多个第一功能电路为符合PCIe总线标准的PCIe设备。PCIe设备可以为发起访问请求的主设备,也可以为被访问的目标设备。资源分配装置100可以为***组件快速互连PCIe控制器。第一功能电路为通过PCIe总线连接的PCIe设备。例如,第一功能电路可以为显卡、固态硬盘、无线网卡、有线网卡、声卡和视频采集卡等。第一功能电路可以通过M.2接口形式和PCIe标准插槽与PCIe总线连接。例如,显卡***PCIe标准插槽后可以与PCIe总线连接。
例如,第一功能电路与PCIe总线可以形成总线型拓扑结构。例如,总线可以包括多条PCIe总线,一条PCIe总线可以连接多个PCIe设备和/或PCIe桥片。在确定一条PCIe总线无法承载所有PCIe设备的情况下,可以通过增加PCIe总线的方式扩展承载量,多条PCIe总线之间通过PCIe桥片连接。
在本公开实施例中,PCIe***的总资源可以包括PCIe总线(PCIe bus)资源、内存资源、输入输出(Input Out,IO)端口资源和中断资源。
例如,第一分配单元110将PCIe***的PCIe总线资源、内存资源、IO端口资源和中断资源分配给多个第一功能电路,使多个第一功能电路能够正常运行。例如,PCIe***可以包括256个PCIe总线,每个PCIe总线可以连接32个PCIe设备。PCIe***的内存的地址空间为256MB,IO端口的地址空间为4GB。每个PCIe设备可以有6个基地址寄存器(Base AddressRegister,BAR),每个BAR记录一段地址空间,PCIe设备可以访问对应的BAR记录的内存存储地址。
在本公开实施例中,第一分配单元110可以根据深度优先搜索算法(Depth FirstSearch,DFS),扫描多个第一功能电路。第一分配单元110在总资源的资源范围内,对多个第一功能电路进行资源分配,得到分配信息。
例如,资源分配装置100可以为根联合体(Root Complex,RC)控制器。PCIe***的PCIe总线资源、内存资源、IO端口资源和中断资源的分配由RC控制器限定,RC控制器连接多个第一功能电路,多个第一功能电路使用的运行资源不能超过RC控制器限定的总资源的资源范围。
RC控制器接收来自多个第一功能电路的接入请求,第一分配单元110在PCIe***的总资源的资源范围内,为多个第一功能电路分配PCIe总线资源、内存资源、IO端口资源和中断资源。在确定每个第一功能电路分配得到的资源均能够满足各自的运行需求的情况下,可认为多个第一功能成功接入PCIe***,并处于正常运行状态。此时第一分配单元110还可以记录每个第一功能电路分配得到的PCIe总线资源、内存资源、IO端口资源和中断资源,得到分配信息。分配信息表征了满足多个第一功能电路各自运行需求的运行资源。
在本公开实施例中,分配信息记录的运行资源可以是满足多个第一功能电路各自运行需求的最小运行资源,例如,分配信息记录的运行资源为满足多个第一功能电路各自运行需求的最低阈值。在为多个第一功能电路分配的运行资源小于分配信息记录的运行资源时,多个第一功能电路无法正常运行。在为多个第一功能电路分配的运行资源大于或等于分配信息记录的运行资源时,多个第一功能电路可以正常运行。
在本公开实施例中,分配信息可以被记录在存储器中。存储器为非易失性存储器。在PCIe***发生断电或重启的情况时,非易失性存储器内存储的分配信息不会丢失。
在本公开实施例中,第二分配单元120响应于来自第二功能电路的接入请求,将总资源重新分配给为多个第一功能电路和第二功能电路,得到多个第一功能电路的当前运行资源。
例如,第二功能电路为新接入PCIe***的PCIe设备。当第二功能电路接入在PCIe***后,第二分配单元120将PCIe***的总资源重新分配给第二功能电路和原本处于接入状态的多个第一功能电路。
在重新分配PCIe***的总资源时,由于第二功能电路的接入位置可能具有优先级,第二分配单元120可能会优先为第二功能电路分配资源。例如,第二分配单元120在为第二功能电路分配了满足第二功能电路运行需求的运行资源后,再为多个第一功能电路分配运行资源。在这种情况下,如果总资源不足,多个第一功能电路中会存在至少一个第一功能电路当前没有得到满足运行需求的运行资源,从而存在至少一个第一功能电路不能正常工作。因此,第二功能电路接入PCIe***后,导致PCIe***中原本正常工作的第一功能电路无法正常工作。
在本公开实施例中,为了保证原本处于正常运行状态的多个第一功能电路均能继续正常运行状态,第三分配单元130在确定多个第一功能电路的当前运行资源不满足多个第一功能电路运行需求的情况下,根据分配信息,将总资源重新分配给多个第一功能电路。
例如,在确定接入第二功能电路后,原本处于正常运行状态的第一功能电路无法正常运行,第三分配单元130可以从存储器中获取分配信息,并依据分配信息记录的满足多个第一功能电路运行需求的运行资源信息,将原本为多个第一功能电路分配的满足各自运行需求的运行资源再次分配给对应的第一功能电路。这使得第三分配单元130无需重新利用搜索算法为多个第一功能电路分配资源,缩短重新分配资源的时间。
根据本公开实施例,在PCIe***的总资源有限的情况下,优先为先接入PCIe***的多个第一功能电路分配资源,保证第一功能电路的正常工作,提高资源分配装置的易用性。在对多个第一功能电路分配资源后,生成分配信息,并将分配信息存入非易失性存储器中,使得在PCIe***发生断电或重启后,可以直接根据非易失性存储器中的分配信息对多个第一功能电路进行资源分配,从而简化了资源分配流程,提高了资源重新分配的速度,缩短了第一功能电路无法正常运行的时间,减少对第一功能电路正常工作的影响。
本公开还提供了一种第三分配单元为多个第一功能电路重新分配资源的实施例。
在本公开实施例中,在确定多个第一功能电路的当前运行资源不满足多个第一功能电路运行需求的情况下,第三分配单元130为多个第一功能电路重新分配资源包括:根据分配信息,确定满足多个第一功能电路运行需求的目标第一资源;根据当前运行资源,确定为多个第一功能电路分配的当前第一资源;在确定当前第一资源小于目标第一资源的情况下,回收为第二功能电路和多个第一功能电路的当前运行资源,得到总资源;以及根据分配信息,将总资源重新分配给多个第一功能电路。
在本公开实施例中,目标第一资源为分配信息中记录的能够满足多个第一功能电路运行的资源信息。例如,目标第一资源可以是为多个第一功能电路分配的资源范围,例如PCIe***的总资源中内存存储地址范围为0x10000~0x11000,目标第一资源中内存存储地址范围为0x10000~0x10f00,此时满足多个第一功能电路运行需求的最小内存存储地址长度可以为0x000~0xf00。例如,目标第一资源也可以是为多个第一功能电路分配的资源阈值。例如PCIe***的总资源包括256MB的内存资源和4GB的IO端口资源,目标第一资源可以包括200MB的内存资源和3GB的IO端口资源,此时满足多个第一功能电路运行需求的最小内存资源可以为200MB,满足多个第一功能电路运行需求的最小IO端口资源可以为3GB。
当前第一资源为第二功能电路接入PCIe***后,多个第一功能电路分配得到的当前运行资源。当前第一资源可以是当前为多个第一功能电路分配的资源范围,也可以是当前为多个第一功能电路分配的资源阈值。
例如,在第二功能电路所需的运行资源过多时,在第二分配单元120优先为第二功能电路分配了运行资源后,PCIe***没有足够的当前可用资源分配给多个第一功能电路。为了保证PCIe***中原本接入的多个第一功能电路均能保持正常工作状态,第三分配单元130回收第二功能电路和多个第一功能电路分配的资源,得到PCIe***能够分配的总体资源。第三分配单元130根据分配信息,将总体资源重新分配给多个第一功能电路,以恢复多个第一功能电路的工作状态。
在本公开实施例中,在目标第一资源和当前第一资源表示资源范围时,通过比较目标第一资源和当前第一资源表征的范围大小,确定当前第一资源是否满足多个第一功能电路的运行需求。例如,目标第一资源中内存存储地址的范围为0x10000~0x10f00,当前第一资源中内存存储地址的范围为0x10100~0x10f00。第三分配单元130确定当前第一资源中内存存储地址的长度(0x000~0xe00)小于目标第一资源中内存存储地址的长度(0x000~0xf00),当前第一资源无法满足多个第一功能电路的运行需求。在此情况下,第三分配单元130回收为第二功能电路和多个第一功能电路的当前运行资源,得到总资源,并根据分配信息,将总资源重新分配给多个第一功能电路,从而确保多个第一功能电路能够继续正常运行。
在本公开实施例中,在目标第一资源和当前第一资源表示资源阈值时,通过比较目标第一资源表征的资源和当前第一资源表征的资源之间大小,确定当前第一资源是否满足多个第一功能电路的运行需求。例如,目标第一资源中内存资源为200MB,当前第一资源中内存资源为100MB。第三分配单元130确定当前第一资源中内存资源的大小(100MB)小于目标第一资源中内存资源的大小(200MB),当前第一资源无法满足多个第一功能电路的运行需求。在此情况下,第三分配单元130回收为第二功能电路和多个第一功能电路的当前运行资源,得到总资源,并根据分配信息,将总资源重新分配给多个第一功能电路,从而确保多个第一功能电路能够继续正常运行。
在本公开实施例中,第三分配单元130回收为第二功能电路和多个第一功能电路的当前运行资源,得到总资源包括:确定为第二功能电路分配的当前第二资源;将当前第一资源和当前第二资源设置为无效资源;以及根据无效资源,确定总资源。
在确定多个第一功能电路的当前运行资源不满足多个第一功能电路运行需求的情况下,第三分配单元130将已经为多个第一功能电路和第二功能电路分配的资源全部置为无效,从而避免第二功能电路不释放分配得到的运行资源,导致无法为多个第一功能电路分配足够的运行资源,多个第一功能电路无法正常工作。
例如,第三分配单元130可以将为多个第一功能电路和第二功能电路分配到的内存存储地址全部置为无效存储地址,使得多个第一功能电路和第二功能电路均释放分配得到的内存存储地址,整理所有无效存储地址,得到PCIe***的总资源。第三分配单元130根据分配信息,重新为多个第一功能电路分配资源,确保多个第一功能电路快速恢复到正常工作状态。
本公开还提供了一种第二分配单元为第二功能电路分配资源的实施例。
在本公开实施例中,第二分配单元120响应于来自第二功能电路的接入请求,获取总资源的当前可用资源;以及在确定当前可用资源满足第二功能电路的运行需求的情况下,从当前可用资源中为第二功能电路分配运行资源。
例如,PCIe***的当前可用资源为PCIe***中为多个第一功能电路分配运行资源后剩余的未被占用的资源。
在本公开实施例中,多个第一功能电路和第二功能电路可以为均支持热插拔的PCIe设备。在第二功能电路接入PCIe***时,PCIe***不用断电或重启。在确定第二功能电路接入PCIe***后,PCIe***的当前可用资源满足第二功能电路运行需求的情况下,第二分配单元120可以从当前可用资源中为第二功能电路分配运行资源。在确定第二功能电路接入PCIe***后,PCIe***的当前可用资源不满足第二功能电路运行需求的情况下,第二分配单元120不为第二功能电路分配资源,以确保多个第一功能电路的正常工作状态。
在本公开实施例中,多个第一功能电路和第二功能电路可以为不支持PCIe热插拔的PCIe设备,或者在第二功能电路接入PCIe***后,PCIe***需要通过重启来重新分配资源。在确定第二功能电路接入PCIe***后,PCIe***的总资源满足多个第一功能电路和第二功能电路运行需求的情况下,第二分配单元120可以根据搜索算法,将总资源重新分配给多个第一功能电路和第二功能电路,从而多个第一功能电路和第二功能电路均可以基于分配得到的运行资源正常运行。在确定第二功能电路接入PCIe***后,PCIe***的总资源不能同时满足多个第一功能电路和第二功能电路运行需求的情况下,第二分配单元120不为第二功能电路分配资源,从而在资源有限的情况下,保证原本接入PCIe***的第一功能电路可以正常工作,提高资源分配的易用性。
在本公开实施例中,多个第一功能电路可以为原本已经接入PCIe***并处于正常工作状态的PCIe设备,第二功能电路可以为当前请求接入PCIe***的新PCIe设备。在第二功能电路与PCIe***在物理上建立连接后,第二功能电路向资源分配装置100发送接入请求。在确定PCIe***没有足够的可用资源分配给第二功能电路的情况下,资源分配装置100不为第二功能电路分配资源。在这种情况下,第二功能电路与PCIe***可以依然保持物理连接,但第二功能电路实际处于断开状态(未工作状态)。在确定PCIe***有足够的可用资源分配给第二功能电路的情况下,资源分配装置100为第二功能电路分配资源,在这种情况下,第二功能电路处于接入状态(正常工作状态)。此时,原本已经接入的多个第一功能电路和新接入的第二功能电路均处于正常工作状态,可认为新接入的第二功能电路也转变了第一功能电路,即此时的第二功能电路也为已经接入PCIe***并处于正常工作状态的PCIe设备。
根据本公开实施例,在PCIe***中多个第一功能电路的正常工作时,第二功能电路与PCIe***建立物理连接后,在PCIe***没有足够的可用资源分配给当前请求接入第二功能电路时,第二分配单元120可以不为第二功能电路分配运行资源,使第二功能电路处于未工作状态,从而可以避免额外执行断开第二功能电路与PCIe***物理连接的操作。在第二分配单元120为第二功能电路分配资源导致多个第一功能电路无法正常工作的情况下,第三分配单元120可以根据分配信息为多个第一功能电路重新分配资源,恢复多个第一功能电路的工作状态,避免了重新执行启动PCIe***、DFS搜索和配置资源等操作,简化了资源分配流程,提高了资源分配速度。
图2示意性示出了根据本公开另一实施例的资源分配装置的结构示意图。
如图2所示,资源分配装置200包括第一分配单元210、第二分配单元220、第三分配单元230、更新单元240和发送单元250。
在本公开实施例中,第一分配单元210、第二分配单元220和第三分配单元230分别与第一分配单元110、第二分配单元120和第三分配单元130类似,为了简明,本公开在此处不再赘述。
在本公开实施例中,更新单元240在确定多个第一功能电路的当前运行资源满足多个第一功能电路运行需求的情况下,更新分配信息,更新后的分配信息表征了满足多个第一功能电路和第二功能电路运行需求的运行资源。
例如,在第二功能电路接入PCIe***后,第二分配单元220为多个第一功能电路和第二功能电路重新分配资源。在确定当前为多个第一功能电路和第二功能电路分配的当前运行资源均满足各自的运行需求时,认为第二功能电路成功接入PCIe***,第二分配单元220分配的资源让多个第一功能电路和第二功能电路均处于正常工作状态中。更新单元240利用第二分配单元220的分配结果,更新分配信息,将第二分配单元220的分配结果作为当前最新的分配资源。当前最新的分配资源记录了满足多个第一功能电路和第二功能电路运行需求的运行资源。此时,更新单元240还可以将第二功能电路作为新增的第一功能电路记录在分配信息中,当前最新的分配资源记录了满足最新的多个第一功能电路运行需求的运行资源。
在本公开实施例中,更新单元240还可以响应于来自多个第一功能电路中至少一个第一功能电路的断开请求,获取响应于来自多个第一功能电路中至少一个第一功能电路的断开请求,获取多个第一功能电路中除至少一个第一功能电路之外的所有第一功能电路的当前运行资源;以及根据当前运行资源,更新分配信息。
例如,第一分配单元210为多个第一功能电路分配运行资源后,多个第一功能电路处于正常工作状态。当多个第一功能电路中存在任意一个或多个第一功能电路断开与PCIe***的连接时,在确定重启PCIe***的情况下,第一分配单元210可以将PCIe***的总资源重新分配给原本多个第一功能电路中还处于连接状态的所有第一功能电路。例如,多个第一功能电路包括8个第一功能电路。当8个第一功能电路中的3个第一功能电路断开与PCIe***的连接时,在确定重启PCIe***的情况下,第一分配单元210可以将PCIe***的总资源重新分配给剩余的5个第一功能电路,此时剩余的5个第一功能电路处于连接状态。
更新单元240可以利用第一分配单元210的分配结果,更新分配信息,将第一分配单元210的分配结果作为当前最新的分配信息。当前最新的分配信息记录了满足当前依旧处于连接状态的所有第一功能电路运行需求的运行资源。
例如,当多个第一功能电路中存在第一功能电路断开与PCIe***的连接时,在确定不重启PCIe***的情况下,更新单元240可以从分配信息中获取原本为断开连接的第一功能电路分配的运行资源,将该运行资源记录为当前可用资源,并利用该运行资源,更新分配信息,此时将还处于连接状态的第一功能电路的运行资源作为当前最新的分配信息。
在本公开实施例中,发送单元250在确定多个第一功能电路的当前运行资源不满足多个第一功能电路运行需求的情况下,发送提示信息,提示信息表征了第二功能电路处于断开状态。
例如,在第二功能电路接入PCIe***后,第二分配单元220为多个第一功能电路和第二功能电路重新分配资源。在确定当前为多个第一功能电路分配的当前运行资源不满足的运行需求时,第三分配单元230回收为多个第一功能电路和第二功能电路分配的资源,并基于分配信息将PCIe***的总资源重新分配给多个第一功能电路。在此种情况下,第二功能电路没有得到满足运行需求的运行资源,发送单元250可以发出提示信息,告知使用者知由于无法为新接入的第二功能电路分配资源而导致新接入的第二功能电路无法工作,以便使用者寻找解决方案。例如,增大PCIe***的总资源。
例如,在第二功能电路接入PCIe***后,第二分配单元220为多个第一功能电路和第二功能电路重新分配资源。第二分配单元220当前为多个第一功能电路分配的当前运行资源满足的运行需求,但当前为第二功能电路分配的当前运行资源可能不满足的运行需求。在此种情况下,第二功能电路也没有得到满足运行需求的运行资源,发送单元250可以发出提示信息,告知使用者知由于无法为新接入的第二功能电路分配资源而导致新接入的第二功能电路无法工作。
根据本公开实施例,更新单元240可以实时根据资源分配情况及时更新分配信息,使得更新后的分配信息可以记录PCIe***中处于正常工作状态的最新的多个第一功能电路的资源分配情况,使得在原本处于正常工作状态的多个第一功能电路无法正常工作时,可以根据最新的分配信息及时恢复多个第一功能电路的工作状态。此外,在新接入的第二功能电路没有分配到足够的资源时,发送单元250发送提示信息,使使用者可以及时知悉第二功能电路的运行状态,解决资源无法分配的问题。
图3示意性示出了根据本公开实施例的资源分配的示意图。图3示例性地示出了图1所示的资源分配装置100多个第一功能电路分配资源情况。
如图3所示,多个第一功能电路包括PCIe设备1、PCIe设备21、PCIe设备22、PCIe设备41、PCIe设备61、PCIe设备81、PCIe设备82、PCIe桥片1、PCIe桥片2、PCIe桥片41和PCIe桥片61。
资源分配装置100可以对电子设备内的PCIe设备和PCIe桥片进行扫描,得到多个PCIe设备和多个PCIe桥片,并确定PCIe***中可以为多个PCIe设备和多个PCIe桥片分配的总资源范围。
如图3所示,PCIe***的内存存储基地址memory base为0x10000,内存存储上限地址memory limit为0x1000。例如,PCIe***的内存存储地址的范围为0x10000~0x11000。
PCIe设备1连接的PCIe总线为bus 0,PCIe设备21和PCIe设备22连接的PCIe总线为bus 2,PCIe设备41连接的PCIe总线为bus4,PCIe设备61连接的PCIe总线为bus 6,PCIe设备81和PCIe设备82连接的PCIe总线为bus 8。PCIe总线bus 0和PCIe总线bus 2通过PCIe桥片1连接,PCIe总线bus 0和PCIe总线bus 4通过PCIe桥片2连接,PCIe总线bus 4和PCIe总线bus6通过PCIe桥片41连接,PCIe总线bus 6和PCIe总线bus 8通过PCIe桥片61连接。
例如,在PCIe总线bus 0中,PCIe桥片1的memory base为0x10000,memory limit为0x100,PCIe桥片1分配得到的内存存储地址范围为0x10000~0x10100。PCIe桥片2的memorybase为0x10100,memory limit为0x100,PCIe桥片2分配得到的内存存储地址范围为0x10100~0x10200,PCIe设备1可以访问的内存存储地址为0x10200和0x102f0。
在PCIe总线bus 2中,PCIe设备21和PCIe设备22可以访问的内存存储地址范围属于PCIe桥片1分配得到的内存存储地址范围0x10000~0x10100。PCIe设备21可以访问的内存存储地址为0x10000,PCIe设备22可以访问的内存存储地址为0x100f0。
在PCIe总线bus 4中,PCIe设备41和PCIe桥片41可以访问的内存存储地址范围属于PCIe桥片2分配得到的内存存储地址范围0x10100~0x10200。PCIe桥片41的memory base为0x10100,memory limit为0xf0,PCIe桥片41分配得到的内存存储地址范围为0x10100~0x101f0。PCIe设备41可以访问的内存存储地址为0x101f0。
在PCIe总线bus 6中,PCIe设备61和PCIe桥片61可以访问的内存存储地址范围属于PCIe桥片41分配得到的内存存储地址范围0x10100~0x101f0。PCIe设备61可以访问的内存存储地址为0x10100和0x10110。PCIe桥片61的memory base为0x10120,memory limit为0xd0,PCIe桥片41分配得到的内存存储地址范围为0x10120~0x101f0。
在PCIe总线bus 8中,PCIe设备81和PCIe桥片81可以访问的内存存储地址范围属于PCIe桥片61分配得到的内存存储地址范围0x10120~0x101f0。PCIe设备81可以访问的内存存储地址为0x10120,PCIe设备82可以访问的内存存储地址为0x10130和0x10140。
在本公开实施例中,PCIe***可以被分配的内存存储地址范围为0x10000~0x11000,PCIe总线为32个bus。在PCIe***接入了如图3桥片的多个PCIe设备和多个PCIe桥片后,对多个PCIe设备和多个PCIe桥片分配的PCIe总线为bus 0、bus 2、bus 4、bus 6和bus8。对多个PCIe设备和多个PCIe桥片分配的内存存储地址范围为0x10000~0x102f0。因此,在PCIe***接入了如图3所示的多个PCIe设备和多个PCIe桥片后,PCIe***剩余的可用PCIe总线为27个bus,剩余的可用内存存储地址范围为0x10300~0x11000。
在PCIe***中需要接入新的PCIe设备和/或PCIe桥片时,可以将可以PCIe总线和可以内存存储地址分配给新接入的PCIe设备和/或PCIe桥片。
根据本公开实施例,在PCIe***资源有限的情况下,优先为先接入PCIe***的多个第一功能电路分配资源,保证多个第一功能电路的正常工作,提高资源分配装置的易用性。在对多个第一功能电路分配资源后,生成分配信息,可以将分配信息存入非易失性存储器中,使得在PCIe***发生断电或重启后,在重新恢复PCIe***的资源分配时,可以直接根据分配信息重新对多个第一功能电路进行资源分配,从而简化了资源流程,提高了资源重新分配的速度,减少对第一功能电路正常工作的影响。
图4示意性示出了根据本公开另一实施例的资源分配的示意图。图4示例性地示出了图1所示的资源分配装置100对多个第一功能电路和第二功能电路分配资源情况。
如图4所示,PCIe***包括PCIe设备1、PCIe设备21、PCIe设备22、PCIe设备23、PCIe设备41、PCIe设备61、PCIe设备81、PCIe设备82、PCIe桥片1、PCIe桥片2、PCIe桥片41和PCIe桥片61。
在本公开实施例中,PCIe设备23为新接入的第二功能电路。
如图4所示,PCIe***的内存存储基地址memory base为0x10000,内存存储上限地址memory limit为0x1000。例如,PCIe***的内存存储地址的范围为0x10000~0x11000。PCIe设备1连接的PCIe总线为bus 0,PCIe设备21、PCIe设备22和PCIe设备23连接的PCIe总线为bus 2,PCIe设备41连接的PCIe总线为bus 4,PCIe设备61连接的PCIe总线为bus 6,PCIe设备81和PCIe设备82连接的PCIe总线为bus 8。PCIe总线bus 0和PCIe总线bus 2通过PCIe桥片1连接,PCIe总线bus 0和PCIe总线bus 4通过PCIe桥片2连接,PCIe总线bus 4和PCIe总线bus 6通过PCIe桥片41连接,PCIe总线bus 6和PCIe总线bus 8通过PCIe桥片61连接。
在PCIe设备23接入电子设备后,资源分配装置优先为PCIe设备23分配资源。
例如,在PCIe总线bus 0中,资源分配装置优先为PCIe桥片1分配内存存储地址。PCIe桥片1的memory base为0x10000,memory limit为0xf00,PCIe桥片1分配得到的内存存储地址范围为0x10f00~0x10f00。
在PCIe总线bus 2中,PCIe设备21、PCIe设备22和PCIe设备23可以访问的内存存储地址范围属于PCIe桥片1分配得到的内存存储地址范围0x10000~0x10f00。PCIe设备21可以访问的内存存储地址为0x10000,PCIe设备22可以访问的内存存储地址为0x100f0,PCIe设备23可以访问的内存存储地址为0x10100和0x10e00。
资源分配装置再为PCIe桥片2分配内存存储地址。PCIe桥片2的memory base为0x10f00,memory limit为0x100,PCIe桥片2分配得到的内存存储地址范围为0x10f00~0x11000。
在PCIe总线bus 4中,PCIe设备41和PCIe桥片41可以访问的内存存储地址范围属于PCIe桥片2分配得到的内存存储地址范围0x10f00~0x11000。PCIe桥片41的memory base为0x10f00,memory limit为0xf0,PCIe桥片41分配得到的内存存储地址范围为0x10f00~0x10ff0。PCIe设备41可以访问的内存存储地址为0x10ff0。
在PCIe总线bus 6中,PCIe设备61和PCIe桥片61可以访问的内存存储地址范围属于PCIe桥片41分配得到的内存存储地址范围0x10f00~0x10ff0。PCIe设备61可以访问的内存存储地址为0x10f00和0x10f10。PCIe桥片61的memory base为0x10f20,memory limit为0xd0,PCIe桥片41分配得到的内存存储地址范围为0x10f20~0x10ff0。
在PCIe总线bus 8中,PCIe设备81和PCIe桥片81可以访问的内存存储地址范围属于PCIe桥片61分配得到的内存存储地址范围0x10f20~0x10ff0。PCIe设备81可以访问的内存存储地址为0x10f20,PCIe设备82可以访问的内存存储地址为0x10f30和0x10f40。
资源分配装置为PCIe桥片1和PCIe桥片2分配资源后,PCIe***中没有足够的可用资源可以分配给PCIe设备1。因此,在PCIe设备23接入电子设备后,由于PCIe设备23所需的资源过多,导致PCIe***没有足够的资源分配给PCIe设备1,供PCIe设备1正常工作。
资源分配装置需要收回为多个PCIe设备和多个PCIe桥片分配的内存存储地址,并根据资源分配信息,为PCIe***中原本的多个PCIe设备和多个PCIe桥片分配资源,使PCIe***中原本的多个PCIe设备和多个PCIe桥片的资源恢复为如图3所示的资源分配情况。
图5示意性示出了根据本公开另一实施例的资源分配的示意图。
图5示例性地示出了在部分第一功能电路断开连接后,图1所示的资源分配装置100对多个第一功能电路分配资源情况。
如图5所示,PCIe***包括PCIe设备1、PCIe设备41、PCIe设备61、PCIe设备81、PCIe设备82、PCIe桥片2、PCIe桥片41和PCIe桥片61。
在本公开实施例中,相比于图3所示的资源分配情况,PCIe设备21和PCIe设备22断开与电子设备的连接。
如图5所示,PCIe***的内存存储基地址memory base为0x10000,内存存储上限地址memory limit为0x1000。例如,PCIe***的内存存储地址的范围为0x10000~0x11000。
PCIe设备1连接的PCIe总线为bus 0,PCIe设备41连接的PCIe总线为bus 4,PCIe设备61连接的PCIe总线为bus 6,PCIe设备81和PCIe设备82连接的PCIe总线为bus 8。PCIe总线bus 0和PCIe总线bus 4通过PCIe桥片2连接,PCIe总线bus 4和PCIe总线bus 6通过PCIe桥片41连接,PCIe总线bus 6和PCIe总线bus 8通过PCIe桥片61连接。
例如,在PCIe总线bus 0中,PCIe桥片2的memory base为0x10000,memory limit为0x100,PCIe桥片2分配得到的内存存储地址范围为0x10000~0x10100,PCIe设备1可以访问的内存存储地址为0x10100和0x101f0。
在PCIe总线bus 4中,PCIe设备41和PCIe桥片41可以访问的内存存储地址范围属于PCIe桥片2分配得到的内存存储地址范围0x10000~0x10100。PCIe桥片41的memory base为0x10000,memory limit为0xf0,PCIe桥片41分配得到的内存存储地址范围为0x10000~0x100f0。PCIe设备41可以访问的内存存储地址为0x100f0。
在PCIe总线bus 6中,PCIe设备61和PCIe桥片61可以访问的内存存储地址范围属于PCIe桥片41分配得到的内存存储地址范围0x10000~0x100f0。PCIe设备61可以访问的内存存储地址为0x10000和0x1000。PCIe桥片61的memory base为0x10020,memory limit为0xd0,PCIe桥片41分配得到的内存存储地址范围为0x10020~0x100f0。
在PCIe总线bus 8中,PCIe设备81和PCIe桥片81可以访问的内存存储地址范围属于PCIe桥片61分配得到的内存存储地址范围0x10020~0x100f0。PCIe设备81可以访问的内存存储地址为0x10020,PCIe设备82可以访问的内存存储地址为0x10030和0x10040。
在本公开实施例中,在PCIe设备21和PCIe设备22断开与PCIe***的连接后,资源分配装置对剩余的多个PCIe设备和多个PCIe桥片分配的PCIe总线为bus 0、bus 4、bus 6和bus 8。对多个PCIe设备和多个PCIe桥片分配的内存存储地址范围为0x10000~0x101f0。因此,在PCIe设备21和PCIe设备22断开与PCIe***的连接后,相比于图3所示的资源分配情况,更新后的可用资源包括bus 2为可用PCIe总线和可用内存存储地址范围为0x10200~0x11000。图5所示的更新的分配信息被记录在存储器中。
图6示意性示出了根据本公开实施例的电子设备的结果示意图。
如图6所示,电子设备600包括总线610、多个第一功能电路620、处理器640和存储器650。多个第一功能电路620包括第一功能电路6201、第一功能电路6202和第一功能电路6203。第一功能电路6201、第一功能电路6202和第一功能电路6203通过总线610与处理器640连接,存储器650通过总线610与处理器640连接。在本公开实施例中,对电子设备600中的第一功能电路的数量不作限定,本公开所示出的第一功能电路的数量仅为示意性说明。
在本公开实施例中,总线610为PCIe总线。第一功能电路6201、第一功能电路6202和第一功能电路6203通过PCIe总线连接的PCIe设备。第一功能电路6201、第一功能电路6202和第一功能电路6203可以通过M.2接口形式或PCIe标准插槽分别与总线610连接。例如,第一功能电路6201可以为显卡,显卡***PCIe标准插槽后可以与PCIe总线连接。
在本公开实施例中,电子设备600还包括第二功能电路630。例如,第二功能电路630可以为新接入电子设备600的PCIe设备。接入电子设备600的第二功能电路630通过总线610与处理器640连接。例如,第二功能电路630也可以通过M.2接口形式或PCIe标准插槽与总线610连接。
在本公开实施例中,处理器640配置为:将总资源分配给多个第一功能电路620,得到分配信息,分配信息表征了满足多个第一功能电路620运行需求的运行资源;响应于来自第二功能电路630的接入请求,将总资源重新分配给为多个第一功能电路620和第二功能电路630,得到多个第一功能电路620的当前运行资源;以及在确定当前运行资源不满足多个第一功能电路620运行需求的情况下,根据分配信息,将总资源重新分配给多个第一功能电路620。
在本公开实施例中,处理器640将分配信息写入存储器650,存储器650可以为非易失性存储器。在电子设备600发生断电或重启的情况时,非易失性存储器内存储的资源分配信息不会丢失。
在本公开实施例中,处理器640执行的操作与资源分配装置100执行的操作类似,为了简明此处不再赘述。例如,资源分配装置100可以由处理器640运行。
根据本公开的实施例,前文所述实施例中的资源分配装置100可以位于处理器640中。资源分配装置100中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,资源分配装置100中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上***、基板上的***、封装上的***、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,资源分配装置100中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图7示意性示出了根据本公开实施例的资源分配方法的流程图。
如图7所示,该实施例的资源分配方法包括操作S710~操作S730。
在操作S710,响应于来自多个第一功能电路的接入请求,将总资源分配给多个第一功能电路,得到分配信息,分配信息表征了满足多个第一功能电路运行需求的运行资源。
在本公开实施例中,操作S710由前文所述实施例中的第一分配单元110执行,与上述第一分配单元110执行的操作相对应,为了简明此处不再赘述。
在操作S720,响应于来自第二功能电路的总线接入请求,将总资源重新分配给为多个第一功能电路和第二功能电路,得到多个第一功能电路的当前运行资源。
在本公开实施例中,操作S720由前文所述实施例中的第一分配单元120执行,与上述第一分配单元120执行的操作相对应,为了简明此处不再赘述。
在操作S730,在确定当前运行资源不满足多个第一功能电路运行需求的情况下,根据分配信息,将总资源重新分配给多个第一功能电路。
在本公开实施例中,操作S730由前文所述实施例中的第一分配单元130执行,与上述第一分配单元130执行的操作相对应,为了简明此处不再赘述。
图8示意性示出了根据本公开实施例的适于实现资源分配方法的电子设备的方框图。
如图8所示,根据本公开实施例的电子设备800包括处理器801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 803中,存储有电子设备800操作所需的各种程序和数据。处理器801、ROM802以及RAM 803通过总线804彼此相连。处理器801通过执行ROM 802和/或RAM 803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 802和RAM 803以外的一个或多个存储器中。处理器801也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备800还可以包括输入/输出(I/O)接口805,输入/输出(I/O)接口805也连接至总线804。电子设备800还可以包括连接至I/O接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/***中所包含的;也可以是单独存在,而未装配入该设备/装置/***中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 802和/或RAM 803和/或ROM 802和RAM 803以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机***中运行时,该程序代码用于使计算机***实现本公开实施例所提供的资源分配方法。
在该计算机程序被处理器801执行时执行本公开实施例的***/装置中限定的上述功能。根据本公开的实施例,上文描述的***、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分809被下载和安装,和/或从可拆卸介质811被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的***中限定的上述功能。根据本公开的实施例,上文描述的***、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。