一种DMA调度方法、装置和计算机可读存储介质与流程

专利2022-06-30  68


本发明属于计算机领域,具体涉及一种dma调度方法、装置和计算机可读存储介质。



背景技术:

处理器或者数字信号处理器主要用于数据处理。处理器可以包括一个处理器核心,一个存储器,一个dma(directmemoryaccess,直接存储器存取)控制器,一个外部总线接口,以及一个或者多个外部接口用于实现芯片与外部的数据交互。处理器核心用于完成数据的处理操作,而数据的处理必然涉及数据源的读取和数据操作结果的储存操作。在数据的读写中,存在批量数据读写操作,即将大块数据从一个存储区域传输到另一个存储区域。处理器中,dma控制器实现了上述的大块数据传输操作,从而将处理器核心从繁重的数据传输操作中解放出来,处理器核心可以直接利用dma传输的数据进行数据处理,也可以将处理完成的数据由dma控制器传输到指定的地址空间。

在现有的dma控制器实现方法中,当多个外设同时需要利用dma控制器进行数据传输时,dma控制器的读写都采用固定的优先级或者优先级轮循的模式进行。上述两种方法导致数据的传输具有很大延时性,降低了系统的数据吞吐量。

此外,现有技术中当用户线程发起dma调度请求时,必须将每个dma调度请求放入与该请求对应的驱动接口所对应的dma通道中,没有软件层面对dma调度请求进行分配的过程。这样通常会导致dma通道负载不均衡,从而降低了数据处理系统的数据吞吐量。



技术实现要素:

针对现有技术中存在的问题,即,当多个外设同时需要利用dma控制器进行数据传输时,dma控制器的读写都采用固定的优先级或者优先级轮循的模式进行,从而导致数据的传输具有很大延时性;此外,当用户线程发起任务请求时,必须将每个任务请求放入与该任务请求对应的驱动接口所对应的专用dma通道中,没有软件层面对任务请求进行分配的过程,导致dma通道负载不均衡,从而降低了数据处理系统的数据吞吐量,基于此,本发明实施例提供了一种dma调度方法、装置和计算机可读存储介质,进而在软件层面对dma调度请求进行分配,通过将每个dma调度任务分配到所述全部dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

依据本发明的第一方面,提供了一种dma调度方法,其包括:

根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;

响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

在上述实施例的基础上,所述响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求,包括:

响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求;

将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程;

基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求;

返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

在上述实施例的基础上,基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理dma调度请求之后,包括:

通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

在上述实施例的基础上,在将dma调度请求放入排队数量最少的任务队列中,并触发与排队数量最少的任务队列相对应的工作线程之前,所述方法还包括:

获取各个任务队列中的排队数量;其中,所述排队数量用于表示任务队列中处于等待状态的任务数量;

对各个任务队列的排队数量进行排序,得到排序结果;

根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

在上述实施例的基础上,所述被触发的工作线程调用dma控制器,用于传输数据和内存/外存之间的数据交互。

在上述实施例的基础上,所述dma调度请求以队列的形式排列。

依据本发明的第二方面,提供了一种dma调度装置,所述装置包括:

环境初始化模块,用于根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;

调度请求处理模块,用于响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

在上述实施例的基础上,所述调度请求处理模块包括:

调度请求获取单元,用于响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求;

线程触发单元,用于将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程;

调度请求处理单元,用于基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求;

循环执行单元,用于返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

在上述实施例的基础上,所述dma调度装置还包括:

中断服务程序触发模块,用于通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

在上述实施例的基础上,所述调度请求处理模块还包括:

数据获取单元,用于获取各个任务队列中的排队数量;其中,所述排队数量用于表示任务队列中处于等待状态的任务数量;

排序单元,用于对各个任务队列的排队数量进行排序,得到排序结果;

任务队列确定单元,用于根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

在上述实施例的基础上,所述dma控制器,用于传输数据和内存/外存之间的数据交互。

在上述实施例的基础上,所述dma调度请求以队列的形式排列。

依据本发明的第三方面,还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令被处理器执行时实现如上所述的dma调度方法。

本发明实施例提供的技术方案具有以下有益效果:

本发明提供了一种dma调度方法、装置和计算机可读存储介质,该dma调度方法根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。本发明在软件层面对dma调度请求进行分配,通过将每个dma调度请求分配到所述全部dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举说明本发明的具体实施方式。

附图说明

通过阅读下文的示例性实施例的详细描述,本领域普通技术人员将明白本文所述的有点和益处以及其他优点和益处。附图仅用于示出示例性实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的标号表示相同的部件。在附图中:

图1为根据本发明一实施例的dma调度方法流程示意图;

图2为根据本发明又一实施例的dma调度方法流程示意图;

图3为根据本发明一实施例的dma调度装置的示意图;

图4示出了根据本发明实施例的计算机可读存储介质的示意图。

具体实施方式

下文中,将参考附图详细描述本发明的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。

在本发明中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。

另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。

在本说明书中的一个或多个实施例中,所述dma调度方法可以应用于包括risc-v处理器和dma控制器的数据处理系统中,本发明可以在软件层面对数据处理系统中的dma调度请求进行分配,将每个dma调度请求分配到全部dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

其中,risc-v是加州大学伯克利分校(universityofcaliforniaatberkeley,ucb)设计并发布的一种开源指令集架构,其目标是成为指令集架构领域的linux,应用覆盖iot(internetofthings)设备、桌面计算机、高性能计算机等众多领域。相比于现有技术中的其他指令集框架,risc-v框架具有着开源性、差异化和自由选择权的关键优势,因此,出现了很多基于risc-v框架的处理器,这些处理器的实现范围十分广泛,从简单物联网处理器到运行linux的应用处理器,都是基于一套共同的指令集。

现有技术中的dma控制器实现方法中,可以使用多个外设设备同时需要利用dma控制器进行数据传输时,dma控制器的读写都采用固定的优先级或者优先级轮循的模式进行。上述方法将导致数据的传输具有很大延时,并且,也降低了系统的数据吞吐量。此外,现有技术中当用户线程发起任务请求时,必须将每个任务请求放入与该任务请求对应的驱动接口所对应的专用dma通道中,没有软件层面对任务请求进行分配的过程。这样通常会导致dma通道负载不均衡,从而降低了数据处理系统的数据吞吐量。基于此,本发明实施例提出了一种dma调度方法。

下面将具体介绍本发明实施例中的线程调度方法,请参阅图1,图1示出了根据本发明实施例的dma调度方法流程示意图。应当理解的是,本发明实施例的方法的执行主体可以是risc-v处理器。本发明实施例的方法包括:

s110、根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应。其中,dma(directmemoryaccess),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。dma控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有dma能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。值得注意的是,通常只有数据流量较大(kbps或者更高)的外设才需要支持dma能力,这些应用方面典型的例子包括视频、音频和网络接口。

具体而言,dma控制器包括一条地址总线、一条数据总线和控制寄存器。高效率的dma控制器将具有访问其所需要的任意资源的能力,而无须处理器本身的介入就能产生中断。最后,它能在控制器内部计算出地址。

本实施例中所述的risc-v处理器可以包含多个dma控制器。每个控制器有多个dma通道,以及多条直接与存储器站(memorybank)和外设连接的总线,具体的,在很多高性能处理器中集成了两种类型的dma控制器。第一类通常称为“系统dma控制器”,可以实现对任何资源(外设和存储器)的访问,第二类称为内部存储器dma控制器(imdma),专门用于内部存储器所处位置之间的相互存取操作。

具体的,每一个dma具有至少一个全局中断标志位,本实施例中可以通过全局中断标志位来确定dma通道的数量。

所述dma调度环境即为多个dma通道中的每一个dma通道创建至少一个任务队列和至少一个工作线程。

s120、响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

本实施例中所述的dma调度请求由用户发起,并通过用户线程发出。鉴于线程的功能性,本实施例将用于发送dma调度请求的线程称为用户线程,将用于调用dma控制器的线程称为工作线程。

