首页 / 专利库 / 电脑图像 / 图形处理单元 / 数据处理系统及操作方法、用于数据处理系统的硬件单元

数据处理系统及操作方法、用于数据处理系统硬件单元

阅读:616发布:2020-05-08

专利汇可以提供数据处理系统及操作方法、用于数据处理系统硬件单元专利检索,专利查询,专利分析的服务。并且数据处理 系统及操作方法、用于 数据处理系统 的 硬件 单元。一种数据处理系统包括 加速 器,该加速器充当用于在各 虚拟机 中执行的多个应用的共用共享资源。数据处理系统包括 接口 映射单元,该接口映射单元促进从应用向加速器提交任务。接口映射单元包括物理寄存器,该物理寄存器充当用于加速器的物理寄存器输入/输出接口。接口映射单元将多个虚拟加速器输入/输出接口暴露于应用,然后经由接口映射单元动态映射到物理寄存器输入/输出接口,以允许应用 访问 给定物理寄存器输入/输出接口并且从而向给定物理寄存器输入/输出接口提交任务。,下面是数据处理系统及操作方法、用于数据处理系统硬件单元专利的具体信息内容。

1.一种数据处理系统,该系统包括:
一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;以及
加速器,所述加速器提供共享资源,所述加速器被配置为执行针对各操作系统中包括的所述一个或更多个应用中的多个应用的任务;并且
其中,所述数据处理系统还包括:
一组或更多组物理寄存器,所述物理寄存器充当向所述加速器提交任务的一个或更多个物理寄存器输入/输出接口;以及
接口映射单元,该接口映射单元向所述一个或更多个应用中的所述多个应用提供多个虚拟加速器输入/输出接口,所述多个虚拟加速器输入/输出接口被分配给各个应用,所述接口映射单元被构造成将所述多个虚拟加速器输入/输出接口动态地映射到所述一个或更多个物理寄存器输入/输出接口,从而通过将已被分配给所考虑的应用的虚拟加速器输入/输出接口映射到为了向所述加速器提交任务而设置的所述一个或更多个物理寄存器输入/输出接口中的空闲物理寄存器输入/输出接口,使得能够向所述加速器分派来自所述一个或更多个应用中的所述多个应用的任务,
其中,所述多个虚拟加速器输入/输出接口中的各虚拟加速器输入/输出接口具有关联的分配寄存器,并且为了应用能够向所述加速器分派任务,所述应用读取与分配给该应用的虚拟加速器输入/输出接口关联的分配寄存器,由此触发向所述应用分配空闲物理寄存器输入/输出接口,
其中,所述接口映射单元被构造成,响应于应用读取与已分配给该应用的虚拟加速器输入/输出接口关联的所述分配寄存器:
确定所述一个或更多个物理寄存器输入/输出接口中的物理寄存器输入/输出接口当前是否空闲,并且如果是,则将该空闲物理寄存器输入/输出接口映射到已分配给所述应用的虚拟加速器输入/输出接口,并且响应于所述分配寄存器被读取,从所述分配寄存器向所述应用返回指示物理寄存器输入/输出接口当前空闲且已分配给所述应用的值,其中,所述值用作所述任务的标识符,该标识符唯一地标识所述应用所分派的任务,并且其中,响应于从所述接口映射单元接收到唯一地标识所述任务的所述值,所述应用将任务描述数据和/或指向任务描述数据的指针写入与所分配的物理寄存器输入/输出接口相关联的寄存器,并且将所述任务分派给所述加速器。
2.根据权利要求1所述的系统,其中,所述加速器包括以下中的一种:图形处理单元、加密加速器、视频加速器、网络接口、数字信号处理器DSP、或音频硬件
3.根据权利要求1或2所述的系统,其中,所述虚拟加速器输入/输出接口根据所述操作系统的要求而被映射到应用,和/或所述虚拟加速器输入/输出接口根据管理器的要求而被映射到操作系统。
4.根据权利要求1所述的系统,其中,当物理寄存器输入/输出接口被分配给应用时,所述应用接着通过将适当数据设置在所考虑的所述物理寄存器输入/输出接口的寄存器中,将其需要的对所述任务的适当描述发送给所述加速器。
5.根据权利要求1所述的系统,其中,对物理寄存器输入/输出接口的请求和将物理寄存器输入/输出接口向应用分配和后续向所述加速器提交所述任务作为原子操作执行。
6.根据权利要求1所述的系统,其中,如果应用对物理寄存器输入/输出接口分配的请求不成功,则所述应用响应于特定事件重试其分配请求,并且所述数据处理系统被构造成用信号通知该事件以触发由应用进行的分配请求的重试。
7.根据权利要求6所述的系统,其中,等待物理寄存器输入/输出接口分配的应用将重试它们的请求达所选时间段和/或重试次数,但如果仍然不成功,则被解除调度以免重试它们的分配请求,直到发生特定事件为止,该特定事件触发重新调度所述应用以再次开始重试其分配请求。
8.根据权利要求7所述的系统,其中,等待物理寄存器输入/输出接口分配的应用在解除调度超时处理过期之后被解除调度以免重试它们的分配请求,各应用具有与其关联的用于解除调度的目的的解除调度超时值,并且所有处于等待中的应用共享相同的解除调度超时计数器,所述解除调度超时计数器使用当前处于等待中的应用的最早超时值。
9.根据权利要求1所述的系统,其中,所述接口映射单元还支持并暴露一个或更多个操作系统管理接口和/或一个或更多个管理器管理接口,以用于管理进行中的加速器任务。
10.根据权利要求1所述的系统,所述数据处理系统还包括虚拟加速器输入/输出接口属性表,该虚拟加速器输入/输出接口属性表包含由管理器和/或操作系统提供的针对加速器任务的提交所需要的数据。
11.一种操作数据处理系统的方法,该数据处理系统包括:
一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;
加速器,该加速器提供共享资源,所述加速器被配置为执行针对各操作系统中包括的所述一个或更多个应用中的多个应用的任务;
一组或更多组物理寄存器,该一组或更多组物理寄存器充当向所述加速器提交任务的一个或更多个物理寄存器输入/输出接口;以及
接口映射单元,该接口映射单元使多个虚拟加速器输入/输出接口暴露于所述一个或更多个应用中的所述多个应用,所述多个虚拟加速器输入/输出接口被分配给各个应用,并且被构造成将所述多个虚拟加速器输入/输出接口动态地映射到用于所述加速器的所述一个或更多个物理寄存器输入/输出接口,其中,各虚拟加速器输入/输出接口具有关联的分配寄存器;
所述方法包括以下步骤:
应用在其希望向所述加速器分派任务时,读取与分配给该应用的虚拟加速器输入/输出接口关联的分配寄存器,由此触发向所述应用分配空闲物理寄存器输入/输出接口:
所述接口映射单元响应于所述应用读取与已分配给该应用的虚拟加速器输入/输出接口关联的分配寄存器,确定用于向所述加速器提交任务的物理寄存器输入/输出接口是否空闲,并且
在物理寄存器输入/输出接口空闲时,所述接口映射单元将所述虚拟加速器输入/输出接口映射到所述空闲物理寄存器输入/输出接口,从而允许所述应用向所述加速器分派任务,并且所述分配寄存器向所述应用返回指示物理寄存器输入/输出接口当前空闲且已分配给该应用的值,其中,所述值用作标识符,该标识符唯一地标识所述应用所分派的任务,其中,响应于从所述接口映射单元接收到唯一地标识所述任务的所述值,所述应用将任务描述数据和/或指向任务描述数据的指针写入与所分配的物理寄存器输入/输出接口相关联的寄存器,并且将所述任务分派给所述加速器。
12.根据权利要求11所述的方法,其中,所述加速器包括以下中的一种:图形处理单元、加密加速器、视频加速器、网络接口、数字信号处理器DSP、或音频硬件。
13.根据权利要求11或12所述的方法,其中,所述虚拟加速器输入/输出接口根据所述操作系统的要求而被映射到应用,和/或所述虚拟加速器输入/输出接口根据管理器的要求而被映射到操作系统。
14.根据权利要求11所述的方法,其中,当物理寄存器输入/输出接口被分配给应用时,所述应用接着通过将适当数据设置在所考虑的所述物理寄存器输入/输出接口的寄存器中,将其需要的对所述任务的适当描述发送给所述加速器。
15.根据权利要求11所述的方法,其中,对物理寄存器输入/输出接口的请求和将物理寄存器输入/输出接口向应用分配和后续向所述加速器提交所述任务作为原子操作执行。
16.根据权利要求11所述的方法,所述方法还包括:如果应用对物理寄存器输入/输出接口分配的请求不成功,则所述应用响应于由所述数据处理系统用信号通知特定事件,重试其分配请求。
17.根据权利要求16所述的方法,所述方法还包括等待物理寄存器输入/输出接口分配的应用重试其请求达所选时间段和/或重试次数,但如果仍然不成功,则被解除调度应用以免重试它们的分配请求,直到发生特定事件为止,该特定事件触发重新调度所述应用以再次开始重试其分配请求。
18.根据权利要求17所述的方法,其中,等待物理寄存器输入/输出接口分配的应用在解除调度超时处理期满之后被解除调度以免重试它们的分配请求,各应用具有与其关联的用于解除调度的目的的解除调度超时值,并且所有处于等待中的应用共享相同的解除调度超时计数器,所述解除调度超时计数器使用当前处于等待中的应用的最早超时值。
19.根据权利要求11所述的方法,其中,所述接口映射单元还支持并暴露一个或更多个操作系统管理接口和/或一个或更多个管理器管理接口,以用于管理进行中的加速器任务。
20.根据权利要求11所述的方法,所述方法还包括在虚拟加速器输入/输出接口属性表中存储由管理器和/或操作系统提供的针对加速器任务的提交所需要的数据。
21.一种数据处理系统,该数据处理系统包括:
一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用,各应用在执行时执行一个或更多个应用线程,各个应用线程具有关联的事件超时时间段值;以及
事件超时寄存器,当应用线程在能够继续其应用线程的操作之前等待事件发生时,所述应用线程能够将关联的事件超时时间段值写入到该事件超时寄存器中,其中,各个应用的关联的事件超时时间段值指示一时间段,在该时间段后,如果所述应用线程等待的事件尚未发生,则所述应用线程将请求被解除调度,
其中,所述事件超时寄存器在所述一个或更多个应用中的多个应用之间共享,使得来自所述多个应用的线程各将它们的关联的事件超时时间段值写到同一共享事件超时寄存器,
其中,在共享所述事件超时寄存器的所述多个应用的所述应用线程中的每一个应用线程开始等待事件发生时,该应用线程将关联的事件超时时间段值写入所述事件超时寄存器,并且
其中,所述数据处理系统维持解除调度超时计数器,其中,如果所述事件超时寄存器被刚刚开始等待的应用线程写入并且所述刚刚开始等待的应用线程的关联的事件超时时间段值比当前的解除调度超时计数器值小,则将超时计数更新为所述刚刚开始等待的应用线程的所述事件超时时间段值,其中,当所述解除调度超时计数器被用于以信号通知解除调度事件时,已经将关联的事件超时时间段值写入所述事件超时寄存器的所有等待中的应用线程被解除调度。
22.一种用于数据处理系统中的硬件单元,所述数据处理系统包括:一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;加速器,该加速器提供共享资源,所述加速器被配置为执行针对各操作系统中包括的所述一个或更多个应用中的多个应用的任务;和一组或更多组物理寄存器,所述物理寄存器充当能够用于向所述加速器提交任务的一个或更多个物理寄存器输入/输出接口,其中,所述硬件单元被构造成:
将多个虚拟加速器输入/输出接口暴露于在处理器上执行的多个应用,并且将所述多个虚拟加速器输入/输出接口动态地映射到用于加速器的一个或更多个物理寄存器输入/输出接口,从而通过将已被分配给应用的虚拟加速器输入/输出接口映射到要用于向加速器提交任务的所述一个或更多个物理寄存器输入/输出接口中的空闲物理寄存器输入/输出接口,使得能够将来自所述一个或更多个应用中的所述多个应用的任务分派给所述加速器,
其中,所述多个虚拟加速器输入/输出接口中的各虚拟加速器输入/输出接口具有关联的分配寄存器,并且为了应用能够向所述加速器分派任务,所述应用读取与已分配给该应用的虚拟加速器输入/输出接口关联的分配寄存器,由此触发向分配给该应用的所述虚拟加速器输入/输出接口分配空闲物理寄存器输入/输出接口,并且从所述分配寄存器向该应用返回指示物理寄存器输入/输出接口当前空闲且已分配给该应用的值,其中,所述值用作标识符,该标识符唯一地标识该应用所分派的任务,
其中,响应于接收到唯一地标识所述任务并指示物理寄存器输入/输出接口当前空闲的所述值,所述应用将任务描述数据和/或指向任务描述数据的指针写入与所分配的物理寄存器输入/输出接口关联的寄存器,并且将所述任务分派给所述加速器。
23.根据权利要求22所述的硬件单元,所述硬件单元还包括以下中的一个或更多个:
任务调度器,该任务调度器能够在分配到所述物理寄存器输入/输出接口的任务之间仲裁并且能够使所述加速器执行分配到所述物理寄存器输入/输出接口的任务;以及系统存储器管理单元。
24.一种计算机可读介质,所述计算机可读介质存储有计算机程序,所述计算机程序包括代码,在所述计算机程序在数据处理系统上运行时,所述代码适于执行权利要求11至20中任一项所述的方法。

