CN117215798A - 一种内存访问方法和装置 - Google Patents

一种内存访问方法和装置 Download PDF

Info

Publication number
CN117215798A
CN117215798A CN202311394016.0A CN202311394016A CN117215798A CN 117215798 A CN117215798 A CN 117215798A CN 202311394016 A CN202311394016 A CN 202311394016A CN 117215798 A CN117215798 A CN 117215798A
Authority
CN
China
Prior art keywords
sub
queue
target task
annular
ring
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311394016.0A
Other languages
English (en)
Inventor
贺宇
蒋超
李微
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lenovo Beijing Ltd
Original Assignee
Lenovo Beijing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lenovo Beijing Ltd filed Critical Lenovo Beijing Ltd
Priority to CN202311394016.0A priority Critical patent/CN117215798A/zh
Publication of CN117215798A publication Critical patent/CN117215798A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开一种内存访问方法和装置,方法包括,获得用户的有直接内存访问需求的目标任务;根据目标任务从用户的第一环形队列中确定目标任务对应的子环形队列,子环形队列由第一环形队列中连续的空闲存储空间组成;为每一目标任务分配对应的子环形队列,使目标任务基于分配的子环形队列进行直接内存访问。

Description

一种内存访问方法和装置
技术领域
本申请涉及一种内存访问方法和装置。
背景技术
基于环形队列的直接内存访问(Direct MemoryAccess,DMA)技术提供了对数据传输的更细粒度存储空间分配,同时支持多并发高带宽传输,适用场景广泛,如数据中心和云计算、网络设备、存储系统、视频处理、实时分析和科学计算仿真等。
相关的DMA技术中,每一数据处理任务都需要通过一个环形队列进行直接内存访问。受计算资源限制,主机中同时存在的环形队列数量有限,当需要进行直接内存访问的任务数量较多时,直接内存访问的效率就会受环形队列数量的限制而降低。
发明内容
为此,本申请公开如下技术方案:
本申请第一方面提供一种内存访问方法,包括:
获得用户的有直接内存访问需求的目标任务;
根据所述目标任务从所述用户的第一环形队列中确定所述目标任务对应的子环形队列,所述子环形队列由所述第一环形队列中连续的空闲存储空间组成;
为每一所述目标任务分配对应的所述子环形队列,使所述目标任务基于分配的所述子环形队列进行直接内存访问。
可选的,所述根据所述目标任务从所述用户的第一环形队列中确定子环形队列,包括:
根据所述目标任务的预期传输数据量,从所述用户的环形队列中确定所述目标任务对应的子环形队列。
可选的,还包括:
在所述第一环形队列的空闲存储空间不足以存放所述目标任务的数据的情况下,建立所述用户的第二环形队列,并根据所述目标任务从所述第二环形队列中确定所述目标任务对应的子环形队列。
可选的,还包括:
在占用所述第二环形队列的所述目标任务结束,或者所述第一环形队列的空闲存储空间足以存放所述目标任务的数据的情况下,释放所述第二环形队列占用的存储空间。
可选的,还包括:
释放所述第一环形队列占用的且不属于任一所述子环形队列的空闲存储空间。
可选的,还包括:
根据所述目标任务的实际传输数据量,调整所述目标任务对应的所述子环形队列的容量。
可选的,所述根据所述目标任务的实际传输数据量,调整所述目标任务对应的所述子环形队列的容量,包括以下至少一者:
在所述目标任务的实际传输数据量小于对应的所述子环形队列的容量的情况下,将所述目标任务对应的子环形队列占用的部分存储空间释放至所述第一环形队列;
在所述目标任务的实际传输数据量大于对应的所述子环形队列的容量的情况下,将所述子环形队列相邻的另一子环形队列占用的存储空间并入所述目标任务对应的子环形队列。
可选的,所述将所述目标任务对应的子环形队列占用的部分存储空间释放至所述第一环形队列,包括:
在所述子环形队列的至少一端存在空闲存储空间的情况下,从存在空闲存储空间的一端开始将所述子环形队列占用的部分存储空间释放至所述第一环形队列。
可选的,还包括:
在所述目标任务结束的情况下,将所述目标任务对应的子环形队列的存储空间释放至所述第一环形队列。
本申请第二方面提供一种内存访问装置,包括主机和现场可编程逻辑门阵列;
所述主机具有至少一个用户;
所述主机根据权利要求1至9任意一项所述的内存访问方法,为所述用户的有直接内存访问需求的目标任务分配子环形队列;
所述现场可编程逻辑门阵列用于从所述目标任务对应的子环形队列中读取所述目标任务写入的直接内存访问描述符,并执行所述直接内存访问描述符对应的直接内存访问操作。
本方案的有益效果在于:
通过在第一环形队列中划分出多个子环形队列的方式,在不增加环形队列数量的前提下满足多个目标任务的直接内存访问需求,解决了环形队列数量过多而导致直接内存访问的效率降低的问题。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本申请实施例提供的一种内存访问方法的流程图;
图2是本申请实施例提供的一种第一环形队列和子环形队列的示意图;
图3是本申请实施例提供的另一种内存访问方法的流程图;
图4是本申请实施例提供的一种内存访问装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种内存访问方法,请参见图1,为该方法的流程图,该方法可以包括如下步骤。
S101,获得用户的有直接内存访问需求的目标任务。
本实施例提供的方法,可以由任一计算机设备中的主机(host)执行。这里的用户,可以是主机上的任一虚拟机用户或者物理机用户。
目标任务,可以理解为运行于用户对应的虚拟机或物理机上的,需要进行直接内存访问需求的数据处理任务,例如可以是需要进行直接内存访问需求的应用程序,进程等。
S102,根据目标任务从用户的第一环形队列中确定目标任务对应的子环形队列,子环形队列由第一环形队列中连续的空闲存储空间组成。
第一环形队列,可以在首次获得目标任务时创建,也可以在用户对应的虚拟机或物理机启动时创建。
第一环形队列的大小可以设定为默认值,例如默认创建一个包含M个条目的第一环形队列,也可以根据不同的用户而决定。
例如,对某个多次使用过主机的用户甲,主机可以收集用户甲每次使用主机时,产生的目标任务的数量,以及每个目标任务进行直接内存访问时向环形队列中写入的数据量,基于收集的信息为该用户创建合适大小的第一环形队列。示例性的,根据收集的信息确定该用户每次进行直接内存访问时,至少要使用N个条目,至多使用N+P个条目,则为该用户创建包含N+P个条目的第一环形队列。
本实施例中,一个条目可以理解为构成一个环形队列的存储空间的最小单元,换言之,一个条目相当于环形队列中可以存储一个直接内存访问(Direct Memory Access,DMA)描述符的存储空间。目标任务进行直接内存访问时,将若干个DMA描述符存入该目标任务的环形队列中,然后描述符引擎可以从环形队列读取目标任务写入的描述符并提供给DMA引擎,DMA引擎根据描述符执行对应的直接内存访问操作,例如直接从内存读或写指定数据,由此实现目标任务的直接内存访问。
在步骤S102中,主机可以在第一环形队列中,为每一目标任务确定一个对应的子环形队列,即目标任务和子环形队列之间具有一一对应的关系。
对于任意一个目标任务,确定该目标任务对应的子环形队列时,子环形队列的大小可以是预设的固定值,可以根据该目标任务的预期传输数据量确定,也可以根据获得的目标任务的个数和第一环形队列的大小确定,还可以根据用户的配置而确定。
对根据目标任务的预期传输数据量确定的情况,步骤S102相当于:
根据目标任务的预期传输数据量,从用户的环形队列中确定目标任务对应的子环形队列。
这里的预期传输数据量,可以是该目标任务每次进行直接内存访问时,预期需要向对应的子环形队列写入的DMA描述符的总量,
在这种确定子环形队列的方式中,主机可以为目标任务确定一个恰好能够容纳其预期传输数据量的子环形队列,或者可以确定一个略大于其预期传输数据量的子环形队列。
示例性的,假设一个目标任务每一次进行直接内存访问时,预计需要向子环形队列中填入1024个DMA描述符,那么主机可以为该目标任务确定一个包含1024个条目的子环形队列,或者可以确定一个包含1040个条目的子环形队列。
作为一个示例,假设步骤S101中获得了3个目标任务,针对这3个目标任务按其预期传输数据量而确定的子环形队列可以如图2所示,图2的圆环表示第一环形队列,圆环中不同样式的阴影部分表示不同目标任务对应的子环形队列。
按照各个目标任务的预期传输数据量而确定子环形队列的好处在于,尽可能合理的分配第一环形队列的存储空间,减少后续直接内存访问的过程中动态调整子环形队列大小的次数,节约操作系统的处理资源。
可选的,当按照各个目标任务的预期传输数据量而确定子环形队列时,可能出现第一环形队列的空闲存储空间不足的情况。
示例性的,可能出现获得的3个目标任务都需要占用至少1024个条目,而第一环形队列中空闲的条目只有2048个,这种情况下,主机可以执行如下步骤:
在第一环形队列的空闲存储空间不足以存放目标任务的数据的情况下,建立用户的第二环形队列,并根据目标任务从第二环形队列中确定目标任务对应的子环形队列。
第二环形队列的大小可以和第一环形队列相同或不同。
创建第二环形队列后,主机可以首先在第一环形队列中确定目标任务的子环形队列,在第一环形队列的空闲存储空间不足时,再将剩余尚未确定子环形队列的目标任务在第二环形队列中确定子环形队列。
结合前述示例,主机可以将第一环形队列中剩余的2048个条目确定为两个目标任务对应的两个子环形队列,然后在第二环形队列中,为第三个目标任务确定一个含1024个条目的子环形队列。
或者,主机也可以直接将获得的各个目标任务都在第二环形队列中确定子环形队列。
创建第二环形队列的作用在于,当第一环形队列的空闲存储空间不足时,通过创建新的环形队列,支持尽可能多的目标任务进行直接内存访问。
可选的,为了控制环形队列的数量,主机在创建第二环形队列后,可以按如下方式释放第二环形队列:
在占用第二环形队列的目标任务结束,或者第一环形队列的空闲存储空间足以存放目标任务的数据的情况下,释放第二环形队列占用的存储空间。
结合前述示例,当第三个目标任务结束,且没有新的目标任务占用第二环形队列的存储空间时,主机可以将第二环形队列占用的存储空间释放回操作系统。
或者,一段时间后,由于其他占用第一环形队列的目标任务结束,第一环形队列中出现了足以容纳第三个目标任务的空闲存储空间,例如又出现了2048个条目的空闲存储空间,于是,主机可以在第一环形队列中重新为第三个目标任务确定对应的子环形队列,同时将第二环形队列占用的存储空间释放回操作系统,使得第三个目标任务后续通过第一环形队列进行直接内存访问。
按上述实施例的方式创建和释放第二环形队列的作用在于,在初始时只需要创建一个第一环形队列,在用户后续进行直接内存访问的过程中,再根据存储资源的使用情况动态的增加或减少第二环形队列,这样既能够在目标任务较多时,通过增加第二环形队列的方式支持更多目标任务进行直接内存访问,又能够在一个环形队列能够满足目标任务的直接内存访问需求的情况下,及时的释放多余的第二环形队列,避免环形队列过多影响系统性能。
在根据目标任务的个数和第一环形队列的大小确定的情况下,主机可以将第一环形队列中空闲存储空间的大小,也就是按照第一环形队列中未被占用的条目的总数,平均分配给每个目标任务,这种情况下,每个目标任务对应的子环形队列都包含SUM/X个条目,其中SUM表示第一环形队列中未被占用的条目总数,X表示目标任务的个数。
在一些可选的实施例中,为了方便管理第一环形队列的存储空间,可以预先将第一环形队列划分为若干个初级子环队列,各个初级子环队列包含相同数量的条目,例如都包含2n个条目。
这种情况下,在第一环形队列中确定一个目标任务对应的子环形队列,相当于,将第一环形队列中若干个连续的且未被其他目标任务占用的初级子环队列组成该目标任务的子环形队列。
其中,每个子环形队列包含的初级子环队列的数量,可以是默认的固定值,可以根据对应的目标任务的预期传输数据量确定,也可以根据目标任务的数量和第一环形队列的大小确定,还可以根据用户的配置而确定,实施方式可以参见前文按条目划分时确定子环形队列的方式,不再赘述。
本实施例中,主机对第一环形队列中存储空间的调度操作,包括分配给子环形队列,从子环形队列释放,从第一环形队列释放回操作系统,从操作系统加入第一环形队列等操作,可以按条目为单位进行,或者,在划分了初级子环队列的情况下,也可以按初级子环队列为单位进行。
可选的,在为每一个目标任务确定子环形队列后,主机可以将构成这些子环形队列的存储空间(可以是条目或上述初级子环队列)锁定,也就是将这些存储空间标记为被对应的目标任务占用,在锁定一个子环形队列后,即使该子环形队列为空,也不会被邻近的其他子环形队列合并,达到避免这些存储空间被重复分给其他目标任务使用的效果。
对应的,在需要将子环形队列占用的存储空间释放回第一环形队列时,可以将该子环形队列的存储空间解锁,也就是将这些存储空间标记为未被目标任务占用,由此,第一环形队列中这些被解锁的存储空间就能够被分配给其他目标任务使用。
在一些可选的实施例中,主机也可以在确定各个目标任务对应的子环形队列时,根据第一环形队列的实际使用情况对第一环形队列的大小进行动态调整。
调整的方式可以包括:
其一,释放第一环形队列占用的且不属于任一子环形队列的空闲存储空间。
其二,扩展第一环形队列的大小,使得第一环形队列能够支持各目标任务的直接内存访问。
在第一种调整方式中,主机在为每一个目标任务确定了对应的子环形队列后,可以识别第一环形队列中是否有未被任一目标任务占用的,且不属于已确定的任一子环形队列的空闲存储空间,然后将这部分空闲存储空间释放回操作系统,从而提高第一环形队列所占用的存储空间的利用率。
在第二种调整方式中,主机可以在第一环形队列当前的空闲存储空间不足以存放目标任务的数据的情况下,从操作系统获取更多的存储空间并将获取的存储空间并入第一环形队列,使得扩展后的第一环形队列的空闲存储空间足以存放目标任务的数据。
按上述方式调整第一环形队列的大小的作用在于,在直接内存访问的过程中,根据用户的各个目标任务对第一环形队列中存储资源的使用情况,动态调整第一环形队列的大小,既能够保证第一环形队列的存储资源能够满足多个目标任务的直接内存访问需求,又能够避免创建第一环形队列时第一环形队列占用了过多存储资源导致操作系统的存储资源不足。
S103,为每一目标任务分配对应的子环形队列,使目标任务基于分配的子环形队列进行直接内存访问。
为目标任务分配对应的子环形队列,可以理解为,将S102中确定的子环形队列中首端和尾端的指针传递给目标任务,由此,目标任务进行直接内存访问时,能够根据收到的指针,在指定的子环形队列中写入DMA描述符。
以图2为示例,主机在确定图2所示的子环形队列1至3后,可以将子环形队列1两端的指针传递给对应的目标任务1,将子环形队列2两端的指针传递给目标任务2,将子环形队列3两端的指针传递给目标任务3。
本实施例的有益效果在于:
一方面,通过在第一环形队列中划分出多个子环形队列的方式,在不增加环形队列数量的前提下满足多个目标任务的直接内存访问需求,解决了环形队列数量过多而导致直接内存访问的效率降低的问题。
另一方面,相关技术在有多个目标任务时,由于环形队列的数量首先,可能需要多个目标任务共用一个环形队列进行直接内存访问,导致DMA引擎需要区分不同目标任务的数据,增加直接内存访问流程的复杂度,降低访问效。相对的,本实施例将一个环形队列拆分为多个子环形队列,并为每一目标任务分配对应的子环形队列,从而解决了多个目标任务共用一个环形队列的问题,使得DMA引擎不需要区分不同目标任务的数据,达到提高直接内存访问的效率,降低访问延迟,提高访问带宽的效果。
进一步的,在相关技术中,为新增的目标任务增加队列需要经过添加队列和启用队列两个步骤,当目标任务结束而删减队列时,需要经过停止队列和删除队列两个步骤,队列的增减过程较为耗时,不利于提高直接内存访问效率。而按照本实施例的方法进行直接内存访问时,当需要新增子环形队列时,只需要将第一环形队列中相应的存储空间锁定,当目标任务结束而不需要对应的子环形队列时,只需要将该子环形队列对应的存储空间解锁,相比于相关技术,本实施例能够简化增减队列的过程,从而灵活高效地应对各个子环形队列的动态调整需求,更好地适应直接内存访问过程中各目标任务的传输数据量的变化。
在一些可选的实施例中,在分配子环形队列以后,主机还可以执行如下步骤,从而动态调整各个子环形队列的容量(大小):
根据目标任务的实际传输数据量,调整目标任务对应的子环形队列的容量。
例如,对某一目标任务,若发现该目标任务的实际传输数据量较大,可以适当增大其对应子环形队列的容量,以满足传输需求,若发现该目标任务的实际传输数据量较小,可以适当减小其对应子环形队列的容量,以避免浪费存储资源。
这里的实际传输数据量,可以理解为目标任务每次进行直接内存访问时,实际向其对应的子环形队列中写入的DMA描述符的数量。
可选的,主机动态调整子环形队列容量的方式,可以包括以下至少一者:
第一种方式,在目标任务的实际传输数据量小于对应的子环形队列的容量的情况下,将目标任务对应的子环形队列占用的部分存储空间释放至第一环形队列;
第二种方式,在目标任务的实际传输数据量大于对应的子环形队列的容量的情况下,将子环形队列相邻的另一子环形队列占用的存储空间并入目标任务对应的子环形队列。
在第一种方式中,主机可以检测目标任务每一次进行直接内存访问时写入到对应子环形队列的DMA描述符的数量,当发现写入的DMA描述符未能填满对应子环形队列的次数累计到一定阈值时,主机就可以确定目标任务的实际传输数据量小于对应的子环形队列的容量。
示例性的,某目标任务运行期间,主机发现该目标任务出现20次写入的DMA描述符未能写满对应子环形队列,超过阈值15,于是确定该目标任务的实际传输数据量小于对应的子环形队列的容量。
从子环形队列中释放多少存储空间,可以按照如下方式确定:
主机确定目标任务最近若干次直接内存访问中,每次写入对应子环形队列的数据量,进而获得这些数据量的统计值,例如最近若干次写入的数据量的平均值或者最大值,将该统计值和对应子环形队列当前的存储空间做差,基于得到的差值决定要从子环形队列释放多少存储空间。
可选的,主机可以按照如下方式将子环形队列的存储空间释放给第一环形队列:
在子环形队列的至少一端存在空闲存储空间的情况下,从存在空闲存储空间的一端开始将子环形队列占用的部分存储空间释放至第一环形队列。
存在空闲存储空间的一端,是指存在未被其他子环形队列占用的存储空间的一端。
以图2为示例,当需要释放子环形队列3的存储空间时,子环形队列3的一端是未被占用的初级子环队列,另一端是子环形队列2,因此可以从靠近初级子环队列的一端开始释放子环形队列3的存储空间。
从存在空闲存储空间的一端开始释放子环形队列的存储空间的好处在于,使得从子环形队列中释放出的空闲存储空间能够和原有的空闲存储空间连接起来,形成连续的空闲存储空间,避免出现难以利用的空闲存储空间碎片,起到减少第一环形队列的存储空间碎片,提高第一环形队列中存储空间的利用率的效果。
可选的,如果需要释放存储空间的子环形队列两端都没有空闲存储空间,可以从其任意一端开始释放存储空间,或者可以默认从子环形队列的两端中地址较高的一端开始释放存储空间。
本实施例中,将子环形队列的存储空间释放至第一环形队列,可以理解为,将需要释放的那部分存储空间解锁,也就是将原本被标记为被对应目标任务占用的存储空间,标记为未被目标任务占用。
可选的,为了避免释放存储空间时目标应用写入子环形队列的描述符被删除,释放某个目标任务的子环形队列的存储空间,可以在确定该目标任务结束了一次直接内存访问操作,对应的子环形队列中没有描述符的情况下才执行。
在第二种方式中,主机可以检测目标任务每一次进行直接内存访问时写满对应子环形队列的次数,如果写满子环形队列的次数累计到一定阈值,可以确定目标任务的实际传输数据量大于对应的子环形队列的容量。
判断过程可以参见第一种方式中确定目标任务的实际传输数据量小于对应的子环形队列的容量的过程,不再赘述。
在合并相邻子环形队列时,可以按照大环并小环的规则进行合并,也可以按照目标任务优先级的规则进行合并,还可以按照其他可能的规则进行合并,不做限定。
按照大环并小环的规则合并的方式可以是:
比对当前子环形队列的存储空间和相邻的另一子环形队列的存储空间的大小,如果前者大于后者,就可以将后者的存储空间合并到前者,相对的,如果前者小于后者,可以将前者的存储空间合并到后者。
当前子环形队列,是指确定目标任务的实际传输数据量大于对应容量的那个子环形队列。
按照目标任务优先级的规则合并的方式可以是:
比对当前子环形对应的目标任务和相邻的另一子环形队列对应的目标任务的优先级,如果前者高于后者,可以将后者的存储空间合并到前者,如果前者低于后者,可以将前者的存储空间合并到后者。
其中,不同目标任务的优先级可以由用户的配置决定。
可选的,在合并其他子环形队列的存储空间之间,可以先确定被合并的子环形队列中是否存有描述符,如果有,则等待其中的描述符被读出后再合并,并且,合并前可以先将被合并的子环形队列解锁,以使其中的存储空间处于可被当前子环形队列占用的状态。
其中,某个子环形队列被合并后,其对应的目标任务可能还未结束,这种情况下,在该目标任务需要进行直接内存访问时,主机可以按照步骤S102和S103的方式,重新为子环形队列被合并的这个目标任务分配一个新的子环形队列。
可选的,当确定某目标任务的子环形队列的实际传输数据量大于对应的子环形队列的容量时,如果该子环形队列的至少一端存在空闲存储空间,也可以直接将这些空闲存储空间并入该子环形队列,而不必合并其他子环形队列。
按上述方式调整子环形队列的大小的好处在于,在各个目标任务进行直接内存访问的过程中,根据各目标任务对应的子环形队列的使用情况,对每个子环形队列的长度进行自适应动态调整,这样能够降低确定子环形队列时配置的各子环形队列的初始大小的重要性,避免用户预先配置的初始大小不合理导致的存储资源闲置或者不足的问题,达到增强存储资源的复用程度,节约存储资源,提高第一环形队列中存储空间的利用率的效果,使得第一环形队列能够支持尽可能多的目标任务进行直接内存访问。
可选的,当任意一个目标任务结束后,主机可以执行如下步骤:
在目标任务结束的情况下,将目标任务对应的子环形队列的存储空间释放至第一环形队列。
确定目标任务结束的方式,可以是,检测目标任务结束时触发的特定事件,如果检测到对应的事件则确定目标任务结束。或者,当目标任务在一定时长内未向对应的子环形队列中写入描述符时,可以确定目标任务结束。
请参见图3,为按本实施例的方法进行直接内存访问时的流程图。
S301,创建第一环形队列。
例如,可以创建如图2所示的第一环形队列。
S302,接收目标任务。
如果未接收到目标任务,继续执行S302,如果接收到目标任务,执行步骤S303。
目标任务可以由用户对应的虚拟机或物理机提供。示例性的,步骤S302中主机可以获得目标任务1,目标任务2和目标任务3。
S303,创建目标任务对应数量和长度的子环形队列。
创建的方式可以参见前述实施例中步骤S102的相关说明。示例性的,在S303中,可以创建如图2所示的子环形队列1至3,分别对应目标任务1至3。
S304,判断第一环形队列资源是否足够。
如果第一环形队列资源足够,执行步骤S305,如果第一环形队列资源不足,返回执行步骤S301。
第一环形队列的资源是否足够,是指判断第一环形队列的空闲存储空间是否足以存放目标任务产生的描述符数据,如果足够则执行S305,如果不足够则通过S301创建新的环形队列,即第二环形队列。
S305,锁定子环形队列。
锁定子环形队列,可以是,将子环形队列占用的存储空间标记为被对应的目标任务占用的状态,以避免其他目标任务占用。
S306,接收直接内存访问描述符。
若收到直接内存访问(DirectMemory Access,DMA)描述符,执行步骤S307,若未收到DMA描述符,继续执行步骤S306。
DMA描述符,可以由用户对应的虚拟机或物理机中运行的目标任务根据当前要执行的直接内存访问操作而产生。DMA描述符表征需要目标任务需要执行的直接内存访问操作,以及需要操作的数据。
S307,用描述符填充子环形队列。
目标任务产生描述符后,可以将描述符写入到主机分配的子环形队列中。
S308,读取子环形队列。
如果读取成功,也就是从子环形队列中读出DMA描述符,执行步骤S309,如果读取失败,也就是未能从子环形队列中读出DMA描述符,继续执行步骤S308。
步骤S308可以由描述符引擎执行。
描述符引擎可以实时检测各个子环形队列是否被写入描述符,如果检测到某一子环形队列被写入描述符,则可以执行S308,从其中读出描述符。
S309,描述符引擎处理描述符。
在步骤S309中,描述符引擎可以将读出的描述符发给DMA引擎,使得DMA引擎根据描述符执行对应的操作,例如将描述符指定的数据写入到内存,或者从内存读出描述符指定的数据。
S310,判断是否完成直接内存访问。
如果完成直接内存访问,执行步骤S311,如果未完成直接内存访问,返回执行步骤S308。
判断的方式可以是,判断目标任务对应的子环形队列中是否还有未处理的描述符,如果有,说明本次直接内存访问还未完成,如果没有,说明本次直接内存访问结束。
S311,判断目标任务是否结束。
如果目标任务结束,执行步骤S312,如果目标任务未结束,返回执行步骤S306。
判断方式可以参见前述实施例,不再赘述。
S312,解锁子环形队列,释放占用的存储空间。
S313,判断子环形队列是否经常填满。
如果是,执行步骤S314,如果不是,继续执行步骤S313。
S314,扩展子环形队列。
步骤S313和S314,相当于前述实施例中按第二种方式调整子环形队列的存储空间。
S315,判断子环形队列实际用量是否经常小于阈值。
如果是,执行步骤S316,如果不是,继续执行步骤S315。
S316,拆分子环形队列。
步骤S315和S316,相当于前述实施例中按第一种方式调整子环形队列的存储空间。
本申请实施例还提供一种内存访问装置,请参见图4,为该装置的结构示意图,该装置可以包括主机401和现场可编程逻辑门阵列(FieldProgrammable Gate Array,FPGA)402。
主机具有至少一个用户;
主机根据权利要求1至9任意一项的内存访问方法,为用户的有直接内存访问需求的目标任务分配子环形队列;
现场可编程逻辑门阵列用于从目标任务对应的子环形队列中读取目标任务写入的直接内存访问描述符,并执行直接内存访问描述符对应的直接内存访问操作。
可选的,根据目标任务从用户的第一环形队列中确定子环形队列,包括:
根据目标任务的预期传输数据量,从用户的环形队列中确定目标任务对应的子环形队列。
可选的,还包括:
在第一环形队列的空闲存储空间不足以存放目标任务的数据的情况下,建立用户的第二环形队列,并根据目标任务从第二环形队列中确定目标任务对应的子环形队列。
可选的,还包括:
在占用第二环形队列的目标任务结束,或者第一环形队列的空闲存储空间足以存放目标任务的数据的情况下,释放第二环形队列占用的存储空间。
可选的,还包括:
释放第一环形队列占用的且不属于任一子环形队列的空闲存储空间。
可选的,还包括:
根据目标任务的实际传输数据量,调整目标任务对应的子环形队列的容量。
可选的,根据目标任务的实际传输数据量,调整目标任务对应的子环形队列的容量,包括以下至少一者:
在目标任务的实际传输数据量小于对应的子环形队列的容量的情况下,将目标任务对应的子环形队列占用的部分存储空间释放至第一环形队列;
在目标任务的实际传输数据量大于对应的子环形队列的容量的情况下,将子环形队列相邻的另一子环形队列占用的存储空间并入目标任务对应的子环形队列。
可选的,将目标任务对应的子环形队列占用的部分存储空间释放至第一环形队列,包括:
在子环形队列的至少一端存在空闲存储空间的情况下,从存在空闲存储空间的一端开始将子环形队列占用的部分存储空间释放至第一环形队列。
可选的,还包括:
在目标任务结束的情况下,将目标任务对应的子环形队列的存储空间释放至第一环形队列。
本实施例提供的内存访问装置,其工作原理和有益效果可以参见本申请实施例提供的内存访问方法,不再赘述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (10)

