CN116860335B - 一种直接内存访问驱动系统实现流水化操作的方法 - Google Patents

一种直接内存访问驱动系统实现流水化操作的方法 Download PDF

Info

Publication number
CN116860335B
CN116860335B CN202311119284.1A CN202311119284A CN116860335B CN 116860335 B CN116860335 B CN 116860335B CN 202311119284 A CN202311119284 A CN 202311119284A CN 116860335 B CN116860335 B CN 116860335B
Authority
CN
China
Prior art keywords
dma
target data
mark
data buffer
task
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.)
Active
Application number
CN202311119284.1A
Other languages
English (en)
Other versions
CN116860335A (zh
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.)
Beijing Dayu Zhixin Technology Co ltd
Original Assignee
Beijing Dayu Zhixin Technology Co 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 Beijing Dayu Zhixin Technology Co ltd filed Critical Beijing Dayu Zhixin Technology Co ltd
Priority to CN202311119284.1A priority Critical patent/CN116860335B/zh
Publication of CN116860335A publication Critical patent/CN116860335A/zh
Application granted granted Critical
Publication of CN116860335B publication Critical patent/CN116860335B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提供一种直接内存访问驱动系统实现流水化操作的方法,包括:于需要传送的每一段数据末尾指定预定长度的数据作为末尾标志;通过每个DMA任务描述符获取主机数据缓存区的信息;根据每个主机数据缓存区信息的信息长度,分别初始化本地对应的目标数据缓存区末尾对应所述标志的长度;批量地处理DMA任务;根据每个DMA任务的顺序,检查对应的目标数据缓存区的末尾标志,如与末尾标志一致则判断,当前目标数据缓存区对应的DMA任务已经完成,如不一致则反复读取末尾标志,直至一致则判断当前目标数据缓存区对应的DMA任务已经完成。本发明提供了实现流水线化的操作方法。

Description

