System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及dma数据传输技术,尤其涉及一种提高dma传输效率的方法、装置及介质。
技术介绍
1、直接存储器访问(direct memory access,dma)是fpga与cpu之间进行数据传输的常用方式,是指数据传输时不需要cpu的介入,由io设备(如fpga)和存储器之间直接进行大量数据交换的传输方法。通常情况下,由fpga板卡和计算机硬件以及运行于计算机系统的内核驱动、应用软件组成。
2、链式dma传输为fpga提供描述符,每个描述符为链的一个节点,每个描述符节点指向一块连续的物理内存。计算机应用软件通过一次read/write触发一次链式dma传输,或者说是启动一次中断io操作。传输数据量的多少取决于两个变量,一个是描述符的多少,另一个是物理内存块的大小;数据传输量等于描述符数量乘以物理内存块大小。
3、受制于fpga资源的影响,描述符是有限的,通常为1024个;同时linux装置用户态开辟的虚拟内存需要拆分为物理内存连续的4kb内存块,然后再将每个4kb内存块与描述符进行关联。因此通常情况下,会开辟最大4mb的内存用以进行dma的数据传输。其缺点显而易见,在cpu主频较低而需要进行高速数据传输时,会耗费大量的cpu资源。例如,进行4gb/s速率的传输,需要进行至少1024次的io读取和1024次中断。
4、现有技术的瓶颈在于linux规范下无法开辟大块的连续内存,虽然有相关方案通过调用alloc_chrdev_region,使用mkdev宏初始化设备等一系列复杂的编程在内核使用
5、受制于国产操作装置,其内核所分配保留的物理连续内存是有限的,占总内存的比例极低,因此现有技术无法为dma绑定大量的连续物理内存,导致dma传输效率不高。
技术实现思路
1、本专利技术要解决的技术问题就在于:针对现有技术存在的技术问题,本专利技术提供一种提高dma传输效率的方法、装置及介质,通过将物理上连续的连续内存块与描述符进行关联,有效提高高速数据传输时的dma传输效率。
2、为解决上述技术问题,本专利技术提出的技术方案为:
3、一种提高dma传输效率的方法,包括以下步骤:
4、s1)开辟虚拟内存,创建与所述虚拟内存中每个内存块对应的链表;
5、s2)在所述链表中筛选目标长度的链条,获取被筛选的链条对应的连续内存块;
6、s3)连接每一段连续内存块并作为dma的传输内存;
7、s4)使用dma的传输内存,在dma与计算机内核驱动中断模式下完成数据从fpga至用户态内存的传输。
8、进一步的,步骤s2中,在所述链表中筛选目标长度的链条时,包括:
9、s21)获取链表中当前指针对应的内存块地址和内存块大小,并获取当前指针的上一指针对应的内存块地址和内存块大小;
10、s22)若当前指针对应的内存块地址和上一指针对应的内存块地址之差与上一指针对应的内存块大小相同,则将当前链条的长度加一并判断当前链条的长度是否达到目标长度,是则将当前链条作为被筛选的链条,执行获取被筛选的链条对应的连续内存块的步骤;否则跳转步骤s21;
11、若当前指针对应的内存块地址和上一指针对应的内存块地址之差与上一指针对应的内存块大小不同,则初始化下一链条的长度,并跳转步骤s21。
12、进一步的,步骤s22)中执行获取被筛选的链条对应的连续内存块的步骤之前,包括:
13、判断被筛选的链条数量是否满足要求,是则执行获取被筛选的链条对应的连续内存块的步骤,否则初始化下一链条的长度,并跳转步骤s21。
14、进一步的,步骤s22)中执行获取被筛选的链条对应的连续内存块的步骤之前,还包括:记录被筛选的链条对应的指针偏移和连续内存块的大小;
15、获取被筛选的链条对应的连续内存块时,包括:根据每个被筛选的链条对应的指针偏移和连续内存块的大小,获取对应的物理内存空间,作为被筛选的链条对应的连续内存块。
16、进一步的,步骤s1中,开辟虚拟内存之后还包括:进行fpga与cpu的连接测试,若测试成功,则执行创建与所述虚拟内存中每个内存块对应的链表的步骤,若测试失败,则进行调试直到测试成功。
17、进一步的,步骤s3中,连接每一段连续内存块并作为dma的传输内存时,包括:将每一段连续内存块分别绑定到dma的对应描述符,设置dma地址的起始,采用dma的链式传输,将每一段连续内存块进行链接,触发一次中断传输。
18、进一步的,步骤s4之前还包括:启用msi的中断信号,并选取指定数量的信号向量。
19、进一步的,步骤s4之前还包括:将所有连续内存块集中映射至硬件,保留寄存器的中断控制操作并删除其他的应用调用。
20、本专利技术还提出一种提高dma传输效率的装置,包括互相连接的微处理器和存储介质,所述微处理器被编程或配置以执行任一所述的提高dma传输效率的方法。
21、本专利技术还提出一种计算机可读存储介质,所述计算机可读存储介质中存储有被编程或配置以执行任一所述的提高dma传输效率的方法的计算机程序。
22、与现有技术相比,本专利技术的优点在于:
23、本专利技术通过在虚拟内存中筛选出多个物理上连续的连续内存块,提高了进行dma的数据传输的内存空间,有效提高高速数据传输时的dma传输效率,直接降低了中断模式下cpu的使用率,同时避免了传统方案采用配置大页面内存带来的其它应用不兼容的情况。
本文档来自技高网...【技术保护点】
1.一种提高DMA传输效率的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的提高DMA传输效率的方法,其特征在于,步骤S2中,在所述链表中筛选目标长度的链条时,包括:
3.根据权利要求2所述的提高DMA传输效率的方法,其特征在于,步骤S22)中执行获取被筛选的链条对应的连续内存块的步骤之前,包括:
4.根据权利要求2所述的提高DMA传输效率的方法,其特征在于,步骤S22)中执行获取被筛选的链条对应的连续内存块的步骤之前,还包括:记录被筛选的链条对应的指针偏移和连续内存块的大小;
5.根据权利要求1所述的提高DMA传输效率的方法,其特征在于,步骤S1中,开辟虚拟内存之后还包括:进行FPGA与CPU的连接测试,若测试成功,则执行创建与所述虚拟内存中每个内存块对应的链表的步骤,若测试失败,则进行调试直到测试成功。
6.根据权利要求1所述的提高DMA传输效率的方法,其特征在于,步骤S3中,连接每一段连续内存块并作为DMA的传输内存时,包括:将每一段连续内存块分别绑定到DMA的对应描述符,设置DMA地址的起始,采用DMA
7.根据权利要求1所述的提高DMA传输效率的方法,其特征在于,步骤S4之前还包括:启用MSI的中断信号,并选取指定数量的信号向量。
8.根据权利要求1所述的提高DMA传输效率的方法,其特征在于,步骤S4之前还包括:将所有连续内存块集中映射至硬件,保留寄存器的中断控制操作并删除其他的应用调用。
9.一种提高DMA传输效率的装置,其特征在于,包括互相连接的微处理器和存储介质,所述微处理器被编程或配置以执行权利要求1~8任一所述的提高DMA传输效率的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有被编程或配置以执行权利要求1~8任一所述的提高DMA传输效率的方法的计算机程序。
...【技术特征摘要】
1.一种提高dma传输效率的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的提高dma传输效率的方法,其特征在于,步骤s2中,在所述链表中筛选目标长度的链条时,包括:
3.根据权利要求2所述的提高dma传输效率的方法,其特征在于,步骤s22)中执行获取被筛选的链条对应的连续内存块的步骤之前,包括:
4.根据权利要求2所述的提高dma传输效率的方法,其特征在于,步骤s22)中执行获取被筛选的链条对应的连续内存块的步骤之前,还包括:记录被筛选的链条对应的指针偏移和连续内存块的大小;
5.根据权利要求1所述的提高dma传输效率的方法,其特征在于,步骤s1中,开辟虚拟内存之后还包括:进行fpga与cpu的连接测试,若测试成功,则执行创建与所述虚拟内存中每个内存块对应的链表的步骤,若测试失败,则进行调试直到测试成功。
6.根据权利要求1所述的提高dma传输效率的方法,其特征在于,步骤s...
【专利技术属性】
技术研发人员:姜伟,王萌,
申请(专利权)人:湖南艾科诺维科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。