说明书全文

数据处理系统及操作方法、用于数据处理系统硬件单元

技术领域

[0001] 本发明涉及数据处理系统,该数据处理系统中,诸如图形处理单元、视频加速器或数字信号处理器等的加速器充当用于多个应用(诸如游戏、生产型应用、浏览器等)的共用共享资源,并且具体地,本发明涉及用于将任务从多个应用分派给共用共享加速器资源的方法和装置。

背景技术

[0002] 在诸如图形处理单元等的加速器充当用于多个应用的共享资源的排布结构中,那么当应用要求加速器执行任务时,加速器执行任务所需的信息必须提供给该加速器。这通常通过为该加速器提供一组一个或更多个寄存器来进行,该一组一个或更多个寄存器充当用于可以存储加速器在执行任务时需要且由该加速器提供的信息的加速器的输入/输出接口。然后,当诸如游戏等的应用希望加速器执行任务时,应用将对此进行操作系统调用,并且当任务要被执行时,用于该加速器的操作系统驱动程序然后将调度用于该加速器的该任务并将适当任务信息写入到加速器的输入/输出接口的寄存器中。在系统支持多个虚拟机的情况下,通常还会存在在各个操作系统与加速器输入/输出接口寄存器之间接口的管理器(Hypervisor)。
[0003] 图1例示了这种情况并且示出了系统1,其中包括执行单元2和调度器9在内的加速器12充当用于在各个虚拟机(VM)4、5上执行的多个应用(app)3的共用共享资源。(如图1所示,并且如本领域技术人员将会理解的,各个虚拟机4、5包括在共用处理器上执行以提供“虚拟机”的各个操作系统(OS)6、7,并且存在在各个操作系统(虚拟机)内操作的各个应用3,该应用3将使用执行单元2作为资源)。
[0004] 如上所讨论的,为了允许应用使用执行单元2来执行任务,执行单元2具有关联的输入/输出接口11,该输入/输出接口11包括关联的一组或更多组物理寄存器(插槽)8,该联的一组或更多组物理寄存器用作用于向执行单元2(由此向加速器12)提交任务的输入/输出接口,并且相应操作系统6、7可以在执行单元2(加速器)要执行针对给定应用的任务时在该联的一组或更多组物理寄存器内存储执行单元2所需的信息。
[0005] 图1示出了具有四组寄存器输入/输出接口8的系统,虽然其他排布结构当然也是可能的。如图1所示,并且如以上讨论的,当应用希望使用执行单元2来执行任务时,应用将经由其相应操作系统访问执行单元2的一组输入/输出寄存器8。
[0006] 图1还示出了调度器9,该调度器9用于在寄存器输入/输出接口8中的任务之间进行仲裁并调度任务。如图1所示,系统还将包括管理器10,该管理器10在相应虚拟机(操作系统)4、5与加速器(执行单元)2的寄存器输入/输出接口8之间接口。
[0007] 申请人相信对于向充当用于多个应用的共用共享资源的加速器分派任务的排布结构存在改进空间。

发明内容