一种直接内存访问驱动系统实现流水化操作的方法
技术领域
本发明属于电子技术领域,尤其涉及一种直接内存访问驱动系统实现流水化操作的方法。
背景技术
DMA(直接内存访问)是一种数据传输方式,它允许计算机的内存直接与硬件设备进行数据交换,而不需要CPU的干预。在这个过程中,DMA驱动系统与DMA engine(DMA引擎)互相交互,完成数据传输操作。
操作流水线化,是指可以将任务分成多个阶段进行并行处理,以节省大量时间。在执行流水线时,需要将任务分为多个阶段,每个阶段对应一个特定的任务,并且每个任务都按照相同的顺序执行。
DMA(直接内存访问)驱动系统在批量完成数据传输操作时,会遇到完成确认不及时或不能保序的困难,而难以实现流水化操作。因此,本领域目前缺乏一种实现流水线化的操作方法及其系统。
基于以上,本申请提供了解决以上技术问题的技术方案。
发明内容
针对现有技术中直接内存访问操作完成确认不及时以及不能保序的问题,现提供一种直接内存访问驱动系统流水线化的方法,应用于一PCIe设备通过DMA读操作将主机数据缓存区中的数据读取至所述PCIe设备的本地缓存,具体技术方案包括:
于需要传送的每一段数据末尾均指定一预定长度的标志;
通过每个DMA任务描述符获取主机数据缓存区的信息;
根据每个所述主机数据缓存区的信息的长度,分别初始化本地对应的目标数据缓存区末尾对应所述标志的长度;
批量地处理所述DMA任务;
根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置,如当前的所述标志的储存位置中的内容与所述标志一致,则判断当前所述目标数据缓存区对应的DMA任务已经完成;如不一致则反复读取所述标志的储存位置,直至所述标志的储存位置中的内容与所述标志一致,则判断当前所述目标数据缓存区对应的DMA任务已经完成。
在本发明的一个具体实施方式中,所述预定长度为1字节、2字节、4字节、6字节、8字节、10字节、12字节或16字节。
在本发明的一个具体实施方式中,还包括,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列。
在本发明的一个具体实施方式中,所述主机数据缓存区的信息包括:主机数据缓存区的物理地址,需要读取的数据长度以及所述标志的内容。
在本发明的一个具体实施方式中,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列包括:
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序首尾相连的形成队列排列在本地数据缓存中,并于所述队列末尾增加表示队列尾部的标识。
在本发明的一个具体实施方式中,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列包括:
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序以链表的形式排列在本地数据缓存中,并使所述链表头尾相连。
在本发明的一个具体实施方式中,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列包括:
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序映射至一地址列表中。
在本发明的一个具体实施方式中,根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置,包括:
步骤S1,提供一指针指向对应DMA任务队列中的第一个任务的所述目标数据缓存区作为当前目标数据缓存区,通过所述指针读取所述当前目标数据缓存区的末尾的所述标志的储存区;
步骤S2,判断所述当前目标数据缓存区的末尾的所述标志的储存区储存的内容与所述标志是否一致;
步骤S3,如不一致则返回所述步骤S2;
步骤S4,判断所述当前目标数据缓存区对应的DMA任务已经完成;
步骤S5,判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务,如是,则判断DMA任务队列中的所有任务均已完成,并退出;
步骤S6,使指针指向顺序下一个目标数据缓存区作为所述当前目标数据缓存区,并返回步骤S2。
在本发明的一个具体实施方式中,所述步骤S5中判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务,包括:判断所述当前目标数据缓存区是否为最后一个所述目标数据缓存区,如是,则判断所述当前目标数据缓存区对应所述DMA任务队列中的最后一个任务。
在本发明的一个具体实施方式中,批量处理所述DMA任务与根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置同步进行。
本发明能够带来以下至少一种有益效果:
1、读操作完成确认及时。特别是,在具体实施方式中通过轮询数据校验,可以第一时间确认目标缓存对应的读操作是否完成,能及时处理数据,提升性能。
2、读操作完成确认能保序。特别是,在具体实施方式中,轮询数据校验都是从环形队列head指向的目标缓存区开始,可以保证后面能顺序进行数据处理。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对上述特性、技术特征、优点及其实现方式予以进一步说明。
图1为现有的DMA读数据流程示意图;
图2为本发明的一种直接内存访问驱动系统流水线化的方法的一个具体实施方式;
图3为本发明的一种直接内存访问驱动系统流水线化的方法的一个具体实施方式;
图4为本发明的一种直接内存访问驱动系统流水线化的方法的一个示例性的具体实施例。
具体实施方式
以下对本发明的各个方面进行进一步详述。
除非另有定义或说明,本文中所使用的所有专业与科学用语与本领域技术熟练人员所熟悉的意义相同。此外任何与所记载内容相似或均等的方法及材料皆可应用于本发明方法中。
除非另有明确的规定和限定,本发明中所述的“或”,包含了“和”的关系。所述“和”相当于布尔逻辑运算符“AND”,所述“或”相当于布尔逻辑运算符“OR”,而“AND”是“OR”的子集。
可以理解到,尽管术语“第一”、“第二”等等可以在此用来说明不同的元件,但是这些元件不应被这些术语限制。这些术语仅仅用来将一个元件与另一个元件区分开。因此,第一元件可以被称为第二元件,而不背离发明构思的教导。
本发明中,术语“含有”、“包含”或“包括”表示各种成分可一起应用于本发明的混合物或组合物中。因此,术语“主要由 ...组成”包含在术语“含有”、“包含”或“包括”中。
除非另有明确的规定和限定,本发明的术语“相连”、“连通”、“连接”应作广义理解,例如,可以是固定连接,也可以是通过中介媒介间相连,可以是两个元件内部的连通或者两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
例如,如果一个元件(或部件)被称为在另一个元件上、与另一个元件耦合或者与另一个元件连接,那么所述一个元件可以直接地在所述另一个元件上形成、与之耦合或者与之连接,或者在它们之间可以有一个或多个介于中间的元件。相反,如果在此使用表述“直接在......上”、“直接与......耦合”和“直接与......连接”,那么表示没有介于中间的元件。用来说明元件之间的关系的其他词语应该被类似地解释,例如“在......之间”和“直接在......之间”、“附着”和“直接附着”、“相邻”和“直接相邻”等等。
另外需要说明的是,下面描述中使用的词语“前”、“后”、“左”、“右”、“上”和“下”指的是附图中的方向。使用的词语“内”和“外”分别指的是朝向或远离特定部件几何中心的方向。可以理解到,在此,这些术语用来描述如在附图中所示的一个元件、层或区域相对于另一个元件、层或区域的关系。除了在附图中描述的取向之外,这些术语应该也包含装置的其他取向。
本发明的其它方面由于本文的公开内容,对本领域的技术人员而言是显而易见的。
实施例
目前的DMA计算机读取操作中,以下是几种常见的导致新问题的场景,以及为解决新问题而采用的对应解决措施的处理方案:
场景一:现有技术确认DMA读操作完成的优缺点
DMA读操作的主要困难是需要确保数据传输的正确性和完整性。DMA控制器需要确保数据能够正确地传输到内存中,并且能够处理数据检错和纠错等操作,以确保数据的正确性。此外,在DMA传输过程中,CPU通常不需要干预,因此DMA控制器需要独立完成数据传输的操作,这也是DMA读操作的困难之一。
为了确保数据传输的正确性和完整性,需要确定DMA读操作已经完成。确定DMA读操作完成的方法包括但不限于以下几种:
使用DMA传输完成中断:该方法的优点是可以及时通知CPU数据已经准备好,缺点是需要在CPU上增加额外的中断处理开销。
查询DMA状态:该方法的优点是不需要额外的中断处理开销,缺点是需要在程序中不断地查询DMA状态,占用CPU时间。
使用DMA数据流使能状态:该方法的优点是可以避免频繁查询DMA状态,缺点是需要额外的硬件支持,并且需要确保数据流使能状态的正确性。
综上所述,确定DMA读操作是否已经完成时,需要根据具体情况选择不同的方法,并权衡各自的优缺点。
场景二:采用查询任务结构体的方式确认DMA读操作完成
如图1所示,通过DMA从主机读到主机数据缓存区物理地址,数据长度,然后再根据主机缓存区物理地址发起DMA读操作,此时,如果DMA完成从主机内存拷贝数据到本地内存的操作后,会将完成的任务结构体放到DMA完成队列中,如果能从DMA队列中取出完成的任务结构体,则可以确定DMA读操作完成。
但是这种技术方案仍然存在以下缺点:
缺点一:读操作完成确认不及时。
队列前面的读操作完成确认不及时可能是由多种原因引起的,例如硬件限制、软件错误、数据传输速率问题、并发访问冲突需要根据具体情况进行分析和解决。
而发明人对大量数据传输场景(特别是批量处理的数据传输场景)分析后认为,在大量数据传输场景下,DMA驱动会采取批量操作,DMA一次enqueue操作会处理多个描述符,即一次enqueue多个任务结构体,对于每个描述符,它会发送读请求,然后DMA将请求的缓存区的数据拷贝到目标缓存区中,只有当此次操作的全部描述符都处理完,才会一起放到DMA完成队列中。因此这个原因会造成队列前面的读操作完成确认不及时,会有一些性能损耗。
缺点二:读操作完成确认不能保序。
队列前面的读操作完成确认不保序的通常原因主要是为了保证并发性能。在某些情况下,前面的读操作可能会因为竞争条件或其他原因而被延迟,如果此时等待前面的读操作完成确认才进行后续操作,将会降低系统的并发性能和响应时间。可以采用不保序的方式,即后续的读操作可以不等前面的操作完成确认就进行。这样可以将读操作的响应时间最小化,提高系统的并发性能。当然,这种做法也会带来一定的风险,即前面的读操作可能会与后续操作产生竞争条件或数据不一致等问题,需要采取适当的并发控制机制来避免。
而发明人对大量数据传输场景分析(特别是批量处理的数据传输场景)后认为,现有技术方案在大量数据传输场景下,DMA驱动会短时间内多次进行DMA enqueue操作,由于访问的是外部设备即主机内存,需要通过PCIe总线发送请求,PCIe总线上数据传输并不能保证顺序,因此这些分多次进入DMA请求队列的描述符,并不能保证按顺序放到DMA完成队列,DMA驱动从完成队列取出的job也不能保证enqueue时顺序,在后面处理需要考虑乱序处理。
本发明的技术构思
本发明中,发明人经过了广泛和深入的研究,发现不通过DMA 完成队列出队方式来确认读操作已完成,而是通过数据校验成功来确认,可以解决上述确认不及时和确认不能保序的问题。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本申请的基本构想,图式中仅显示与本申请中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。例如,在附图中的元件的厚度可以为了清楚性起见而被夸张。
如图1所示为现有的DMA读数据流程示意图。
可以看到,通过DMA从主机读到主机数据缓存区物理地址,数据长度,然后再根据主机缓存区物理地址发起DMA读操作。如果DMA完成从主机内存拷贝数据到本地内存的操作后,会将完成的任务结构体放到“DMA完成队列”中,如果能从DMA队列中取出完成的任务结构体,则可以确定DMA读操作完成。
图1中,enqueue和dequeue都是本领域的常规计算机术语,它们分别表示队列的两种操作,即入队和出队。通常,enqueue用于将元素添加到队列中,dequeue用于从队列中移除元素。
其中,enqueue是指将一个元素添加到队列的末尾,也就是在队列的尾部插入一个元素。通常使用enqueue函数来实现这个操作。enqueue函数的主要作用是将一个元素添加到队列中。
其中,dequeue是指从队列的头部删除一个元素并返回它,也就是从队列的头部移除一个元素。通常使用dequeue函数来实现这个操作。dequeue函数的主要作用是从队列中移除一个元素。
图1中,所述“DMA enqueue data job”不是一种具体的编程语言或代码,而是一种描述数据传输过程的术语。描述的是将数据放入DMA队列中的过程,以便DMA驱动系统可以稍后处理。
所述的“DMA完成队列”(DMA Completion Queue)通常由以下部分组成:
队列头:队列头是DMA完成队列的第一个元素,它包含队列的类型、状态和其他相关信息。
队列元素:每个DMA完成事件对应一个队列元素,它包含DMA操作的描述符信息(如起始地址、传输字节数等)、DMA操作的状态(如成功、失败等)以及其他相关信息。
队列尾:队列尾是DMA完成队列的最后一个元素,它指向下一个空闲的队列元素。
如本文所用,在使用DMA完成队列时,DMA驱动将DMA操作完成事件记录在队列元素中,并通过中断通知CPU。CPU在响应中断后,可以从DMA完成队列中获取这些事件并进行相应的处理,例如重新发送DMA操作请求或进行错误处理等。
但是如图1所述的技术方案至少存在如下的两个缺点:
缺点一:读操作完成确认不及时。现有技术方案的在大量数据传输场景下,DMA驱动会采取批量操作,DMA一次enqueue操作会处理多个描述符,即一次enqueue多个任务结构体,对于每个描述符,它会发送读请求,然后DMA将请求的缓存区的数据拷贝到目标缓存区中,只有当此次操作的全部描述符都处理完,才会一起放到DMA完成队列中。这样会造成队列前面的读操作完成确认不及时,会有一些性能损耗。
缺点二:读操作完成确认不能保序。现有技术方案在大量数据传输场景下,DMA驱动会短时间内多次进行DMA enqueue操作,由于访问的是外部设备即主机内存,需要通过PCIe总线发送请求,PCIe总线上数据传输并不能保证顺序,因此这些分多次进入DMA请求队列的描述符,并不能保证按顺序放到DMA完成队列,DMA驱动从完成队列取出的job也不能保证enqueue时顺序,在后面处理需要考虑乱序处理。
具体涉及PCIe设备时,其具有更高的宽带传输速度和更好的兼容性;而且PCIe设备需要通过PCIe总线发送请求,PCIe总线上数据传输并不能保证顺序。因此,当运用到PCIe设备通过DMA读操作将主机数据缓存区中的数据读取至所述PCIe设备的本地缓存这个应用场景时,这两个缺点更是被放大,以至于DMA驱动程序无法进行流水化的操作。
如图2所示针对现有技术中直接内存访问操作完成确认不及时以及不能保序的问题,现提供一种直接内存访问驱动系统流水线化的方法,应用于一PCIe设备通过DMA读操作将主机数据缓存区中的数据读取至所述PCIe设备的本地缓存,具体技术方案包括:
于需要传送的每一段数据末尾均指定一预定长度的标志;
通过每个DMA任务描述符获取主机数据缓存区的信息;
根据每个所述主机数据缓存区的信息的长度,分别初始化本地对应的目标数据缓存区末尾对应所述标志的长度;
批量地处理所述DMA任务;
根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置,如当前的所述标志的储存位置中的内容与所述标志一致则判断,当前所述目标数据缓存区对应的DMA任务已经完成,如不一致则反复读取所述标志的储存位置,直至所述标志的储存位置中的内容与所述标志一致则判断当前所述目标数据缓存区对应的DMA任务已经完成。
如本文所用,DMA读数据是数据传输的方式之一。DMA(直接内存读取)是一种外设传输数据的方式,它通常用于高速数据传输的应用程序中。在DMA读取数据时,数据从内存直接传输到设备,而不需要通过CPU进行中转。这种方式可以极大地提高数据传输速度,因为它减少了CPU的干预和负载。
在本发明的一个具体实施方式中,所述预定长度为1字节、2字节、4字节、6字节、8字节、10字节、12字节或16字节。以上所述仅是本发明的示例性的实施方式,只要不对本发明的发明目的产生限制任何形式的增加或删减都应当被包含在本发明的主旨内。
本发明优选的预定长度为8个字节。
在本发明的一个具体实施方式中,还包括,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列。
在本发明的一个具体实施方式中,所述主机数据缓存区的信息包括:主机数据缓存区的物理地址,需要读取的数据长度以及标志的内容。
在本发明的一个具体实施方式中,使每个包含所述标志的储存位置的目标数据缓存区按照DMA任务的顺序排列包括:将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序首尾相连的形成队列排列在本地数据缓存中,并于所述队列末尾增加表示队列尾部的标识。
在本发明的一个具体实施方式中,使每个包含所述标志的储存位置的目标数据缓存区按照所述DMA任务的顺序排列包括:将包含所述标志的储存位置的目标数据缓存区按照DMA任务的顺序以链表的形式排列在本地数据缓存中,并使所述链表头尾相连。
更优选的,发明人采用Enqueue进行批量处理结合所述首尾相连的形成队列排列。
如图3所示,示出了直接内存访问驱动系统流水线化的方法的另一个具体实施方式。
在该具体实施方式中,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列包括:
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序映射至一地址列表中。
在本发明的一个具体实施方式中,根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置的方法包括:
步骤S1,提供一指针指向对应DMA任务队列中的第一个任务的所述目标数据缓存区作为当前目标数据缓存区,通过所述指针读取所述当前目标数据缓存区的末尾的所述标志的储存区;
步骤S2,判断所述当前目标数据缓存区的末尾的所述标志的储存区储存的内容与所述标志是否一致;
步骤S3,如不一致则返回所述步骤S2;
步骤S4,判断所述当前目标数据缓存区对应的DMA任务已经完成;
步骤S5,判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务,如是则判断DMA任务队列中的所有任务均已完成,并退出;
步骤S6,使指针指向顺序下一个目标数据缓存区作为所述当前目标数据缓存区,并返回步骤S2。
优选的,所述步骤S5中判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务的方法包括,判断所述当前目标数据缓存区是否为最后一个所述目标数据缓存区,如是则判断所述当前目标数据缓存区对应所述DMA任务队列中的最后一个任务。
优选的,批量处理所述DMA任务与根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置同步进行。
应当理解,上述记载的仅为示例,只要不对本发明的发明目的产生限制任何形式的增加或删减都应当被包含在本发明的主旨内。
为了更有助于理解,提供本发明的一种直接内存访问驱动系统流水线化的方法的一个示例性的具体实施例,具体请参见图4。应当理解,所述具体实施例仅为有助于理解而进行的示例性展示,而不对本发明的范围构成限制。
如图4所示,其与图1的现有技术的不同之处在于:
首先通过DMA批量获取到将要读取的主机缓存区物理地址,数据长度,还有数据校验标志,换言之,与原有技术相比,新增了数据校验标志用来与本地目标缓存区数据做校验。然后根据要读取的数据长度初始化本地目标缓存区的最后8字节数据。然后将数据读操作的请求任务批量放入DMA请求队列中。
如前所述,所述预定字节可以为1字节、2字节、4字节、6字节、8字节、10字节、12字节或16字节。只要不对本发明的发明目的产生限制任何形式的增加或删减都应当被包含在本发明的主旨内。
具体的,根据需要读取的数据长度初始化本地目标缓存区的最后预定字节的数据时,可以采用的具体方式为根据数据校验标志取反赋值。
下一步则是要通过取出本地目标地址缓存区最后8字节数据与数据校验标志比较,相等则表明该目标地址的读操作完成,进行下一个目标地址数据校验,不相等则循环检查。
此方法可以第一时间确认目标缓存对应的读操作是否完成。同时每次轮询都是从环形队列的head位置指向的目标缓存开始校验的,如果校验不成功,还会继续校验这个目标缓存的数据,即使后面的目标缓存对应的DMA读操作先完成了,也不会先读,这样即使DMA完成队列是乱序的,也不会影响DMA驱动顺序处理数据。
与原有技术相比,该步骤解决读操作完成确认不及时和不能保序两个缺点,与现有技术相比,不需要通过从DMA完成队列取到job来确认读操作完成。
具体而言,现有技术的第一个缺点,也即“读操作完成确认不及时”是这样解决的:现有技术方案的在大量数据传输场景下,DMA驱动会采取批量操作,DMA一次enqueue操作会处理多个描述符,即一次enqueue多个任务结构体,对于每个描述符,它会发送读请求,然后DMA将请求的缓存区的数据拷贝到目标缓存区中,只有当此次操作的全部描述符都处理完,才会一起放到DMA完成队列中。这样会造成队列前面的读操作完成确认不及时,会有一些性能损耗。该缺点可以通过本发明的轮询读取判断目标缓存区尾部字节与期望的数据尾部字节相等来确认读操作完成解决。
具体而言,现有技术的第二个缺点,也即“读操作完成确认不能保序”是这样解决的:现有技术方案在大量数据传输场景下,DMA驱动会短时间内多次进行DMA enqueue操作,由于访问的是外部设备即主机内存,需要通过PCIe总线发送请求,PCIe总线上数据传输并不能保证顺序,因此这些分多次进入DMA请求队列的描述符,并不能保证按顺序放到DMA完成队列,DMA驱动从完成队列取出的job也不能保证enqueue时顺序,在后面处理需要考虑乱序处理。该缺点可以通过本发明轮询的开始位置来解决,本发明的轮询在确认读数据完成流程中,都是从环形队列的head开始,如果head位置记录的主机缓存区数据DMA未读完,不会继续读下一个,下次轮询还是从head位置开始,因此可以保证处理顺序。
如本文所用,在DMA操作完成后,DMA控制器将向完成队列中添加一个元素,该元素可以包含有关DMA操作完成的信息,如传输的字节数、传输的方向等。DMA驱动程序负责管理这个完成队列,以便设备驱动程序可以及时地获取DMA操作的状态和结果。如果没有DMA驱动程序,设备驱动程序将无法及时地获取DMA操作的状态和结果,从而无法有效地管理DMA硬件设备。
基于本申请,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目和方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
在本发明提及的所有文献都在本申请中引用作为参考,就如同每一篇文献被单独引用作为参考那样。此外应理解,在阅读了本发明的上述内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。