在另外一些实施例中,所述dma调度请求以队列的形式排列。具体的,队列的特点是fifo(firstinputfirstoutput),即先入先出。示例性的,假设本实施例中需要处理的dma调度请求的数量为m,dma通道的数量为n。则m个dma调度请求按照在队列中的先后顺序而被选取并分配到所述n个dma通道中。所述n个dma通道中任务队列中的任务也是按照进入队列的先后顺序被顺次执行。

dma控制器,用于传输数据和内存/外存之间的数据交互。

在dma调度方法执行过程中,risc-v处理器会通过调用dma控制器的控制下直接和存储器进行高速数据传送。具体的,在使用dma调度方法进行数据传输过程中,首先向需要向dma控制器发出请求,dma控制器再向risc-v处理器发出总线请求,要求控制系统总线。risc-v处理器响应dma控制器的总线请求并把总线控制权交给dma控制器,然后在dma控制器的控制下开始利用系统总线进行数据传输。

为了便于理解,本实施例可以对所述dma调度方法进行这样的描述:所述数据处理系统有n个通用dma通道,其中n大于等于2,所述方法包括:为所述n个通用dma通道中的每一个dma通道创建1个任务队列和1个对应的工作线程;用户线程发起m个dma请求任务;其中m大于等于1;将所述m个dma请求任务分配到所述n个通用dma通道的任务队列中以完成所述m个dma请求任务。所述将所述m个dma请求任务分配到所述n个通用dma通道的任务队列中包括:按照顺序依次选取所述m个dma请求任务中的1个dma请求任务;将所述1个dma请求任务放入所述n个通用dma通道中任务数量最少的dma通道的任务队列中,直到分配完所述m个dma请求任务。

本实施例中所述的dma调度方法,可以根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。本发明在软件层面对任务请求进行分配,通过将每个请求任务分配到所述全部通用dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

不同于上述实施例,本实施例中所述的dma调度方法中处理dma调度请求之后,会通过中断服务程序通知所述risc-v处理器所述dma调度请求任务结束,下面结合图2进一步描述本发明实施例,图2为根据本发明另一实施例的dma调度方法流程示意图,如图2所示,所述dma调度方法包括:

s210、根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应。

s220、响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求。

在一些实施例中,dma调度方法会对用户发出的多个dma调度请求逐个获取,并循环多次,直至全部dma调度请求被全部处理完毕。本实施例中所述的s220到s250操作就是会循环执行多次的操作。

s230、将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程。

在另外一些实施例中,可以将在上述操作中创建的多个任务队列中的任务数量进行比较,并选择一个任务数量最少的任务队列,并将等待处理的dma调度请求放入其中,并触发与该任务队列相对应的工作线程,以执行后续程序。

在一种可能的实施方式中,在将dma调度请求放入排队数量最少的任务队列中、并触发与排队数量最少的任务队列相对应的工作线程之前,所述dma调度方法还包括:获取各个任务队列中的排队数量,得到多个排队数量;该排队数量用于表示任务队列中处于等待状态的任务数量;对所述多个排队数量进行排序,得到排序结果;根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

作为一个可能的实施方式,假设dma调度环境中包括五个任务队列q1、q2、q3、q4、q5,其分别对应的排队数量为5、7、3、8、9,此时会先对各排队数量进行排序,所得到的排序结果可以是正序排序结果(3、5、7、8、9),也可以是逆序排序结果(9、8、7、5、3),进而根据排序结果确定各个任务队列的排队数量当中的最小值为3,进而将排队数量为3的任务队列q3作为用于处理dma调度请求的任务队列。

作为另一个可能的实施方式,dma调度环境中的所包括的任务队列q1、q2、q3、q4、q5可各自预先设置有优先级,所述优先级也可以影响对用于处理dma调度请求的任务队列的选择。例如,假设任务队列的预设优先级设置为使得任务队列q1、q2、q3、q4、q5的优先级依次降低,若其分别对应的排队数量为5、7、5、8、5,所得到的排序结果可以是正序排序结果(5、5、5、7、8),也可以是逆序排序结果(8、7、5、5、5),进而根据排序结果确定各个任务队列的排队数量最小值为5,符合要求的任务队列有三个队列q1、q3、q4,此时就基于预先设置的任务队列优先级来确定用于处理dma调度请求的任务队列,即选取优先级最高的任务队列q1作为用于处理dma调度请求的任务队列。

s240、基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求。

其中,dma控制器是内存储器同外设之间进行高速数据传送时的硬件控制电路,是一种实现直接数据传送的专用处理器。一般的,dma控制器包括一条地址总线、一条数据总线和控制寄存器。一个处理器可以包含多个dma控制器。每个控制器有多个dma通道,以及多条直接与存储器站(memorybank)和外设连接的总线。在很多高性能处理器中集成了两种类型的dma控制器。第一类通常称为“系统dma控制器”,可以实现对任何资源(外设和存储器)的访问。第二类称为“内部存储器dma控制器”,专门用于内部存储器所处位置之间的相互存取操作。本发明的dma控制器属于第一类,因此具有通用的dma通道。

为了更清楚的描述dma调度请求的任务分配的原则,本实施例会在上述实施例的基础上进行阐述,具体的,本实施例按照顺序依次选取的所述m个dma请求任务中的1个dma请求任务分配到所述n个通用dma通道中任务数量最少的dma通道的任务队列中。在本发明的一个具体实施方式中,如果某个dma通道的任务队列中的任务数量远远少于其他dma通道,则会一直将请求任务分配到该dma通道的任务队列中。在本发明中,所述n个通用dma通道可以具有通道序号。在本发明的另一个具体实施方式中,如果有至少两个dma通道的任务队列中的任务数量相等,则可以选取dma通道序号最小的或最大的dma通道,或者任意选取所述至少两个dma通道中的一个通道。

s250、通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

其中,中断服务程序当中央处理器正在处理内部数据,且外界发生了紧急情况时,要求risc-v处理器暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。实现这一功能的部件称为中断系统,处理这种“急件事件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。

进一步的,任务结束事件用于通知数据处理系统dma调度请求处理结束。

s260、返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

进一步的,将dma调度请求放入多个dma通道中任务数量最少的dma通道的任务队列中之后还包括:

任务数量最少的dma通道中的工作线程调用dma控制器来完成dma调度请求。

下面结合图3描述用于实现上述dma调度装置。如图3所示,示出了本发明又一实施例的dma调度装置的示意图。该dma调度装置包括:环境初始化模块310和调度请求处理模块320。

环境初始化模块310,用于根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;

调度请求处理模块320,用于响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

本发明实施例根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。本发明在软件层面对任务请求进行分配,通过将每个请求任务分配到所述全部通用dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

在上述实施例的基础上,所述调度请求处理模块包括:

调度请求获取单元,用于响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求;

线程触发单元,用于将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程;

调度请求处理单元,用于基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求;

循环执行单元,用于返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

在上述实施例的基础上,所述dma调度装置还包括:

中断服务程序触发模块,用于通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

在上述实施例的基础上,所述调度请求处理模块还包括:

数据获取单元,用于获取各个任务队列中的排队数量;其中,所述排队数量用于表示任务队列中处于等待状态的任务数量;

排序单元,用于对各个任务队列的排队数量进行排序,得到排序结果;

任务队列确定单元,用于根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

在上述实施例的基础上,所述dma控制器,用于传输数据和内存/外存之间的数据交互。

在上述实施例的基础上,所述dma调度请求以队列的形式排列。

根据本发明的又一实施例,还提供了一种计算机可读存储介质。如图4所示,示出了根据本发明一实施例的计算机可读存储介质400的示意图,该计算机可读存储介质上存储有计算机指令,该计算机指令被处理器执行时实现如上所述的dma调度方法。该计算机可读存储介质400可以采用便携式紧凑盘只读存储器(cd-rom)。然而,本发明的计算机可读存储介质400不限于此,在本文件中,计算机可读存储介质可以是任何包含或存储计算机指令的有形介质。

本发明实施例根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。本发明在软件层面对任务请求进行分配,通过将每个请求任务分配到所述全部通用dma通道中任务数量最少的dma通道的任务队列中,从而实现平衡dma通道负载,有效提升了数据处理系统的数据吞吐量。