[0008] 根据本发明的第一方面,提供了一种数据处理系统,该系统包括:
[0009] 一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;以及
[0010] 加速器,该加速器为多个所述应用提供共享资源;并且
[0011] 其中,所述系统还包括:
[0012] 一组或更多组物理寄存器,所述物理寄存器充当向所述加速器提交任务的输入/输出接口;以及
[0013] 接口映射单元,该接口映射单元向所述应用提供多个虚拟加速器输入/输出接口,所述虚拟输入/输出接口被映射到各个应用,所述接口映射单元被构造成将所述虚拟输入/输出接口动态地映射到所述物理寄存器输入/输出接口,从而通过将已映射到所考虑的应用的虚拟输入/输出接口映射到用于向所述加速器提交任务而设置的空闲物理寄存器输入/输出接口,使得用于所述应用的任务能够向所述加速器分派。
[0014] 根据本发明的第二方面,提供了一种操作数据处理系统的方法,该数据处理系统包括:
[0015] 一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;
[0016] 加速器,该加速器为多个所述应用提供共享资源;
[0017] 一组或更多组物理寄存器输入/输出接口,该一组或更多组物理寄存器输入/输出接口用于向所述加速器提交任务;以及
[0018] 接口映射单元,该接口映射单元使多个虚拟加速器输入/输出接口暴露于所述应用,所述虚拟输入/输出接口被映射到相应应用,并且被构造成将所述虚拟输入/输出接口动态地映射到用于所述加速器的所述物理寄存器输入/输出接口;
[0019] 所述方法包括以下步骤:
[0020] 应用在其希望所述加速器执行任务时,访问所述应用已映射到的虚拟输入/输出接口:
[0021] 所述接口映射单元响应于所述应用访问所述虚拟输入/输出接口,确定用于向所述加速器提交任务的物理寄存器输入/输出接口是否可用,并且如果物理寄存器输入/输出接口可用,则将所述虚拟输入/输出接口映射到所述物理寄存器输入/输出接口,从而允许所述应用向所述加速器分派其任务。
[0022] 本发明使用这样的排布结构:虚拟加速器输入/输出接口被分配给各个应用,然后相应虚拟输入/输出接口被映射到用于加速器的物理寄存器输入/输出接口,从而向加速器分派要针对应用执行的任务。
[0023] 这具有的优点在于例如不需要经过操作系统(然后虚拟系统中的管理器)而可以实现向加速器分派任务。各应用具有对由接口映射单元暴露的虚拟输入/输出接口的访问权,并且因此可以实际上(经由接口映射单元)与用于该加速器的物理寄存器输入/输出接口直接通信。
[0024] 本发明还具有的优点在于仅利用有限数量的物理寄存器输入/输出接口可以支持大量虚拟机。本发明还缩短了加速器开始处理任务的时延和将结果返回给进行请求的应用的时延。
[0025] 加速器可以是可向应用提供共用资源的任意合适的加速器(执行/功能单元)。例如,加速器可以包括图形处理单元(GPU)、加密加速器、视频加速器、网络(处理)接口、数字信号处理器(DSP)、音频硬件等。加速器可以基本上包括针对具体任务优化的任意组件。在优选实施方式中,加速器包括图形处理单元。
[0026] 加速器应当并且优选地确实至少包括可操作以执行用于应用的任务的执行单元(功能单元)。在优选实施方式中,加速器还包括任务调度器(如将在下面进一步讨论的)。在优选实施方式中,加速器还包括物理寄存器组,该物理寄存器组充当用于向加速器提交任务的输入/输出接口。然而,在另选实施方式中,充当用于向加速器提交任务的输入/输出接口的物理寄存器组可以是接口映射单元的一部分。由此,在优选实施方式中,加速器包括执行单元、任务调度器和物理寄存器输入/输出接口。其他排布结构当然是可能的。
[0027] 要由加速器执行的任务可以是任何期望和合适的任务(例如,依赖于加速器的性质),诸如,并且优选地,计算作业。在优选实施方式中,该任务是以下中的一种:在屏幕上描画对象、将多个图形层构成为显示、过滤图像以减小噪声、处理数据(例如,加密数据、用可应用协议层包裹数据)和例如在网络上发送数据、借助词典对文本进行拼写检查、评估物理模型中的时间增量等。
[0028] 相信本发明将尤其适用于小计算作业的低时延同步分派(所以在优选实施方式中,任务是小计算作业)。然而,本发明还可以用于异步分派和诸如图形加速的其他任务。
[0029] 应用可以是任意合适的应用,诸如游戏、照相机应用、图像处理应用、浏览器、网络服务器、生产型应用(文字处理软件电子数据表等)等。
[0030] 使用加速器作为共用共享资源的多个应用可以包括例如,在单个操作系统内的多个应用、分布于在单个(物理)处理器上托管的多个虚拟机(操作系统)上的应用、在多个物理(托管)处理器(不管是否作为虚拟机)上操作的应用、或其任意组合。由此,数据处理系统可以包括例如在单个操作系统下操作的多个应用、在单个物理主处理器或多个主物理处理器(然后,各主物理处理器托管一个或更多个虚拟机)上操作的多个虚拟机、或其任意组合。
[0031] 由此,加速器(例如,图形处理单元)可以是在单个虚拟机或物理处理器中的多个进程之间共享的共用资源,或在多个虚拟机和/或物理处理器等之间共享的共用资源。
[0032] 用于加速器的各个物理寄存器输入/输出接口如上所述将包括一组一个或更多个寄存器,该一组一个或更多个寄存器可(并且可以用于)存储要用于向加速器分派任务的信息(数据)。物理寄存器输入/输出接口可以仅经由由接口映射单元提供的虚拟输入/输出接口来被访问,或者它们可以被直接访问和经由接口映射单元提供的虚拟输入/输出接口来被访问。在物理寄存器输入/输出接口可被直接访问的情况下,它们优选地具有用于该目的的关联的存储器地址(地址空间)。在这种情况下,各单独的物理寄存器输入/输出接口优选地与系统的不同MMU(存储器管理单元)转换页关联(占用系统的不同MMU(存储器管理单元)转换页)(并且优选地占用完整MMU转换页(地址空间页)的整数倍),因为这然后将促进MMU页表用于控制对物理寄存器输入/输出接口的访问。
[0033] 各物理寄存器输入/输出接口可接受用于加速器的至少一个任务。可以仅存在一个物理寄存器输入/输出接口,但在优选实施方式中,存在多个物理寄存器输入/输出接口(例如,4个)。在存在多个物理寄存器输入/输出接口的情况下,则系统优选地还包括加速器任务调度器,该加速器任务调度器可以在分配给物理寄存器输入/输出接口的任务之间仲裁,并且使加速器执行分配给物理寄存器输入/输出接口的任务。若需要,还可以并行执行来自多个物理寄存器输入/输出接口的任务(并且加速器具有该能)。在存在多个物理寄存器输入/输出接口的情况下,则在优选实施方式中,不同应用(和来自不同虚拟机(存在的情况下)的不同应用)可以同时地访问单独的物理寄存器输入/输出接口。
[0034] 接口映射单元可以如期望的进行构造。除了使虚拟加速器输入/输出接口暴露于应用,在一个优选实施方式中,其还包括物理寄存器输入/输出接口。在优选实施方式中,接口映射单元是适当构造的硬件单元。
[0035] 由接口映射单元提供的虚拟加速器输入/输出接口将并且优选地包括应用在希望向加速器提交任务时可读取和写入的地址空间的(相应)区域。在优选实施方式中,仅单个应用能够访问给定虚拟加速器输入/输出接口。
[0036] 各单独的虚拟输入/输出接口优选地与系统的不同MMU转换页关联(占用系统的不同MMU转换页)(并且优选地占用完整MMU转换页(地址空间页)的整数倍),然后将促进MMU页表格用于控制对虚拟输入/输出接口的访问。
[0037] 虚拟加速器输入/输出接口的数量可以如期望的进行选择。在如下面将讨论的,鉴于各虚拟加速器输入/输出接口具有低“成本”的事实,系统可以支持大量虚拟加速器输入/输出接口。在优选实施方式中,针对每个应用存在至少一个虚拟加速器输入/输出接口。然后,这促进使用向应用固定分配虚拟加速器输入/输出接口。
[0038] 将虚拟加速器输入/输出接口向应用的映射可以如所期望的进行构造。该映射可以是固定映射或动态映射。在优选实施方式中,虚拟加速器输入/输出接口向应用的映射很少改变(例如,一个小时一次)。在优选实施方式中,CPU(主处理器)MMU(存储器管理单元)将映射虚拟加速器输入/输出接口映射到应用。优选地,一个或更多个虚拟加速器输入/输出接口被映射到各应用。
[0039] 虚拟加速器输入/输出接口可以以任意期望和合适的方式被映射(分配)到应用。在优选实施方式中,这可以(并且优选地)按需进行。在优选实施方式中,操作系统管理向其相应应用分配虚拟加速器输入/输出接口。在虚拟化系统中,管理器优选地管理向其相应虚拟机(操作系统)分配虚拟加速器输入/输出接口,各虚拟机内的操作系统然后管理向其应用中的每个应用分配虚拟加速器输入/输出接口。
[0040] 在一个优选实施方式中,所选的(例如,预限定的)数量的虚拟加速器输入/输出接口(地址空间的区域)被分配给各操作系统和/或应用。
[0041] 在优选实施方式中,虚拟加速器输入/输出接口的地址空间初始地被映射为无效页,然后通过在地址被应用首次访问时生成页错误并且管理虚拟加速器输入/输出接口的分配的(软件)模(例如,管理器或操作系统)然后向所请求的地址映射空闲虚拟加速器输入/输出接口(如果可用),虚拟加速器输入/输出接口而分配。
[0042] 当可用虚拟加速器输入/输出接口全部都被分配时,例如,基于最新的分配或随机,或以任意其他期望的方式,现有的已分配虚拟加速器输入/输出接口可以优选地被释放以供使用。在已分配的虚拟加速器输入/输出接口要以此方式被重新分配的情况下,优选地首先检查要被释放的虚拟加速器输入/输出接口当前未映射到物理寄存器输入/输出接口(如果是,则现有分配应当被维持(或恢复),而使另一个虚拟加速器输入/输出接口被释放)。
[0043] 各虚拟加速器输入/输出接口优选地在其已经被映射到(被分配)物理寄存器输入/输出接口)之前具有仅一个或仅两个(物理)寄存器与其关联(即,可以经由虚拟接口而访问(读取/写入))。这些寄存器优选地包括“分配”寄存器(如下面将讨论的)、或分配寄存器和“事件超时”寄存器(如下面将讨论的)。如下面将讨论的,当应用进程希望向加速器分派任务(需要物理寄存器输入/输出接口分配)时,优选地读取分配寄存器。在一个优选实施方式中,分配寄存器是只读寄存器。在另一个优选实施方式中,分配寄存器可以被读取和写入。
[0044] 在优选实施方式中,多个并且优选地所有虚拟加速器输入/输出接口共享同一个单个分配寄存器。类似地,如下面将讨论的,在优选实施方式中,多个并且优选地所有虚拟寄存器输入/输出接口共享同一个单个事件超时寄存器。
[0045] 应用(应用线程)可以请求并被分配用于以任意期望或合适的方式向加速器分派其任务的物理寄存器输入/输出接口。在优选实施方式中,向应用(向应用线程)分配物理寄存器输入/输出接口(将虚拟加速器输入/输出接口映射到物理寄存器输入/输出接口)通过读取虚拟加速器输入/输出接口(与虚拟加速器输入/输出接口关联)的寄存器(分配寄存器)来触发。由此,在优选实施方式中,当应用(应用线程)要求物理寄存器输入/输出接口以能够向加速器分派任务时,其优选地读取与已与其关联(映射到)的虚拟加速器输入/输出接口关联的“分配”寄存器。
[0046] 响应于此,然后,将虚拟加速器输入/输出接口暴露于应用并且将虚拟加速器输入/输出接口映射到用于该加速器的物理寄存器输入/输出接口的接口映射单元优选地确定用于该加速器的物理寄存器输入/输出接口当前是否空闲,并且如果是,则向所考虑的虚拟加速器输入/输出接口分配(绑定/映射)物理寄存器输入/输出接口。
[0047] 接口映射单元优选地还响应于寄存器被读取而向所考虑的应用(应用线程)返回指示物理寄存器输入/输出接口可用并且已经分配给应用的值。
[0048] 返回到作为该操作的一部分的应用的值还优选地用作针对所考虑的任务的标识符,如下面将进一步讨论的,该值然后可以优选地用于以其他方式控制和操纵所考虑的任务。任务标识符优选地是可以唯一地识别所考虑的任务的标识符(诸如计数器值等),并且如下面将进一步讨论的,优选地在分派任务之后用于辅助任务的管理。在优选实施方式中,任务标识符可以用于下述中的一项或更多项(并且优选地所有):允许应用请求操作系统停止该任务;识别错误消息对应于哪个任务;并且允许加速器从应用请求服务(诸如存储器分配),或提供其他反馈,诸如任务的性能度量的记录等。若需要,任务标识符也可以用于其他事物。
[0049] 物理寄存器输入/输出接口向所考虑的虚拟加速器输入/输出接口的映射可以如期望地执行。在优选实施方式中,接口映射单元确定使用了哪个虚拟输入/输出接口来访问它(例如,优选地,通过提取用于总线交易的地址的一部分),然后将该虚拟输入/输出接口(地址空间的区域)与所考虑的物理寄存器输入/输出接口关联。
[0050] 然后,当对虚拟输入/输出接口进行总线交易并且所考虑的虚拟输入/输出接口匹配当前分配(当前映射)到物理寄存器输入/输出接口的虚拟输入/输出接口时,使总线交易指向合适的物理寄存器输入/输出接口。否则(即,如果对没有当前分配(当前未映射到物理寄存器输入/输出接口)的虚拟输入/输出接口进行交易),仅(优选地公共)分配寄存器和事件超时(如果存在)寄存器可借助虚拟输入/输出接口访问。
[0051] 由此,在应用的虚拟加速器输入/输出接口已经映射到加速器的物理寄存器输入/输出接口时,加速器的物理寄存器输入/输出接口的寄存器将借助其虚拟加速器输入/输出接口地应用可访问(可见)(通过对其虚拟加速器输入/输出接口写入(和从其读取)。
[0052] 如果在请求被应用进行(并分配给应用)时物理寄存器输入/输出接口可用,则该应用(应用线程)应当(并优选地确实)向加速器发送其需要的任务的适当描述(即,如果物理寄存器输入/输出接口中的一个已经分配(映射)到虚拟加速器输入/输出接口,则应用可以向该加速器分派工作)。
[0053] 这优选地通过将适合数据设置在与所考虑的物理寄存器输入/输出接口关联的寄存器中来进行。这可以如所期望的例如,通过将相关任务描述数据(加速器执行任务所需的信息)设置在寄存器中,或通过在寄存器中设置指向存储任务描述数据的相关存储器地址的指针来进行。在优选实施方式中,该进程包括将指向任务描述符存储器地址的单个指针设置在用于所考虑的物理寄存器输入/输出接口的合适寄存器中。
[0054] 如果响应于由应用读取虚拟加速器输入/输出接口中的“分配”寄存器,接口映射单元确定没有可用的物理寄存器输入/输出接口,则优选地,响应于读取操作返回预限定为指示分配请求已经“失败”的的值,诸如“0”。
[0055] 在优选实施方式中,物理寄存器输入/输出接口分配和任务提交(分派)作为原子操作(atomic operation)执行(即,使得分配物理寄存器输入/输出接口和向加速器提交任务的尝试作为不可分割的操作执行)。(如现有技术中已知的,“原子”操作是一种操作序列,其被执行使得对于各个观察者来说看起来似乎序列完全不被执行或已经以其整体执行。“原子”操作作为一个不可分割的单元执行,因此名为“原子”)。这将有助于避免物理寄存器输入/输出接口被分配给应用、但上面长时间没有被提交任何任务(例如,如果应用线程被解除调度)的任何问题。
[0056] 这可以例如作为加载-链接存储-条件(LL/SC)原子交易来进行,其中虚拟加速器输入/输出接口分配寄存器被读取,然后返回指示分配已经成功的值(例如,任务标识符)或指示物理寄存器输入/输出接口分配已经失败的无效值,并且对虚拟加速器输入/输出接口分配寄存器链接的存储将例如指向任务描述符的指针写在与所考虑的物理寄存器输入/输出接口关联的寄存器中。
[0057] 在该排布结构(以及否则)中,分配寄存器和被写入指向任务描述符的指针的物理输入/输出接口寄存器可以是相同的寄存器(例如,在要求LL/SC加载/存储对必须是相同地址的架构的情况下),或它们可以是不同的寄存器(例如,如果所考虑的系统不具有这种限制)。
[0058] 相反,比较并交换(CAS)原子操作还可以用于物理寄存器输入/输出接口分配和任务提交。在这种情况下,优选设置“潜在任务标识符”寄存器,使得“潜在任务标识符”可以首先被读取,并且返回针对所提交的下一个任务的任务标识符的期望值。然后,对“分配”寄存器执行原子比较并交换操作,其中将所读取的潜在作业标识符用作期望读取值,并且要写入的新寄存器值是指向任务描述符的指针。如果比较操作成功,则任务将要(并且已经)提交。
[0059] 在优选实施方式中,如果应用(应用线程)接收其分配请求已经失败的指示,则应用(应用线程)优选地在稍后的时间里重试其对于分配物理寄存器输入/输出接口的请求(例如,并且优选地,再次地通过尝试读取其已经被映射到的虚拟加速器输入/输出接口的“分配”寄存器)。如所期望的,这可以重复达“重试”的任意期望次数。
[0060] 这种分配请求的重试可以例如在等待所选时间段之后执行。
[0061] 在优选实施方式中,系统被构造成使得响应于特定事件(优选地仅响应于特定事件)(诸如物理寄存器输入/输出接口已变空闲(可用)的指示)将等待物理寄存器输入/输出接口分配的应用(应用线程)触发以重试分配请求。这有助于提供更加电源有效的“重试”机制,因为当不可避免地或至少很有可能请求失败时,可以避免应用(应用线程)重试它们的分配请求。由此,在优选实施方式中,应用(应用线程)将仅响应于特定“唤醒”事件来重试其分配请求。系统可以(且优选地确实)被构造成(在适当时间)生成合适的“唤醒”事件,以触发重试由应用进行的分配请求。当等待任务完成时,这也优选地进行(下面将进一步讨论的)。
[0062] 在优选实施方式中,排布结构使得等待物理寄存器输入/输出接口分配的应用(应用线程)将在所选、优选地预定时间段、和/或达重试次数重试它们的请求,但如果仍然不成功,将被解除调度(停止重试)。这在等待任务要完时也优选地进行(如下面将进一步讨论的)。
[0063] 然后,如果物理寄存器输入/输出接口分配可能不会很快发生,这可以允许另一个应用(或同一应用中的线程)使用主处理器(CPU)。(然而,因为对应用线程进行解除调度(并且调度CPU上的另一个线程)会花费一些时间,并且在当物理寄存器输入/输出接口变可用时而可以再次调度应用线程之前,解除调度还可能造成针对重新调度的延迟(和CPU工作),所以优选的是试着首先等待一段时间而先不解除调度。)
[0064] 在这种情况下,优选地,等待物理输入/输出接口分配的任何“被解除调度”的应用(应用线程)在稍后的时间里被随后“重新调度”(即,返回到其重试其分配请求的状态)。这种“重新调度”可以由例如操作系统进行以在稍后的特定时间点,例如,依赖于一组预限定的调度原则,重新调度应用线程。
[0065] 在优选实施方式中,被解除调度的应用(应用线程)可以(例如,优选地,向操作系统)指示其不要求被再次重新调度直到特定事件发生了为止。这种事件可以包括例如(并且优选地)加速器上的活动任务完成、物理寄存器输入/输出接口变可用、和/或给定超时时间段期满。依赖于该线程所属的应用,还可以有其他关注事件。
[0066] 由此,在优选实施方式中,等待物理寄存器输入/输出接口分配的任何“解除调度”应用(应用现场)优选地响应于特定事件的发生(诸如物理寄存器输入/输出接口变空闲(可用))而被“解除调度”(即,返回到其重试其分配请求的状态)。
[0067] 在优选实施方式中,应用(应用线程)在“解除调度”超时进程期满时被解除调度。由此,在优选实施方式中,对等待物理寄存器输入/输出接口分配的任意应用(应用线程)执行超时进程,以在超时期满时对那些应用(应用线程)解除调度。由此,在优选实施方式中,各个应用具有与其关联的用于该目的的“解除调度”超时值。
[0068] 在优选的这种实施方式中,所有处于等待中的应用(应用线程)共享相同的“解除调度”超时计时器,并且该超时计时器被优选地维持在所考虑的处于等待中的应用(应用线程)的最早超时值(由此,如果具有比当前“解除调度”超时时间段短的“解除调度”超时时间段的应用(应用线程)开始等待物理寄存器输入/输出接口分配,则计时器被优选地设置为较短的时间段)。
[0069] 为了促进该操作,所有虚拟加速器输入/输出接口优选地具有对共用“事件超时”寄存器的访问权,处于等待中的应用(应用线程)在开始等待物理寄存器输入/输出接口分配时将其“解除调度”值写入到该共用的“事件超时”寄存器,其中加速器实现超时计时器,该超时计数器在该“事件超时”寄存器被首次写入时开始。在优选实施方式中,超时计时器被初始化为所写入的值,并且倒计数到零(或反之亦然,计数器向上数到寄存器值),并且当到达零时,(向CPU)用信号通知该事件,以对等待物理寄存器输入/输出接口的任何应用线程解除调度。
[0070] 在这些排布结构中,“解除调度”可以在超时寄存器达到零时立即发生,或排布结构可以是使得当应用(应用线程)“醒来”以重试其分配请求时,如果分配请求在那时不成功,则检查超时计时器,并且如果期满(例如,达到零),则应用(应用线程)被解除调度。
[0071] 在优选实施方式中,如果“事件超时”寄存器后续被用比当前超时计数小的值写入,则超时计数被更新为新的较低值(如果所写入值较高,则忽略)(或反之亦然,计数器向上数到寄存器值)。这具有的效果在于所有虚拟加速器输入/输出接口之间共享一个“事件超时”寄存器,其中最早超时被构造成用于用信号通知“解除调度”事件。
[0072] 在优选实施方式中,当物理寄存器输入/输出接口变可用和/或(如果不同)当任务完成时,加速器生成“重新调度”事件和/或“唤醒”事件,并优选地这两者。
[0073] 相信凭借自身能力,并且不仅在本发明的上述方面的方式的操作的背景下,针对等待事件的应用线程的解除调度使用共享事件超时寄存器可以是新且有益的。例如,这可以用于提供电源有效的“等待事件”机制,其中减少了建立超时的开销。
[0074] 由此,根据本发明的另一个方面,提供了一种操作数据处理系统的方法,该数据处理系统包括:
[0075] 一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用,各应用在执行时执行一个或更多个应用线程;
[0076] 该方法包括以下步骤:
[0077] 当应用线程在可以继续其操作之前需要等待事件发生时:
[0078] 应用线程将针对所述应用的事件超时时间段值写入可以由多个应用写入的共享事件超时寄存器中,然后执行等待事件的指令,该事件超时时间段值指示一时间段,该时间段之后如果应用线程等待的事件尚未发生则所述应用线程将请求被解除调度;
[0079] 当所选事件发生时,对数据处理系统用信号通知该事件,并且对在共享事件超时寄存器中设置的事件超时时间段进行计数;
[0080] 当应用线程在等待事件的同时事件被用信号通知时,确定用信号通知的事件是否是该应用线程等待的事件;以及
[0081] 如果该应用线程等待的事件已经发生,则该应用线程继续其进程;或者[0082] 如果该应用线程等待的事件尚未发生,则该应用线程检查在共享事件超时寄存器中设置的事件超时时间段是否已经期满;以及
[0083] 如果该事件超时时间段期满,则请求操作系统解除调度该线程;或者[0084] 如果该事件超时时间段尚未期满,则返回以等待其事件发生。
[0085] 根据本发明的另一个方面,提供了一种数据处理系统,该数据处理系统包括:
[0086] 一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用,各应用在执行时执行一个或更多个应用线程;以及
[0087] 事件超时寄存器,当应用线程在可以继续这些应用线程的操作之前这些应用线程等待事件发生时,可以将事件超时时间段值写到该事件超时寄存器,该事件超时时间段值指示一时间段,该时间段后,如果应用线程等待的事件尚未发生,则应用线程将请求被解除调度;其中:
[0088] 事件超时寄存器在多个应用之间共享,使得来自多个应用的线程各将它们的事件超时值写到同一共享事件超时寄存器。
[0089] 因此,在这种情况下,系统优选地被构造成使得其中:
[0090] 当应用线程需要在可以继续其操作之前等待事件发生时:
[0091] 应用线程将针对应用的事件超时时间段值写到可以由多个应用写入的共享事件超时寄存器,然后执行等待事件的指令;
[0092] 当所选事件发生时的处理器用信号通知,并计数在共享事件超时寄存器中设置的事件超时时间段;
[0093] 当在应用线程在等待事件的同时事件被通知时,确定用信号通知的事件是否是该应用线程正在等待的事件;并且
[0094] 如果该应用线程正在等待的事件已经发生,则该应用线程继续其进程;或者[0095] 如果该应用线程正在等待的事件尚未发生,则该应用线程检查共享事件超时寄存器中设置的事件超时时间段是否期满;并且
[0096] 如果事件超时时间段已期满,则请求操作系统解除调度线程;或者
[0097] 如果事件超时时间段尚未期满,则返回等待其事件发生。
[0098] 在本发明的这些方面中,应用线程通过将事件超时值写到在多个应用之间共享(共用)的事件超时寄存器,来设置其事件超时时间段。由此,多个应用线程可以(并优选地)共享同一共用事件超时寄存器。应用(应用线程)可以(且优选地)直接写入共享事件超时寄存器,而不涉及操作系统。这避免经由操作系统建立超时所需的开销,并且可以由此使利用主处理器“等待事件”功能对更多场景实用。
[0099] 优选地,所有当前执行的应用(和应用线程)共享同一事件超时寄存器,即,存在所有应用(和应用线程)共享的单个事件超时寄存器。
[0100] 如本领域技术人员将理解的,本发明的这些方面可以(且优选地)酌情包括这里描述的发明的任一个或更多个或所有优选和可选特征。
[0101] 由此,例如,优选地,关于共用事件超时寄存器的操作如上所述。由此,共享的共用事件超时寄存器优选地被维持在当前处于等待中的应用(应用线程)的最早超时值(即,最早超时被构造成优选地用于用信号通知“解除调度”事件)。
[0102] 类似地,如果该共享事件超时寄存器随后被用小于当前超时计数的超时时间段写入,则超时计数优选地被更新为新的较短新时间段(如果所写时间段更长,则忽略)。
[0103] 在这些排布结构的优选实施方式中,应用将以电源有效的方式(优选地,通过停止所有程序执行,直到外部事件由主处理器登记为止)等待其事件。而且,在优选实施方式中,当应用线程被解除调度时,应用线程可以优选地在操作系统登记何时要被重新调度的条件。因此,当应用线程被解除调度时,优选地例如,在特定事件发生(满足条件)时和/或在所选时间段之后被随后重新调度。
[0104] 在优选实施方式中,系统监测任务的完成并且在任务已经完成时“释放”物理寄存器输入/输出接口。
[0105] 在一个优选实施方式中,当任务分派发生时,虚拟加速器输入/输出接口向物理寄存器输入/输出接口的映射结束。在这种情况下,当操作系统进程写入最后寄存器以将其任务向加速器分派时,物理寄存器输入/输出接口的分配优选地丢失,并且进程可以不再访问物理寄存器输入/输出接口。在这种情况下,优选地通过更新作为任务建立的一部分而提供的存储器位置来用信号通知任务的完成。操作系统进程优选地周期性地检查(旋转)该存储器位置,直到任务完成为止(优选地,以上面讨论的应用重试它们的物理寄存器输入/输出接口分配请求的方式)。
[0106] 在另一个优选实施方式中,虚拟加速器输入/输出接口向物理寄存器输入/输出接口的映射被维持,直到进程通过写入寄存器来明确地解除分配物理寄存器输入/输出接口为止。在这种情况下,可以使用寄存器来用信号通知任务完成。
[0107] 除了被映射(指派)到应用的虚拟加速器输入/输出接口,在优选实施方式中,接口映射单元还支持和暴露一个或更多个操作系统虚拟管理接口,和/或一个或更多个管理器管理接口(且优选地,在具有管理器的虚拟化系统中,这两者)。这些操作系统和管理器管理接口优选地用于管理、操纵和控制进展中的任务。(因为通常只有一个管理器,所以管理器管理接口不需要是虚拟的(例如,可能有针对各个物理寄存器输入/输出接口的一个管理器管理接口)。在多个管理器的情况下,如果需要,可以提供用于管理管理器的在管理器上方的附加特权级别)。
[0108] 这些操作系统和管理器管理接口优选地包括地址空间的相应区域,操作系统或管理器可以分别读取这些区域和写入这些区域以访问和操纵各个任务已经提交到的物理寄存器输入/输出接口。
[0109] 操作系统虚拟管理接口优选地被映射到物理寄存器输入/输出接口,只要从该操作系统内的应用提交的任务未完成。操作系统管理接口优选地还暴露来自物理寄存器输入/输出接口的附加寄存器,以允许操作系统在任务活动的同时与加速器通信(以例如,停止或推迟任务、解决非致命错误等)。
[0110] 管理器管理接口优选地是物理寄存器输入/输出接口的直视,并且与操作系统虚拟管理接口相比较可以暴露附加寄存器。
[0111] 在优选实施方式中,该(和各)操作系统具有对管理接口的访问权。在虚拟化系统中,各操作系统优选地具有其自己的单独操作系统管理接口。
[0112] 各操作系统管理接口优选地促进(允许操作系统执行)以下功能中一个或更多个(且优选地所有):请求对操作系统级别虚拟加速器输入/输出接口属性表指针的改变(下面将讨论的);检验虚拟到物理寄存器输入/输出接口映射(在虚拟化系统中,优选地,仅从各个操作系统分配的物理寄存器输入/输出接口可见);检验在物理寄存器输入/输出接口上运行的任务的状态并且管理它们(在虚拟化系统中,优选地,仅从相应操作系统分配的物理寄存器输入/输出接口可见);在用活动物理寄存器输入/输出接口进行的处理消亡的情况下释放所分配的物理寄存器输入/输出接口(在虚拟化系统中,优选地,仅从各个操作系统分配的物理寄存器输入/输出接口可见);允许在任意时间先行进行处理;保存(并恢复)已分配、但尚未分派的物理寄存器输入/输出接口的状态;当对等待任务完成的线程进行解除调度时,针对任务完成使得中断;操纵用于任务的MMU环境;并且确定针对所分配的物理寄存器输入/输出接口和属于操作系统的运行中的任务的应用的身份(并更新应用标识符到进程的映射)。若需要,附加或替换地可以有其他功能。
[0113] 在优选实施方式中,借助操作系统管理接口提供对各个物理寄存器输入/输出接口的访问,但仅如果物理寄存器输入/输出接口正处理来自所考虑的操作系统(虚拟机)的任务。由此,操作系统虚拟管理接口优选地包括所有物理寄存器输入/输出接口,但仅对包含来自所考虑的操作系统的任务的物理寄存器输入/输出接口的访问被允许(由此,使用基于物理寄存器输入/输出接口“所有权”是否匹配尝试访问该接口的操作系统(虚拟机)的访问权利过滤来控制经由操作系统管理接口对物理寄存器输入/输出接口的访问)。
[0114] 各个管理器管理接口优选地类似于操作系统管理接口,但优选地,允许管理器对所有物理寄存器输入/输出接口完全访问权,而与它们在那时被分配到哪个虚拟机(操作系统)无关。由此,管理器管理接口优选地由与操作系统管理接口同一硬件支持,但与操作系统管理接口相比具有不同的访问权利。而且,物理寄存器输入/输出接口的管理器视图可以包括在操作系统虚拟管理接口视图中不可见的寄存器。
[0115] 各个管理器管理接口优选地促进(允许管理器执行)以下功能中的一个或更多个(且优选地所有):检验物理寄存器输入/输出接口当前被分配给哪个虚拟机,或活动任务属于哪个虚拟机;从操作系统管理接口接收改变指向虚拟加速器输入/输出接口属性表指针的请求;以及构造虚拟加速器输入/输出接口属性表的管理器级别。这优选地也是上述操作系统管理接口功能。再次,若需要,附加或替换地可以有其他功能。
[0116] 在优选实施方式中,所有操作系统和管理器管理功能(命令)使用任务标识符(标识与这些功能(命令)有关的任务)。这优选地是大计数器(例如,64位),每当物理寄存器输入/输出接口被映射到虚拟加速器输入/输出接口时就递增,并且不期望在系统的正常运行时间期间缠绕。(如上所述,当物理寄存器输入/输出接口分配进行时,该任务标识符可以例如被(且优选地确实)返回到应用。)
[0117] 然后,当操作系统管理接口用于操纵任务时,针对命令而提供的任务标识符优选地用于确定要采取的行动。优选地,如果任务标识符对应于的任务是在物理寄存器输入/输出接口上当前活动的并属于所考虑的操作系统,则尝试所请求的动作,否则忽略该命令。状态寄存器优选地酌情更新。
[0118] 管理器管理接口优选地使用类似机制,但区别在于可以操纵属于任意虚拟机(操作系统)的任务。
[0119] 除了用于要由操作系统进程本身提供的任务的数据,还可以有(并在优选实施方式中确实有)由管理器(如果有)和/或操作系统提供的针对任务提交和分派所需的进一步数据。
[0120] 为了促进提供该数据,在优选实施方式中,维持虚拟加速器输入/输出接口属性表,其包含由管理器和/或操作系统供给的针对任务提交所需的数据。
[0121] 在一个优选实施方式中,使用单个(级别)虚拟加速器输入/输出接口属性表。在另一个优选实施方式中,使用多个表格(多个表格级别)。
[0122] 在优选的多表格实施方式中,虚拟加速器输入/输出接口属性表被分为两个主要级别:管理器和操作系统。若需要,管理器级别和操作系统级别中的每个还可以被分为两个级别:第一级别,该级别识别虚拟机/进程(分别);和第二级别,该级别向所识别的虚拟机/进程提供数据(这允许持续加速器MMU环境跨越任务,并可以帮助缩短分派时延)。
[0123] 虚拟加速器输入/输出接口属性表的管理器级别优选地包括下述中的一个或更多个(且优选地所有):用于虚拟加速器输入/输出接口的虚拟机标识符、第2级MMU构造信息、虚拟机级别调度属性和允许虚拟加速器输入/输出接口属性表的操作系统级别的合适部分被标识的信息(诸如(且优选地)到操作系统级别虚拟加速器输入/输出接口属性表中的指针和/或索引)。
[0124] 虚拟加速器输入/输出接口属性表的操作系统级别优选地包括下述中的一个或更多个(且优选地所有):用于虚拟加速器输入/输出接口的应用标识符、第1级MMU构造信息和操作系统级别调度属性。
[0125] (在使用单个(级别)表的情况下,该表应当包括所有上述信息。)
[0126] 若需要,该表可以含有其他信息,诸如对所允许操作的限制。
[0127] 本发明还延伸到提供接口映射单元,该接口映射单元可以使虚拟加速器输入/输出接口暴露于应用并且将那些接口映射到物理寄存器输入/输出接口以向加速器分派任务。
[0128] 然后,例如,这可以利用现有的加速器设计来使用,以使得加速器能够与虚拟化一起使用,同时要求加速器本身非常少的修改或没有修改(并且,潜在地,不需要详细了解加速器的内部工作(可能仅需要知道程序接口))。
[0129] 由此,根据本发明的另一个方面,提供了一种用于数据处理系统中的硬件单元,该数据处理系统包括:一个或更多个处理器,各处理器执行一个或更多个操作系统,各操作系统包括一个或更多个应用;加速器,该加速器为多个应用提供共享资源;和一个或更多个物理寄存器输入/输出接口,该一个或更多个物理寄存器输入/输出接口可用于向加速器提交任务;其中,该硬件单元被构造成:
[0130] 将多个虚拟加速器输入/输出接口暴露于在处理器上执行的应用,并且将虚拟加速器输入/输出接口动态地映射到用于加速器的物理寄存器输入/输出接口,从而通过将与应用关联的虚拟输入/输出接口映射到要用于向加速器提交任务的空闲物理寄存器输入/输出接口使得针对应用的任务能够被分派给加速器。
[0131] 如本领域技术人员将理解的,本发明的该方面可以(且优选地)酌情包括这里描述的发明的任一个或更多个或所有优选和可选特征。
[0132] 在优选实施方式中,该硬件单元还具有与其关联的任务调度器,优选地,以微控制器的形式,该任务调度器可以在分配到物理寄存器输入/输出接口的任务之间仲裁并且可以使加速器执行分配给物理寄存器输入/输出接口的任务(即,可以调度提交到加速器的任务)。
[0133] 在优选实施方式中,硬件单元还具有与其关联的系统MMU(存储器管理单元)。系统MMU优选地是两级系统MMU,以提供虚拟化和操作系统级别虚拟存储器服务这两者。这种系统MMU可以向自身不包括内部MMU的加速器提供标准虚拟存储器功能。
[0134] 本发明可以在任意合适的系统(诸如基于适当构造的微处理器的系统)中实现。在优选实施方式中,本发明在基于计算机和/或微处理器的系统中实施。
[0135] 数据处理系统还可以包括(且在实施方式中确实还包括)存储这里描述的数据和/或存储用于执行这里描述的进程的软件的一个或更多个存储器和/或存储器装置,和或与该一个或更多个存储器和/或存储器装置通信。
[0136] 本发明的各种功能可以以任意期望和合适的方式执行。例如,本发明的功能可以如期望地在硬件或软件中实施。由此,例如,除非以其他方式指示,本发明的各种功能元件和“装置”可以包括可操作以执行各种功能等的合适的处理器、控制器、功能单元、电路、处理逻辑、微处理器结构等,诸如可以被编程以期望方式操作的专用硬件元件和/或可编程硬件元件等。
[0137] 这里还应当注意的是,如本领域技术人员将理解的,本发明的各种功能等可以在给定处理器上复制和/或并行执行。同等地,若需要,各种处理阶段可以共享处理电路等。
[0138] 本领域技术人员还将理解,本发明的所有描述的方面和实施方式可以(且优选地)酌情包括这里描述的任一个或更多个或所有优选且可选的特征。
[0139] 根据本发明的方法可以至少部分使用软件(例如,计算机程序)来实施。由此,将看出在从其他方面看时,本发明提供计算机软件,该计算机软件在安装在数据处理装置上时特别适用于执行这里描述的方法;计算机程序元件,该计算机程序元件包括计算机软件代码部,用于在程序元件在数据处理装置上运行时执行这里描述的方法;和计算机程序,该计算机程序包括适合于在程序在数据处理系统上运行时执行这里描述的方法的所有步骤。数据处理器可以是微处理器系统、可编程FPGA(场可编程阵列)等。
[0140] 本发明还扩展到计算机软件载体,该计算机软件载体包括这种软件,这种软件在用于操作图形处理器、渲染器或包括数据处理装置的微处理系统时,与所述数据处理装置协力使所述处理器、渲染器或系统执行本发明的方法的步骤。这种计算机软件载体可以是诸如ROM芯片、CD ROM、RAM、闪存或硬盘等的物理存储介质,或可以是诸如电线上的电信号光信号或注入对卫星等的无线信号等的信号。
[0141] 将进一步理解的是,不是本发明的方法的所有步骤都需要由计算机软件执行,由此从更宽的方面,本发明提供计算机软件,这种软件安装在用于执行这里阐述的方法的步骤中的至少一个步骤的计算机软件载体上。
[0142] 因此,本发明可以适当地具体实施为与计算机系统一起使用的计算机程序产品。这种实施方案可以包括固定在有形、永久介质(诸如计算机可读介质(例如,磁盘、CD-ROM、ROM、RAM、闪存或硬盘))上的一系列计算机可读指令。这种实施方案还可以包括一系列计算机可读指令,这些计算机可读指令在有形介质(包括,但不限于光或模拟通信线)上或无形地使用无线技术(包括但不限于,微波、红外线或其他传输技术)经由调制解调器或其他接口装置可发送到计算机系统。该系列计算机可读指令具体实施所有或部分这里描述的功能。
[0143] 本领域技术人员将理解这种计算机可读指令可以以大量编程语言编写,用于与许多计算机架构或操作系统使用。进一步地,这种指令可以使用现在或未来的任意存储技术(包括但不限于,半导体、磁或光)存储,或使用现在或未来的任意通信技术(包括但不限于,光、红外线或微波)发送。期望的是,这种计算机程序产品可以作为附随打印或电子文档(例如,拆封软件)的可移动介质分发,在系统ROM或固定盘上预装载有计算机系统,或在网络(例如,因特网或万维网)上从服务器或电子布告板分发。附图说明
[0144] 现在将仅以示例的方式参照附图描述本发明的多个优选实施方式,附图中:
[0145] 图1示意性地示出了现有技术的加速器充当用于多个应用的共享资源的数据处理系统;
[0146] 图2示意性地示出了根据本发明的加速器充当用于多个应用的共享资源的数据处理系统的实施方式;
[0147] 图3示意性地示出了本发明的实施方式中向加速器提交任务;
[0148] 图4示意性地示出了本发明的所描述实施方式中的用于允许操作系统和管理器访问加速器的物理寄存器输入/输出接口的机制;
[0149] 图5、图6和图7示出了在本发明的所描述的优选实施方式中的用于可以用虚拟加速器输入/输出接口属性表的示例性结构;
[0150] 图8示出了本发明的优选实施方式的操作;以及
[0151] 图9示意性地示出了以虚拟化接口的形式的本发明的另外实施方式。
[0152] 类似的附图标记在合适的情况下在整个附图中用于类似特征。

具体实施方式

[0153] 图2示意性地示出了根据本发明的实施方式的数据处理系统。
[0154] 如图2所示,数据处理系统20包括加速器12,该加速器12包括执行单元2,该执行单元2充当用于在各个虚拟机(VM)4、5中执行的多个应用(app)3的共用共享资源。加速器(执行单元)2可以包括例如,图形处理单元(GPU)、加密加速器、视频加速器、网络接口、数字信号处理器(DSP)、音频硬件或被优化以执行特定任务的任何其他(硬件)部件。
[0155] 虚拟机4、5将如现有技术中已知的包括在给定物理处理器(CPU)上执行的各个操作系统6、7。虽然图2出于例示目的示出了两个虚拟机4、5,但如本领域技术人员将理解的,可以仅有一个或多于两个的虚拟机,并且还可以有各托管一个或更多个虚拟机(操作系统)的多个物理处理器。
[0156] 各虚拟机(操作系统)将具有在上面执行的一个或更多个应用3,其可以并将使用加速器(执行单元)2作为共享资源。
[0157] 如图2所示,系统还包括用于虚拟机4、5的管理器10。
[0158] 如图2所示,为了允许在虚拟机4、5上执行的应用3向执行单元2提交任务,数据处理系统20包括促进向加速器12的执行单元2从应用提交的任务的接口映射单元21。
[0159] 应用3还可以是任意合适的应用,诸如游戏、照相机应用、图像处理应用、浏览器、网络服务器、“生产型”应用等。因此,要由加速器(执行单元)2执行的任务可以是任何期望且合适的任务(例如,依赖于加速器的性质),诸如在画面上描画物体、将多个图形层构成显示框、处理图像以降低噪声、处理数据、执行期望的计算作业等。
[0160] 如图2所示,接口映射单元21包括四(本实施方式中)组物理寄存器8,各组物理寄存器8分别充当用于加速器的执行单元2的物理寄存器输入/输出接口。(物理寄存器输入/输出接口的其他数量和结构当然也是可行的。)
[0161] 各个物理寄存器输入/输出接口8可以用于向加速器12提交和分派任务,并且包括可以存储向加速器提交任务所需的数据的一个或更多个寄存器。在本实施方式中,该数据包括指向存储了所考虑的任务所需的数据的主存储器中的描述符的指针。若需要,其他结构(诸如向物理寄存器输入/输出接口的寄存器直接加载任务描述字段等)是可行的。
[0162] 各个物理寄存器输入/输出接口可以接受用于加速器的至少一个任务,并且在本实施方式中,占用地址空间的MMU页。来自不同虚拟机的不同应用可以同时访问单独的物理寄存器输入/输出接口。
[0163] 如图2所示,数据处理系统20还包括加速器任务调度器9(是加速器12的一部分),该加速器任务调度器9在提交到物理寄存器输入/输出接口8的任务之间仲裁,并使加速器12的执行单元2根据需要执行任务。依赖于执行单元2的能力,若需要,来自多个物理寄存器输入/输出接口8的任务可以并行执行。
[0164] 接口映射单元21可以如期望地构造。在本实施方式中,接口映射单元21包括用于来自托管CPU的进入交易的总线接口和用于朝向用于加速器12的物理寄存器输入/输出接口的总线交易的总线接口。接口映射单元21过滤从托管CPU到物理输入/输出接口寄存器的交易,并且修改地址,以匹配物理输入/输出寄存器的正确情况。为此,接口映射单元21跟踪哪个虚拟加速器输入/输出接口被映射到哪个物理寄存器输入/输出接口。接口映射单元21还从加速器任务调度器9接收状态信号,诸如当前使用哪个物理寄存器输入/输出接口,并且还实现事件超时和分配寄存器(下面讨论的)。(还可能的是,若需要,接口映射单元21与物理输入/输出寄存器紧密集成。)
[0165] 如图2所示,不是在虚拟机上执行的应用3直接访问接口映射单元21的物理寄存器输入/输出接口8,而是接口映射单元21向应用3暴露多个虚拟加速器输入/输出接口22。如下面将进一步讨论的,这些虚拟加速器输入/输出接口22可以由接口映射单元21被动态地映射到物理寄存器输入/输出接口8以允许应用访问给定物理寄存器输入/输出接口8,从而向给定物理寄存器输入/输出接口8提交任务。
[0166] 各个虚拟加速器输入/输出接口22包括与所考虑的虚拟加速器输入/输出接口关联(由此,识别该虚拟机加速器输入/输出接口)的地址空间的区域。在本实施方式中,各个虚拟加速器输入/输出接口关联于(占用)地址空间的一个MMU页(或MMU页的整数倍)。
[0167] 如图2所示,可以有大量虚拟加速器输入/输出接口22,因为虚拟加速器输入/输出接口的“成本”基本上仅是在主存储器中用于所考虑的虚拟加速器输入/输出接口的虚拟加速器输入/输出接口属性表目录的存储(下面将进一步讨论)。
[0168] 在本实施方式中,一个或更多个虚拟加速器输入/输出接口22被映射到(关联于)在虚拟机4、5上执行的各个应用3。该映射在本实施方式中由根据需要将虚拟加速器输入/输出接口映射到应用的主处理器(CPU)存储器管理单元(MMU)以以下方式执行。
[0169] 虚拟加速器输入/输出接口22在本实施方式中在两个步骤中分配给应用3。管理器10管理向各个虚拟机4、5分配虚拟加速器输入/输出接口,然后各个虚拟机内的操作系统6、
7管理向(所考虑的虚拟机的)各个应用分配虚拟加速器输入/输出接口。
[0170] 在本实施方式中,标准数量的虚拟加速器输入/输出接口被提供给各客户端(即,OS或应用),但用于这些虚拟加速器输入/输出接口的地址空间初始被作为无效页映射。然后,在所考虑的地址空间被首次访问时,生成页错误,然后管理分配虚拟加速器输入/输出接口的软件模块(即,根据情况,管理器或OS)向所请求的地址映射空闲虚拟加速器输入/输出接口(如果有),因此更新虚拟加速器输入/输出接口属性表。
[0171] 如果当进行新虚拟加速器输入/输出接口请求时已经分配所有可用虚拟加速器输入/输出接口22,则释放所分配的虚拟加速器输入/输出接口中的一个以供使用。被释放的虚拟加速器输入/输出接口可以如期望的(例如,基于先进先出或随机)来选择。管理虚拟加速器输入/输出接口分配进程的软件模块检查要释放的虚拟输入/输出接口当前未映射到物理寄存器输入/输出接口(并且如果是,恢复该映射并释放另一个虚拟加速器输入/输出接口)。
[0172] 若需要,用于向应用分配虚拟加速器输入/输出接口22的其他排布结构等当然是可以的。
[0173] 虚拟加速器输入/输出接口22具有与其关联的分配寄存器和事件超时寄存器。当应用希望被分配物理寄存器输入/输出接口以允许其向加速器2提交任务时,分配寄存器被读取。事件超时寄存器用于触发对等待物理寄存器输入/输出接口分配的应用(应用线程)的重新调度。在本实施方式中,所有虚拟加速器输入/输出接口22共享同一单个分配寄存器和同一单个事件超时寄存器。其他结构当然是可行的。
[0174] 由接口映射单元21暴露的各个虚拟加速器输入/输出接口22在虚拟加速器输入/输出接口属性表25中具有对应条目,该条目存储了与所考虑的虚拟加速器输入/输出接口关联的数据(属性),诸如虚拟加速器输入/输出接口已分配到的虚拟机的身份、虚拟加速器输入/输出接口已分配到的应用的身份、任何所需(例如,第1级和第2级)MMU(存储器管理单元)构造信息、以及与虚拟加速器输入/输出接口关联的任何虚拟机和操作系统调度属性。
[0175] 当任务要被提交给加速器2时,虚拟加速器输入/输出接口22用于访问物理寄存器输入/输出接口8。为此,希望向加速器2提交任务的应用首先将访问其虚拟加速器输入/输出接口,以读取分配寄存器。
[0176] 响应于此,接口映射单元21将确定用于加速器的物理寄存器输入/输出接口8是否当前空闲。如果有当前空闲的物理寄存器输入/输出接口,则接口映射单元21分配(绑定/映射)物理寄存器输入/输出接口到所考虑的虚拟加速器输入/输出接口,并且响应于分配寄存器被读取而将任务标识符返回到所考虑的应用,该任务标识符指示物理寄存器输入/输出接口可用并已分配给应用,且还用作用于所考虑的任务的标识符。该任务标识符由大的计数器(例如,64位)生成,该大计数器在系统的正常运行时间期间不期望缠绕,并且每当物理寄存器输入/输出接口被映射到虚拟加速器输入/输出接口时(即,对于授权物理寄存器输入/输出接口进行提交的各个任务)递增。如下面将进一步讨论的,任务标识符然后用于标识所考虑的任务,并且可以用于控制和操纵讨论在的任务和所考虑的所关联的虚拟加速器输入/输出接口。
[0177] 为了将物理寄存器输入/输出接口映射到所考虑的虚拟加速器输入/输出接口,接口映射单元21通过提取用于总线交易的地址的一部分来确定哪个虚拟输入/输出接口用于访问,然后将该虚拟输入/输出接口(地址空间的区域)与所考虑的物理寄存器输入/输出接口关联。
[0178] 然后,当对虚拟输入/输出接口进行总线交易并且所考虑的虚拟输入/输出接口匹配具有到物理寄存器输入/输出接口的当前分配(当前映射)的虚拟输入/输出接口时,该总线交易指向合适的物理寄存器输入/输出接口。否则(即,如果对不具有当前分配(当前未映射到物理寄存器输入/输出接口)的虚拟输入/输出接口进行交易),则仅共用分配寄存器和事件超时寄存器借助于虚拟输入/输出接口可访问。
[0179] 如果响应于分配寄存器由应用读取,接口映射单元21确定没有物理寄存器输入/输出接口当前可用,则接口映射单元响应于分配寄存器被读取而返回预限定为指示分配请求已“失败”的值(诸如“0”等)。在这种情况下,应用在分配寄存器上“旋转”以重试其分配请求,直到分配成功为止。
[0180] 由此,虚拟加速器输入/输出接口分配寄存器在被应用读取时,将返回用于应用的任务的任务标识符,或指示分配失败的无效值。
[0181] 当物理寄存器输入/输出接口8已被分配并映射到虚拟加速器输入/输出接口22时,应用可以接着分派其任务到加速器2。
[0182] 为此,应用(经由其关联的虚拟加速器输入/输出接口)在已分配到其虚拟加速器输入/输出接口的物理寄存器输入/输出接口8中写入指向存储了任务描述数据的相关存储器地址的指针。
[0183] 在本实施方式中,物理寄存器输入/输出接口分配和任务提交作为加载-链接/存储-条件(LL/SC)交易来执行。其具有的效果在于分配物理寄存器输入/输出接口8然后提交任务的尝试是不可分割的操作,从而避免了物理寄存器输入/输出接口被分配但长时间在上面没有被提交的任务(例如,如果该线程被解除调度)的任何问题。
[0184] 图3例示了该操作。如图3所示,第一步骤是应用创建用于其希望向加速器提交的任务的描述符(步骤30)。然后,应用执行加载-链接(load-link)操作以加载来自分配寄存器的任务标识符(步骤31)。然后,确定分配寄存器是否返回有效的任务标识符(步骤32)。如果不,则如图3所示,进程返回到加载来自分配寄存器的任务标识符的步骤(即,重试)。在另一方面,如果从分配寄存器返回了有效任务标识符(即,从而指示用于提交任务的物理寄存器输入/输出接口可用),则对应的所链接的条件存储将操作,以在物理寄存器输入/输出接口中存储指向所创建的任务描述符的指针(步骤33)。如果原子加载-链接/存储-条件操作成功(步骤34),则任务提交完成(步骤35)。否则,进程返回以重尝试操作。
[0185] 在这种情况下(并且否则),分配寄存器和任务描述符写入到的物理输入/输出接口寄存器可以是同一寄存器(例如,在要求LL/SC加载/存储对必须是到同一地址的架构的情况下),或者它们可以是不同的寄存器(例如,如果所考虑的系统不具有这种限制)。
[0186] 若需要,针对任务提交还可以使用“比较并交换”(CAS)原子操作以及或代替地LL/SC操作。在这种情况下,应当设置“潜在任务id”寄存器,该寄存器在被读取时,返回要用于提交的下一个任务的任务标识符的期望值。在该排布结构中,“潜在任务id”寄存器应当首先被读取(以获取用于要提交的下一个任务的任务id的期望值),此后,对“分配”寄存器上执行CAS操作,其中用于“比较”的期望读取值的是所读取的潜在任务id,并且要用于“缠绕”而写入的新值是指向任务描述符的指针。如果CAS操作是成功的,则已经提交任务。
[0187] 在本实施方式中,当任务分派发生时,虚拟加速器输入/输出接口到物理寄存器输入/输出接口的映射结束。由此,当应用写入最终寄存器以向加速器3分派其任务时,物理寄存器输入/输出接口的分配丢失(并且应用可以不再访问物理寄存器输入/输出接口)。然后,任务的完成通过更新作为任务建立的一部分而设置的存储位置来用信号通知。应用被构造成在该存储位置上“旋转”直到任务结束为止。
[0188] 在另选排布结构中,可以维持虚拟加速器输入/输出接口到物理寄存器输入/输出接口的映射,直到应用通过写到寄存器明确地消除分配物理寄存器输入/输出接口为止。与在任务分派时结束物理寄存器输入/输出接口映射相比较,这将允许使用寄存器而不是存储位置来用信号通知任务完成,但是物理寄存器输入/输出接口将较长时间地连结到应用(从而潜在地要求较大量的物理寄存器输入/输出接口以有效地调度加速器上的任务(并且还增加应用在分配有物理寄存器输入/输出接口的同时被解除调度的险)。
[0189] 如上所述,在本实施方式中,如果其初始请求失败,则给定应用线程将“旋转”(周期性重试)其对物理寄存器输入/输出接口分配的请求,并且应用线程将在存储位置上“旋转”以监测加速器完成其任务。
[0190] 在本实施方式中,旋转(等待)与等待事件进程组合。由此,系统被构造成使得等待物理寄存器输入/输出接口分配的应用(应用线程)仅响应于特定“唤醒”事件(诸如物理寄存器输入/输出接口已经变空闲(可用)的指示)重试其分配请求。系统被构造成(在合适时间)生成合适的“唤醒”事件,以触发由应用重试分配请求。在等待任务完成时这也完成。
[0191] 这允许旋转等待以能量有效方式实现。这在等待物理寄存器输入/输出接口分配和加速器任务完成这两者时使用。
[0192] 在本实施方式中,应用被构造成旋转等待达所选时间段,但如果要求较长的等待,则旋转的应用线程被解除调度,该线程然后响应于特定事件而被重新调度。然后,如果物理寄存器输入/输出接口分配看起来不会很快发生,则可以允许另一个应用(或同一应用中的线程)使用主处理器(CPU)。
[0193] 为了促进该操作,如上面所讨论的,设置所有虚拟加速器输入/输出接口访问的“事件超时”寄存器。各个应用如果在“旋转等待”物理寄存器输入/输出接口分配或加速器任务完成,则将所关联的超时值写到事件超时寄存器中。
[0194] 加速器12实现超时计数器,该超时计数器在“事件超时”寄存器首次写入时开始。超时计数器被初始化为所写入的值并且倒计数到零。
[0195] 当到达零(超时期满)时,解除调度旋转等待的任何应用线程。
[0196] 在本实施方式中,“解除调度”不在超时寄存器到达零时立即发生,而是排布结构使得当应用(应用线程)“醒来”以重试其分配请求(等)时,如果分配请求在那时不成功,则检查超时计数器,并且如果其到达零,则将该应用(应用线程)解除调度(但如果不到达零,则应用(应用线程)返回到其“等待”状态)。
[0197] 在本实施方式中,排布结构是使得如果“事件超时”寄存器随后用小于当前超时计数的值写入,则超时计数被更新为新的较低值(如果所写入值较大,则其被忽略)。由此,存在在所有虚拟加速器输入/输出接口之间共享的一个“事件超时”寄存器,并且所构造的最早超时用于触发“解除调度”事件。
[0198] (用于超时计数器的其他排布结构(诸如超时计数增大和超时限制由事件超时寄存器值设置)当然是可能可行的。)
[0199] 等待物理输入/输出接口分配和/或任务完成的任何“被解除调度的”应用(应用线程)在晚些时间随后被“重新调度”。例如,操作系统可以在特定晚些时间点例如,依赖于一组预限定调度策略来重新调度应用线程,和/或被解除调度的应用(应用线程)可以向操作系统指示其不需要再次被重新调度,直到在特定事件已经发生之后为止。这种事件可以包括例如,加速器上的活动任务完成、物理寄存器输入/输出接口变可用和/或给定超时时间段期满。依赖于线程所属于的应用,还可以有其他关注事件。
[0200] 在本实施方式中,当物理寄存器输入/输出接口变可用和/或(如果不同)任务完成时,加速器生成“重新调度”事件和“唤醒”事件。
[0201] 由此,在本实施方式中,应用线程将确定在可以继续其操作(例如,使任务提交给加速器、或使物理寄存器输入/输出接口变空闲)之前,其需要等待事件发生,然后将合适的超时设置在“事件超时”寄存器中。然后,应用将执行指令,以以电源有效方式(诸如停止程序执行,直到外部事件被主处理器(CPU)登记为止)等待事件。然后,当发生事件时(例如,可以从许多个源中的任一个源生成),应用线程将检查是否满足其等待条件(即,等待的事件是否已发生),并且如果这样,则继续其处理。另一方面,如果应用线程的等待条件尚未满足,则将检查其超时是否已期满,并且如果是,则请求操作系统以被解除调度,并且可选地,向操作系统登记何时重新调度操作系统的条件。另一方面,如果其超时尚未期满,则线程将返回,以等待其等待的事件发生。
[0202] 这样,在解除调度应用线程之前,事件超时寄存器被使用,以允许应用在电源有效状态下旋转等待达有限时间段而不与操作系统交互,同时确保如果线程的分配请求条件在短时间内未满足,则应用可以被唤醒并且可以请求操作系统对线程进行解除调度。
[0203] 如图2所示,除了虚拟加速器输入/输出接口22,接口映射单元21还提供多个操作系统管理接口23。在本实施方式中,各个操作系统具有其自身的单独OS管理接口23。
[0204] 在本实施方式中,各个OS管理接口允许所考虑的操作系统进行:请求改变OS级别虚拟加速器输入/输出接口属性表指针(下面将讨论的);检验虚拟加速器输入/输出接口到物理寄存器输入/输出接口的映射(仅从所考虑的OS分配的物理寄存器输入/输出接口可见);检验在物理寄存器输入/输出接口上运行的任务的状态并且管理它们(仅从所考虑的OS分配的物理寄存器输入/输出接口可见);在利用活动物理寄存器输入/输出接口进行的应用消亡的情况下释放所分配的物理寄存器输入/输出接口(仅从所考虑的OS分配的物理寄存器输入/输出接口可见);在任何时间先行应用(若需要,已分配但尚未分派的物理寄存器输入/输出接口的状态可以被保存和恢复);当对正在等待任务完成的线程进行解除调度时,使得能够针对任务完成进行中断;以及操纵用于任务的MMU环境。
[0205] 在本实施方式中,可以确定所分配的物理寄存器输入/输出接口和属于OS管理接口的运行任务的MMU地址空间标识符(ASID)。这允许更新ASID到应用的映射。
[0206] 在本实施方式中,通过提供通过OS管理接口对各个物理寄存器输入/输出接口的访问而实现操作系统管理接口,但只要物理寄存器输入/输出接口正在处理来自同一虚拟机(操作系统)的任务。由此,如图2所示,接口单元21包括用于操作系统管理接口23的访问权利检查器24。
[0207] 由此,在本实施方式中,操作系统虚拟管理接口被映射到物理寄存器输入/输出接口,只要从操作系统内的应用提交的任务未完成。操作系统管理接口还使来自物理寄存器输入/输出接口的附加寄存器暴露,以在任务活动的同时允许操作系统与加速器通信。
[0208] 除了提供允许访问物理寄存器输入/输出接口的操作系统管理接口,如图2所示,管理器10还访问物理寄存器输入/输出接口,以对应地执行“管理”功能。
[0209] 管理器管理接口由与OS管理接口相同的硬件来支持,但与虚拟机(操作系统)相比,被施加了不同的访问权利。管理器管理接口大致是物理寄存器输入/输出接口的直接视图,并且与操作系统虚拟管理接口相比,可以使附加寄存器暴露。
[0210] 具体地,“管理器管理接口”允许管理器完全访问所有的物理寄存器输入/输出接口8,而不管它们在讨论时被分配给哪个虚拟机(即,OS)。管理器管理接口还给予对OS管理接口中未暴露的特定功能的访问权:检验物理寄存器输入/输出接口当前被分配到哪个虚拟机,或活动任务属于哪个虚拟机;从OS管理接口接收改变虚拟加速器输入/输出接口属性表指针的请求;构造虚拟加速器输入/输出接口属性表的管理器级别(下面讨论)。
[0211] 为了促进由操作系统和管理器经由它们的管理接口访问物理寄存器输入/输出接口8,并且因为通过管理器和OS管理接口访问的物理寄存器输入/输出接口的状态可以在任何时间改变,所以由操作系统和管理器发布的所有命令使用标识与该命令有关的任务的任务标识符(并与该任务标识符关联)。
[0212] 然后,当OS管理接口要被用于操纵任务时,检查针对该命令提供的任务标识符,并且如果所考虑的任务当前在物理寄存器输入/输出接口上活动并且属于所考虑的OS管理接口,则所请求的动作被尝试,否则命令被忽略。用于报告任务状态的状态寄存器或存储位置被酌情更新。
[0213] 管理器管理接口使用类似机制,但差别在于可以操纵属于任何虚拟机(操作系统)的任务。
[0214] 图4示意性地示出了本实施方式中的用于允许操作系统和管理器访问物理寄存器输入/输出接口8的排布结构。如图4所示,管理器10具有对物理寄存器输入/输出接口8的直接访问权,而各个操作系统(虚拟机)将使用其用于操作系统管理接口23的所分配地址,但将存在访问权利检查器24,该访问权利检查器4将在来自操作系统的命令中使用的任务标识符与分配到物理寄存器输入/输出接口8的任务关联的任务标识符进行比较,以确定是否应当允许操作系统操作访问各个物理寄存器输入/输出接口8。
[0215] 如图2所示并如上所讨论的,数据处理系统1还包括虚拟加速器输入/输出接口属性表25。该虚拟加速器输入/输出接口属性表包含向加速器12提交任务所需的、由所考虑的管理器和操作系统供给的数据。当物理寄存器输入/输出接口被映射到虚拟加速器输入/输出接口时,读取虚拟加速器输入/输出接口属性表25,以确定任务提交所需要的、由管理器或操作系统供给的数据。
[0216] 虚拟加速器输入/输出接口属性表25可以如期望进行构造,例如,被构造成单个表、或两个表级别:一个用于管理器,一个用于虚拟机操作系统,或者被构造成四个表格级别:两个用于管理器,两个用于虚拟机操作系统;等。
[0217] 图5示出了示例性的单级别虚拟加速器输入/输出接口属性表排布结构。在这种情况下,存在共用虚拟输入/输出接口属性表50,该表使用虚拟加速器输入/输出接口索引访问,该虚拟加速器输入/输出接口索引从用于对虚拟加速器输入/输出接口寻址的物理地址捕捉,其中虚拟加速器输入/输出接口属性表然后指示使用的MMU第1级和第2级构造、虚拟机(操作系统)标识符(VMID)、用于所考虑的应用的MMU地址空间标识符(ASID)、和虚拟机间和操作系统调度属性。
[0218] 图5中所示的该单个表排布结构将要求管理器被虚拟机(操作系统)通知任何页表构造改变,但可以允许最小任务分派时延,因为所有虚拟加速器输入/输出接口属性信息收集在一处并且可以进行直接查找而不是遍历穿过(walk through)表结构)。
[0219] 图6和图7示出了示例性多表级别虚拟加速器输入/输出接口属性表结构。
[0220] 在这些情况下,多个表被分为两个主要级别:管理器和OS。管理器和OS级别中的每个还可以被分为两个级别:标识VM/应用的第一级别和提供用于已恢复的VMID/ASID的数据的第二级别(这允许跨任务的持久加速器MMU环境,并且可以帮助缩短分派时延)。
[0221] 图6示出了具有一个管理器级别表格60和分开的操作系统级别表格61的两级别虚拟加速器输入/输出接口属性表排布结构。
[0222] 在这种情况下,当物理寄存器输入/输出接口被映射到虚拟加速器输入/输出接口时,虚拟加速器输入/输出接口属性表25被如下遍历(walk)。
[0223] 虚拟加速器输入/输出接口索引从用于对虚拟加速器输入/输出接口进行寻址的物理地址捕捉,并且虚拟加速器输入/输出接口属性表的管理器级别60被查找并且以下信息被读取:用于虚拟加速器输入/输出接口的VMID;第2级MMU构造信息;指向OS级别虚拟加速器输入/输出接口属性表基础的指针;到OS级别虚拟加速器输入/输出接口属性表中的索引;以及VM级别调度属性。
[0224] 然后,从管理器级别表格60恢复的OS级别虚拟加速器输入/输出接口属性表条目被查找,并且从OS级别虚拟加速器输入/输出接口属性表61读取以下信息:用于虚拟加速器输入/输出接口的ASID;第1级MMU构造信息;以及OS级别调度属性。
[0225] 图7示出了管理器级别表和OS级别表各含有两个表级别的多级别虚拟加速器输入/输出接口属性表。
[0226] 在这种情况下,虚拟加速器输入/输出接口属性表被如下遍历。
[0227] 虚拟加速器输入/输出接口索引从用于对虚拟加速器输入/输出接口寻址的物理地址捕捉,并且虚拟加速器输入/输出接口属性表的第一管理器级别70被查找并且读取以下信息:用于虚拟加速器输入/输出接口的VMID;和OS级别虚拟加速器输入/输出接口索引。
[0228] 所读取的VMID用于对虚拟加速器输入/输出接口表格的第二管理器级别71进行索引,并且读取以下信息:第2级MMU构造信息;指向OS级别虚拟加速器输入/输出接口属性表基础的指针;以及VM级别调度属性。
[0229] 然后,使用从管理器级别表格恢复的OS级别虚拟加速器输入/输出接口索引来查找OS级别虚拟加速器输入/输出接口属性表的第一级别72,并且读取以下信息:指向OS级别输入/输出接口特性描述符的指针。
[0230] 然后,读取所指示的OS级别输入/输出接口属性描述符73,以确定:要使用的ASID;第1级MMU构造信息和OS级别调度属性。
[0231] (仅如果超过一个虚拟加速器输入/输出接口可以被映射到应用,才需要OS级别指示。这允许OS在应用被调度时更新用针对应用的ASID来更新单个位置。OS内核在更新用于应用的ASID映射时,需要考虑用于在加速器上运行或搁置的任何任务的ASID。)[0232] 若需要,可以使用用于虚拟加速器输入/输出接口属性表25的其他排布结构,诸如用于管理器级别和OS级别的简单和复杂的虚拟加速器输入/输出接口属性表的其他组合(例如,管理器级别表或OS级别表可以使用简单或复杂的格式)。
[0233] 除了上面讨论的信息,虚拟加速器输入/输出接口属性表还可以包含其他信息,例如,对所允许的操作的限制。若需要,虚拟加速器输入/输出接口属性表的一些缓存形式可以用于确保虚拟加速器输入/输出接口属性表的遍历不是任务分派时延的关键路径。
[0234] 如将从上面理解的,在上述优选实施方式中,向加速器分派任务的进程和完成的任务(在使用用于原子级地提交任务的LL/SC原子操作的排布结构中)将如图8例示。
[0235] 首先,主处理器(CPU)上的应用将准备加速器执行任务所需的数据结构(“任务描述符”)(步骤80)。
[0236] 主CPU应用然后将使用加载-链接语句经由其关联的虚拟输入/输出接口读取分配寄存器(步骤81)。
[0237] 如果所读取的值为零,则物理输入/输出接口分配已失败,所以应用将等待一会,然后再次尝试其分配请求。如上所讨论的,在本实施方式中,这将首先涉及在重试分配请求之前等待事件发生,即物理寄存器输入/输出接口变空闲,并且如果分配尝试在给定超时时间段内不成功,则对应用线程进行解除调度。
[0238] 为此,应用确定何时停止使用“等待事件”状态以继续等待物理寄存器输入/输出接口变空闲(如这可以阻止CPU核)并且相反对应用线程进行解除调度的合适的截止期限(从而允许其他任务在CPU核上执行,但增加从物理寄存器输入/输出接口变空闲到加速器工作于任务的时延)。用于对该进程的截止期限的延迟可以依赖于应用而改变,但合适的超时时间段可以是例如主CPU调度配额的10%。
[0239] 然后,应用在事件超时寄存器中设置用于已计算得的截止日期的超时(步骤82),并且使用“等待事件”状态等待事件发生。因为事件可以由于许多原因而生成,所以应用在退出等待事件状态时检查事件以及是否超时完成。
[0240] 当应用退出等待事件状态时,应用检查合适事件是否发生(在这种情况下,物理寄存器输入/输出接口变空闲)(步骤83)。如果是,则应用重试其分配请求(步骤81)。
[0241] 如果合适事件尚未发生,则应用检查超时截止期限是否已过(步骤84)。如果否,则返回到“等待事件”状态,并监测超时截止期限。
[0242] 如果超时截止期限已过,则应用线程被解除调度(步骤85),并且当合适的事件发生时被请求继续(被重新调度)(在这种情况下,物理寄存器输入/输出接口变空闲)(步骤86)。这允许其他任务在CPU核上执行,但会增加从物理寄存器输入/输出接口变空闲到加速器工作于该任务的时延。
[0243] 在另一方面,如果从分配寄存器读取的值是非零,则物理寄存器输入/输出接口的分配成功。所返回的读取值用作用于所考虑的任务的标识符,并且将由主CPU应用保持,以允许任务的未来操作和管理(例如,查询其状态、标识错误消息、控制任务等)。
[0244] 主CPU应用然后将使用存储条件语句将指向主任务描述符的指针写到合适的物理输入/输出寄存器中(例如,到分配寄存器)(步骤87)。如果该写操作失败,则任务尚未被分派并且从分配寄存器读取的任务标识符将不再有效。在这种情况下,主CPU上的应用将返回再次尝试其分配请求。(对于此的典型原因是另一个线程/应用同时提交任务。)[0245] 另一方面,如果写入操作成功,则任务已提交给加速器(步骤88)。
[0246] 然后,主CPU应用可以例如与加速器任务并行执行一些其他处理,但将最终(并且在一些情况下立即)到达依赖于加速器任务的结果的点。在这种情况下,如果加速器尚未完成任务,则主CPU应用将需要等待加速器完成任务。在本实施方式中,加速器任务的完成通过修改存储位置并且用信号通知该事件以将CPU从“等待事件”状态唤醒来用信号通知。
[0247] 在本实施方式中,主CPU应用经由以下步骤实现电源有效等待。
[0248] 应用首先检查加速器任务是否完成(步骤89)。如果完成,则终结加速器任务,并且主CPU应用可以使用来自加速器任务的输出数据。
[0249] 如果加速器任务尚未完成,则应用确定何时停止使用“等待事件”状态以继续等待加速器任务完成(因为这可以阻止CPU核),并且相反应用线程进行解除调度的合适的截止期限(从而允许其他任务在CPU核上执行,但增加从加速器任务完成到CPU应用工作于任务输出数据的时延)。用于该进程的截止期限的延迟可以依赖于应用而改变,但合适的超时时间段可以是例如主CPU调度配额的10%。
[0250] 应用然后在事件超时寄存器中设置用于已计算得的截止期限的超时(步骤90),并且使用“等待事件”状态等待事件发生。因为事件可以由于很多原因而生成,所以应用在退出等待事件状态时检查事件以及是否超时已完成。
[0251] 当应用退出等待事件状态时,应用检查合适的事件是否已发生(在这种情况下,加速器任务完成)(步骤91)(并且如果,则前进以使用来自加速器任务的输出数据)。
[0252] 如果合适事件(加速器任务完成)尚未发生,则应用检查超时截止期限是否已过(步骤92)。如果否,则应用返回到“等待事件”状态,并监测超时截止期限。
[0253] 如果超时截止期限已过,则CPU应用线程被解除调度(步骤93),并且当适当事件发生时(在这种情况下,加速器任务完成),被请求继续(被重新调度)(步骤94)。这允许其他任务在CPU核上执行,但会增加从加速器任务完成到CPU应用工作于任务输出数据的时延。
[0254] 若需要,对本实施方式的各种替换和附加是可行的。
[0255] 例如,如果加速器是图形处理单元(GPU)并且期望支持图形处理任务,则系统可以支持用于图形的任务链(而对于计算作业,单个任务在大多数情况下足够)。由此,创建图形任务的各应用优选地分配多个虚拟加速器输入/输出接口,并且可以根据需要在上面分派图形任务。
[0256] 图形还可以要求附加类型的任务,诸如用更复杂的输入数据进行像素渲染或的图块多边形链表创建。在要支持图形任务的情况下,优选地,提供更多个物理寄存器输入/输出接口(因为这将提高吞吐量(因为图形任务往往较长并且从并行运行获益))。
[0257] CPU可以例如直接接收所创建的任务并在它们之间仲裁。
[0258] 另选地或另外地,在CPU具有关联的微控制器单元(MCU)的情况下,物理寄存器输入/输出接口可以作为对MCU的请求而馈入,然后MCU可以酌情调度GPU上的被请求任务,和/或物理寄存器输入/输出接口可以由任务调度器直接仲裁,以减少任务分派时延,其中MCU周期性地检索关于所分派的任务上的统计信息,并且,例如,通过调节任务调度器调度参数或通过先行进行直接分派的任务(如果需要)来实现调度规则。
[0259] 如果加速器支持与CPU共享页表,则同步分派描述符和作业存储器可以从CPU线程栈分配。然而,可以有利的是,确保被加速器使用的存储器固定,以避免由于页交换而使加速器停滞。在交换不重要的系统中(或者如果加速器有效地支持页交换),则从应用软件的观点,加速器任务分派变得非常简单:启动栈上的数据结构(如果需要);分配虚拟加速器输入/输出接口;对虚拟加速器输入/输出接口中的寄存器进行写入,以分派作业。
[0260] 本发明还可以用于通过将本发明与两级地址转换业务组合来创建“虚拟化接口”。然后,这可以在为了使加速器能够用于虚拟化(在多个应用之间虚拟化,或跨越多个虚拟机虚拟化或这两者)而需要很少修改或不需要修改加速器本身的情况下,用于控制对现有加速器访问。
[0261] 图9示出了这种虚拟化接口的优选实施方式。
[0262] 如图9所示,虚拟化接口100将在加速器12与主CPU 101之间交互,并且允许访问与主CPU共享的存储器102。
[0263] 虚拟化接口100包括如上所述的合适的接口映射单元21,该接口映射单元21提供物理寄存器输入/输出接口和虚拟加速器输入/输出接口等;和微控制器(MCU),该微控制器(MCU)尤其充当任务调度器9。虚拟化接口100还包括系统MMU 103。
[0264] 然后,该虚拟化接口100可以提供使得在加速器本身很少修改或不修改的情况下现有加速器能够由多个应用和/或虚拟机使用的装置。虚拟化接口100将使虚拟寄存器接口暴露于各个应用,并且微控制器将接收物理寄存器输入/输出接口中输入的指示,然后调度来自加速器上的不同应用的任务。系统MMU提供来自不同应用/虚拟机的任务之间的数据平面分离,并且与任务调度同步由微控制器构造。
[0265] 可以从上面看出本发明在其至少优选实施方式中,提供一种系统,该系统用于向应用自动按需分配物理加速器寄存器输入/输出接口,以便例如使得能够向虚拟化系统中的GPU或其他加速器分派任务。所描述的方法和系统具体适合于小计算作业的低时延同步分派,但还可以应用于异步分派和其他工作负荷(诸如图形加速)。
[0266] 本发明的优点包括从应用直接低时延任务提交,并且支持大量虚拟机(不限于物理寄存器输入/输出接口的数量)。
[0267] 本发明至少在其优选实施方式中,可以提供针对小计算任务的低时延同步分派和有效完成。实际上,相信本发明的优化实现可以将分派(和完成)时延缩短到小于一千个CPU周期。
[0268] 用于任务分派的应用接口非常简单。如果系统支持主CPU与加速器之间共享页表和存储器相干性,则应用接口包括分配输入/输出接口、对寄存器进行写入以分派任务以及等待任务完成。应用不需要缓冲编组或其他设置(假设预编译所需的任意计算内核)。
[0269] 在支持共享页表和相干性的系统中,以下功能应足以支持计算作业的同步分派:当首先尝试访问时,将虚拟加速器输入/输出接口映射到应用;保持虚拟加速器输入/输出接口属性表最新(即,确保更新MMU页表变化);在重映射用于任务的MMU地址空间标识符时,将加速器上正在运行或搁置的任务考虑在内(对于同步分派,新任务可以优选地仅从运行中的CPU线程创建-这使MMU地址空间标识符管理基本上比用于基于队列的系统简单)。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