Claims (5)

1.一种直接内存访问驱动系统实现流水化操作的方法,其特征在于,应用于一PCIe设备通过DMA读操作将主机数据缓存区中的数据读取至所述PCIe设备的本地缓存,包括:
于需要传送的每一段数据末尾均指定一预定长度的标志;
通过每个DMA任务描述符获取主机数据缓存区的信息;
根据每个所述主机数据缓存区的信息的长度,分别初始化本地对应的目标数据缓存区末尾对应所述标志的长度;
批量地处理所述DMA任务;
使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列;
其中,使每个包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序排列包括:
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序首尾相连的形成队列排列在本地数据缓存中,并于所述队列末尾增加表示队列尾部的标识;和/或
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序以链表的形式排列在本地数据缓存中,并使所述链表头尾相连;和/或
将包含所述标志的储存位置的所述目标数据缓存区按照所述DMA任务的顺序映射至一地址列表中;
根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置,如当前的所述标志的储存位置中的内容与所述标志一致,则判断当前所述目标数据缓存区对应的DMA任务已经完成;如不一致则反复读取所述标志的储存位置,直至所述标志的储存位置中的内容与所述标志一致,则判断当前所述目标数据缓存区对应的DMA任务已经完成;
其中,所述根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置,包括:
步骤S1,提供一指针指向对应DMA任务队列中的第一个任务的所述目标数据缓存区作为当前目标数据缓存区,通过所述指针读取所述当前目标数据缓存区的末尾的所述标志的储存区;
步骤S2,判断所述当前目标数据缓存区的末尾的所述标志的储存区储存的内容与所述标志是否一致;
步骤S3,如不一致则返回所述步骤S2;
步骤S4,判断所述当前目标数据缓存区对应的DMA任务已经完成;
步骤S5,判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务,如是,则判断DMA任务队列中的所有任务均已完成,并退出;
步骤S6,使指针指向顺序下一个目标数据缓存区作为所述当前目标数据缓存区,并返回步骤S2。
2.如权利要求1所述的直接内存访问驱动系统实现流水化操作的方法,其特征在于,所述预定长度为1字节、2字节、4字节、6字节、8字节、10字节、12字节或16字节。
3.如权利要求1所述的直接内存访问驱动系统实现流水化操作的方法,其特征在于,
所述主机数据缓存区的信息包括:主机数据缓存区的物理地址,需要读取的数据长度,以及所述标志的内容。
4.如权利要求1所述的直接内存访问驱动系统实现流水化操作的方法,其特征在于,所述步骤S5中判断所述当前目标数据缓存区是否对应所述DMA任务队列中的最后一个任务,包括:判断所述当前目标数据缓存区是否为最后一个所述目标数据缓存区,如是,则判断所述当前目标数据缓存区对应所述DMA任务队列中的最后一个任务。
5.如权利要求1所述的直接内存访问驱动系统实现流水化操作的方法,其特征在于,批量处理所述DMA任务与根据每个所述DMA任务的顺序,检查对应的所述目标数据缓存区末尾的所述标志的储存位置同步进行。
CN202311119284.1A 2023-09-01 2023-09-01 一种直接内存访问驱动系统实现流水化操作的方法 Active CN116860335B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311119284.1A CN116860335B (zh) 2023-09-01 2023-09-01 一种直接内存访问驱动系统实现流水化操作的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311119284.1A CN116860335B (zh) 2023-09-01 2023-09-01 一种直接内存访问驱动系统实现流水化操作的方法

Publications (2)

Publication Number Publication Date
CN116860335A CN116860335A (zh) 2023-10-10
CN116860335B true CN116860335B (zh) 2023-11-17

Family

ID=88232672

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311119284.1A Active CN116860335B (zh) 2023-09-01 2023-09-01 一种直接内存访问驱动系统实现流水化操作的方法

Country Status (1)

Country Link
CN (1) CN116860335B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567256A (zh) * 2011-12-16 2012-07-11 龙芯中科技术有限公司 处理器系统及其多通道内存拷贝dma加速器和方法
CN110633233A (zh) * 2019-06-28 2019-12-31 中国船舶重工集团公司第七0七研究所 一种基于流水线的dma数据传输处理方法
US10552349B1 (en) * 2018-05-31 2020-02-04 Lightbits Labs Ltd. System and method for dynamic pipelining of direct memory access (DMA) transactions
CN111221757A (zh) * 2019-12-31 2020-06-02 杭州熠芯科技有限公司 一种低延迟pcie dma数据传输方法及控制器
WO2023071125A1 (zh) * 2021-10-27 2023-05-04 苏州浪潮智能科技有限公司 一种处理dma的方法、装置、及计算机可读存储介质
CN116233036A (zh) * 2023-03-14 2023-06-06 上海耀芯电子科技有限公司 一种dma传输控制方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567256A (zh) * 2011-12-16 2012-07-11 龙芯中科技术有限公司 处理器系统及其多通道内存拷贝dma加速器和方法
US10552349B1 (en) * 2018-05-31 2020-02-04 Lightbits Labs Ltd. System and method for dynamic pipelining of direct memory access (DMA) transactions
CN110633233A (zh) * 2019-06-28 2019-12-31 中国船舶重工集团公司第七0七研究所 一种基于流水线的dma数据传输处理方法
CN111221757A (zh) * 2019-12-31 2020-06-02 杭州熠芯科技有限公司 一种低延迟pcie dma数据传输方法及控制器
WO2023071125A1 (zh) * 2021-10-27 2023-05-04 苏州浪潮智能科技有限公司 一种处理dma的方法、装置、及计算机可读存储介质
CN116233036A (zh) * 2023-03-14 2023-06-06 上海耀芯电子科技有限公司 一种dma传输控制方法及装置

Also Published As

Publication number Publication date
CN116860335A (zh) 2023-10-10

Similar Documents

Publication Publication Date Title
US6874054B2 (en) Direct memory access controller system with message-based programming
US10331595B2 (en) Collaborative hardware interaction by multiple entities using a shared queue
US8683126B2 (en) Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US20160378709A1 (en) Enforcing transaction order in peer-to-peer interactions
US7234004B2 (en) Method, apparatus and program product for low latency I/O adapter queuing in a computer system
EP2442227A1 (en) Two-level interrupt service routine
US20190034381A1 (en) Network data transactions using posted and non-posted operations
US20040186931A1 (en) Transferring data using direct memory access
CN112106032B (zh) I/o主设备和cpu之间优化数据共享的有序写存储的高性能流
JPH05216835A (ja) 割込み再試行低減装置
US20200250112A1 (en) Handling an input/output store instruction
US11579874B2 (en) Handling an input/output store instruction
CN112416250A (zh) 基于NVMe的固态硬盘的命令处理方法及相关设备
CN113342721A (zh) 存储控制器dma设计方法
US7844752B2 (en) Method, apparatus and program storage device for enabling multiple asynchronous direct memory access task executions
US7334056B2 (en) Scalable architecture for context execution
CN116860335B (zh) 一种直接内存访问驱动系统实现流水化操作的方法
CN118051184A (zh) 一种任务管理方法、装置、设备及存储介质
JPS623361A (ja) ステ−タス通報方式
TWI763145B (zh) 訊息交換系統與方法
US10423546B2 (en) Configurable ordering controller for coupling transactions
US9110856B2 (en) Interface control apparatus, data storage apparatus and method for interface control
US6968409B1 (en) Method and apparatus of establishing a dynamically adjustable loop of delayed read commands for completion in a queue buffer
US9092581B2 (en) Virtualized communication sockets for multi-flow access to message channel infrastructure within CPU
EP3660675A1 (en) Sharing data by a virtual machine

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
GR01 Patent grant
GR01 Patent grant