1.一种内存访问方法,包括:
获得用户的有直接内存访问需求的目标任务;
根据所述目标任务从所述用户的第一环形队列中确定所述目标任务对应的子环形队列,所述子环形队列由所述第一环形队列中连续的空闲存储空间组成;
为每一所述目标任务分配对应的所述子环形队列,使所述目标任务基于分配的所述子环形队列进行直接内存访问。
2.根据权利要求1所述的方法,所述根据所述目标任务从所述用户的第一环形队列中确定子环形队列,包括:
根据所述目标任务的预期传输数据量,从所述用户的环形队列中确定所述目标任务对应的子环形队列。
3.根据权利要求1所述的方法,还包括:
在所述第一环形队列的空闲存储空间不足以存放所述目标任务的数据的情况下,建立所述用户的第二环形队列,并根据所述目标任务从所述第二环形队列中确定所述目标任务对应的子环形队列。
4.根据权利要求3所述的方法,还包括:
在占用所述第二环形队列的所述目标任务结束,或者所述第一环形队列的空闲存储空间足以存放所述目标任务的数据的情况下,释放所述第二环形队列占用的存储空间。
5.根据权利要求1所述的方法,还包括:
释放所述第一环形队列占用的且不属于任一所述子环形队列的空闲存储空间。
6.根据权利要求1所述的方法,还包括:
根据所述目标任务的实际传输数据量,调整所述目标任务对应的所述子环形队列的容量。
7.根据权利要求6所述的方法,所述根据所述目标任务的实际传输数据量,调整所述目标任务对应的所述子环形队列的容量,包括以下至少一者:
在所述目标任务的实际传输数据量小于对应的所述子环形队列的容量的情况下,将所述目标任务对应的子环形队列占用的部分存储空间释放至所述第一环形队列;
在所述目标任务的实际传输数据量大于对应的所述子环形队列的容量的情况下,将所述子环形队列相邻的另一子环形队列占用的存储空间并入所述目标任务对应的子环形队列。
8.根据权利要求7所述的方法,所述将所述目标任务对应的子环形队列占用的部分存储空间释放至所述第一环形队列,包括:
在所述子环形队列的至少一端存在空闲存储空间的情况下,从存在空闲存储空间的一端开始将所述子环形队列占用的部分存储空间释放至所述第一环形队列。
9.根据权利要求1所述的方法,还包括:
在所述目标任务结束的情况下,将所述目标任务对应的子环形队列的存储空间释放至所述第一环形队列。
10.一种内存访问装置,包括主机和现场可编程逻辑门阵列;
所述主机具有至少一个用户;
所述主机根据权利要求1至9任意一项所述的内存访问方法,为所述用户的有直接内存访问需求的目标任务分配子环形队列;
所述现场可编程逻辑门阵列用于从所述目标任务对应的子环形队列中读取所述目标任务写入的直接内存访问描述符,并执行所述直接内存访问描述符对应的直接内存访问操作。
CN202311394016.0A 2023-10-25 2023-10-25 一种内存访问方法和装置 Pending CN117215798A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311394016.0A CN117215798A (zh) 2023-10-25 2023-10-25 一种内存访问方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311394016.0A CN117215798A (zh) 2023-10-25 2023-10-25 一种内存访问方法和装置