附图中的流程图和框图,图示了按照本公开各种实施例的方法、装置和计算机可读存储介质的可能实现的体系架构、功能和操作。应当注意,流程图中的每个方框所表示的步骤未必按照标号所示的顺序进行,有时可以基本并行地执行,有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的硬件来实现,或者可以用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。

通过以上对实施例的描述,本领域的技术人员可以清楚地了解到各实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。


技术特征:

1.一种dma调度方法,其特征在于,所述方法包括:

根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;

响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

2.如权利要求1所述的方法,其特征在于,所述响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求,包括:

响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求;

将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程;

基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求;

返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

3.如权利要求2所述的方法,其特征在于,基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理dma调度请求之后,包括:

通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

4.如权利要求2所述的方法,其特征在于,在将dma调度请求放入排队数量最少的任务队列中,并触发与排队数量最少的任务队列相对应的工作线程之前,所述方法还包括:

获取各个任务队列中的排队数量;其中,所述排队数量用于表示任务队列中处于等待状态的任务数量;

对各个任务队列的排队数量进行排序,得到排序结果;

根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

5.如权利要求1所述的方法,其特征在于:

所述dma控制器,用于传输数据和内存/外存之间的数据交互。

6.如权利要求1-5所述的方法,其特征在于,所述dma调度请求以队列的形式排列。

7.一种dma调度装置,其特征在于,所述装置包括:

环境初始化模块,用于根据dma通道的数量初始化dma调度环境,以分别为各dma通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;

调度请求处理模块,用于响应于用户线程发起的多个dma调度请求,将所述多个dma调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用dma控制器,以处理所述多个dma调度请求。

8.如权利要求7所述的装置,其特征在于,所述调度请求处理模块包括:

调度请求获取单元,用于响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求;

线程触发单元,用于将所述dma调度请求放入排队数量最少的任务队列中,并触发与所述排队数量最少的任务队列相对应的工作线程;

调度请求处理单元,用于基于与所述排队数量最少的任务队列相对应的工作线程调用dma控制器,以处理所述dma调度请求;

循环执行单元,用于返回执行响应于用户线程发起任意一个dma调度请求,获取所述dma调度请求的步骤,直至所述多个dma调度请求被全部处理完毕。

9.如权利要求8所述的装置,其特征在于,所述dma调度装置还包括:

中断服务程序触发模块,用于通过dma控制器触发中断服务程序中的任务结束事件,以通知所述risc-v处理器所述dma调度请求任务结束。

10.如权利要求8所述的装置,其特征在于,所述调度请求处理模块还包括:

数据获取单元,用于获取各个任务队列中的排队数量;其中,所述排队数量用于表示任务队列中处于等待状态的任务数量;

排序单元,用于对各个任务队列的排队数量进行排序,得到排序结果;

任务队列确定单元,用于根据排序结果将排队数量最小的任务队列作为用于处理dma调度请求的任务队列。

11.如权利要求7所述的装置,其特征在于:

所述dma控制器,用于传输数据和内存/外存之间的数据交互。

12.如权利要求7-11所述的装置,其特征在于,所述dma调度请求以队列的形式排列。

13.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该计算机指令被执行以实现如权利要求1-6中任一项所述的方法。

技术总结
本发明提供了一种DMA调度方法、装置和计算机可读存储介质。其中,该DMA调度方法包括:根据DMA通道的数量初始化DMA调度环境,以分别为各DMA通道创建至少一个任务队列和至少一个工作线程;其中,所述任务队列和工作线程一一对应;响应于用户线程发起的多个DMA调度请求,将所述多个DMA调度请求逐个分配至多个任务队列中,并触发与所述多个任务队列分别对应的工作线程;基于被触发的工作线程调用DMA控制器,以处理所述多个DMA调度请求。本发明在软件层面对任务请求进行分配,通过将每个请求任务分配到所述全部通用DMA通道中任务数量最少的DMA通道的任务队列中,从而实现平衡DMA通道负载,有效提升了数据处理系统的数据吞吐量。

技术研发人员:郭晖;张楠赓
受保护的技术使用者:杭州嘉楠耘智信息科技有限公司
技术研发日:2018.11.29
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-59675.html

最新回复(0)