Publications (1)

Publication Number Publication Date
CN117215798A true CN117215798A (zh) 2023-12-12

Family

ID=89048352

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311394016.0A Pending CN117215798A (zh) 2023-10-25 2023-10-25 一种内存访问方法和装置

Country Status (1)

Country Link
CN (1) CN117215798A (zh)

Similar Documents

Publication Publication Date Title
US10534542B2 (en) Dynamic core allocation for consistent performance in a non-preemptive scheduling environment
US10185592B2 (en) Network storage device using dynamic weights based on resource utilization
US20190319895A1 (en) Resource Scheduling Method And Apparatus
US8190795B2 (en) Memory buffer allocation device and computer readable medium having stored thereon memory buffer allocation program
JP5510556B2 (ja) 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム
US8429666B2 (en) Computing platform with resource constraint negotiation
US6125396A (en) Method and apparatus for implementing bandwidth allocation with a reserve feature
CN110647394A (zh) 一种资源分配方法、装置及设备
WO2022095815A1 (zh) 显存管理方法、装置、设备及系统
CN111309644B (zh) 一种内存分配方法、装置和计算机可读存储介质
CN106878389B (zh) 用于在云系统中进行资源调度的方法和装置
CN111857992B (zh) 一种Radosgw模块中线程资源分配方法和装置
CN109150759B (zh) 一种渐进式非阻塞机会资源预留方法及系统
CN109298949B (zh) 一种分布式文件系统的资源调度系统
US6754658B1 (en) Database server processing system, method, program and program storage device
CN117215798A (zh) 一种内存访问方法和装置
CN111813564B (zh) 集群资源管理方法、装置及容器集群管理系统
US8918555B1 (en) Adaptive and prioritized replication scheduling in storage clusters
CN116450328A (zh) 内存分配方法、装置、计算机设备和存储介质
CN115878309A (zh) 资源分配方法、装置、处理核、设备和计算机可读介质
JP2924725B2 (ja) バッファ割り当て制御システム
CN116483740B (zh) 内存数据的迁移方法、装置、存储介质及电子装置
CN117519953B (zh) 一种面向服务器无感知计算的分离式内存管理方法
CN115168057B (zh) 基于k8s集群的资源调度方法及装置
CN114465958B (zh) 一种输入输出的控制方法、装置及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination