CN115114103B - 直接存储器访问数据传输的测试方法和装置 - Google Patents

直接存储器访问数据传输的测试方法和装置 Download PDF

Info

Publication number
CN115114103B
CN115114103B CN202211010569.7A CN202211010569A CN115114103B CN 115114103 B CN115114103 B CN 115114103B CN 202211010569 A CN202211010569 A CN 202211010569A CN 115114103 B CN115114103 B CN 115114103B
Authority
CN
China
Prior art keywords
memory
data
dma
cache
direct
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
CN202211010569.7A
Other languages
English (en)
Other versions
CN115114103A (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.)
Moore Threads Technology Co Ltd
Original Assignee
Moore Threads 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 Moore Threads Technology Co Ltd filed Critical Moore Threads Technology Co Ltd
Priority to CN202211010569.7A priority Critical patent/CN115114103B/zh
Publication of CN115114103A publication Critical patent/CN115114103A/zh
Application granted granted Critical
Publication of CN115114103B publication Critical patent/CN115114103B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/221Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test buses, lines or interfaces, e.g. stuck-at or open line faults
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/263Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • 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/0893Caches characterised by their organisation or structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本申请公开了一种直接存储器访问数据传输的测试方法和装置。所述方法包括:申请第一内存和第二内存,其中,所述第一内存和所述第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输;以及比较所述第一内存和所述第二内存中的数据,根据比较结果确定所述直接存储器访问驱动的准确性。由此,减少由于高速缓冲存储器的一致性问题对直接存储器访问数据传输的测试造成干扰,提高了测试结果的可靠性。

Description

直接存储器访问数据传输的测试方法和装置
技术领域
本申请涉及数据通信技术领域,尤其涉及一种直接存储器访问数据传输的测试方法和装置。
背景技术
在设置有中央处理器(central processing unit,CPU)的系统中,为了提高CPU和内存的使用效率,可以通过直接存储器访问(Direct Memory Access,DMA)的方式对数据进行传输。DMA数据传输可以通过DMA控制器(DMA Controller,DMAC)来实现,通过在DMA控制器中执行DMA驱动程序控制DMA数据传输。为了保证DMA数据传输的准确性,需要对DMA驱动进行测试。
应该注意,上面对技术背景的介绍只是为了方便对本申请的技术方案进行清楚、完整的说明,并方便本领域技术人员的理解而阐述的。不能仅仅因为这些方案在本申请的背景技术部分进行了阐述而认为上述技术方案为本领域技术人员所公知。
发明内容
本申请的发明人发现,在对DMA驱动进行测试的过程中,需要向内存写入数据或者从内存读出数据。但是,在使用内存的过程中,容易受到高速缓冲存储器(Cache)一致性的问题的干扰,从而导致测试结果不准确,无法可靠地对DMA驱动进行测试。
为了解决至少上述技术问题或类似的技术问题,本申请实施例提供一种DMA数据传输的测试方法和装置。在该DMA数据传输的测试方法中,申请不使用Cache的内存或者具有Cache一致性的内存,并利用该内存进行DMA数据传输的测试,由此,能够避免由于Cache一致性问题对DMA数据传输的测试造成干扰,能够提高测试结果的可靠性。
本申请实施例提供一种DMA数据传输的测试方法,所述方法包括:
申请第一内存和第二内存,其中,所述第一内存和所述第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;
通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输;以及
比较所述第一内存和所述第二内存中的数据,根据比较结果确定所述直接存储器访问驱动的准确性。
本申请实施例还提供一种DMA数据传输的测试装置,所述装置包括:
申请单元,其申请第一内存和第二内存,其中,所述第一内存和所述第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;
传输单元,其通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输;以及
比较单元,其比较所述第一内存和所述第二内存中的数据,根据比较结果确定所述直接存储器访问驱动的准确性。
本申请实施例还提供一种计算机设备,包括存储器、图形处理器或处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述方法。
本申请实施例的有益效果在于:能够避免由于Cache一致性问题对DMA数据传输的测试造成干扰,提高测试结果的可靠性。
参照后文的说明和附图,详细公开了本申请的特定实施方式,指明了本申请的原理可以被采用的方式。应该理解,本申请的实施方式在范围上并不因而受到限制。在所附权利要求的条款的范围内,本申请的实施方式包括许多改变、修改和等同。
针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。
应该强调,术语“包括/包含”在本文使用时指特征、整件、步骤或组件的存在,但并不排除一个或更多个其它特征、整件、步骤或组件的存在或附加。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本申请第一方面的实施例的DMA数据传输的测试方法的一个示意图;
图2是本申请第一方面的实施例的DMA和CPU交互的一个示意图;
图3是本申请第一方面的实施例的以软件的方式维护Cache一致性的一个示意图;
图4是本申请第一方面的实施例的以软件的方式维护Cache一致性的另一个示意图;
图5是本申请第二方面的实施例的DMA数据传输的测试装置的一个示意图;
图6是本申请第三方面的实施例的DMA数据传输的测试系统的一个示意图;
图7是本申请第三方面的实施例的主机的一个示意图。
具体实施方式
参照附图,通过下面的说明书,本申请的前述以及其它特征将变得明显。在说明书和附图中,具体公开了本申请的特定实施方式,其表明了其中可以采用本申请的原则的部分实施方式,应了解的是,本申请不限于所描述的实施方式,相反,本申请包括落入所附权利要求的范围内的全部修改、变型以及等同物。下面结合附图对本申请的各种实施方式进行说明。这些实施方式只是示例性的,不是对本申请的限制。
在本申请实施例中,术语“第一”、“第二”、“上”、“下”等用于对不同元素从称谓上进行区分,但并不表示这些元素的空间排列或时间顺序等,这些元素不应被这些术语所限制。术语“和/或”包括相关联列出的术语的一种或多个中的任何一个和所有组合。术语“包含”、“包括”、“具有”等是指所陈述的特征、元素、元件或组件的存在,但并不排除存在或添加一个或多个其他特征、元素、元件或组件。
在本申请实施例中,单数形式“一”、“该”等包括复数形式,应广义地理解为“一种”或“一类”而并不是限定为“一个”的含义;此外术语“所述”应理解为既包括单数形式也包括复数形式,除非上下文另外明确指出。此外术语“根据”应理解为“至少部分根据……”,术语“基于”应理解为“至少部分基于……”,除非上下文另外明确指出。
第一方面的实施例
本申请第一方面的实施例提供一种DMA数据传输的测试方法。图1是本申请第一方面的实施例的DMA数据传输的测试方法的一个示意图。如图1所示,该方法可以包括:
操作101:申请第一内存和第二内存,其中,第一内存和第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;
操作102:通过DMA驱动在第一内存和第二内存之间进行数据传输;以及
操作103:比较第一内存和第二内存中的数据,根据比较结果确定DMA驱动的准确性。
值得注意的是,以上附图1仅对本申请实施例进行了示意性说明,但本申请不限于此。例如可以适当地调整各个操作之间的执行顺序,此外还可以增加其他的一些操作或者减少其中的某些操作。本领域的技术人员可以根据上述内容进行适当地变型,而不仅限于上述附图1的记载。
根据该实施例,通过在测试过程中,申请不使用Cache的内存或者具有Cache一致性的第一内存和第二内存,并通过DMA驱动在第一内存和第二内存之间进行数据传输,比较第一内存和第二内存中的数据,根据比较结果确定DMA驱动的准确性。由此,能够避免由于Cache一致性问题对DMA数据传输的测试造成干扰,能够提高测试结果的可靠性。
需要说明的是,第一内存和第二内存可以是位于任意设备中的、可以实现不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存。第一内存和第二内存可以位于同一设备或者不同设备中。其中,设备可以是主机、图形处理器、神经网络处理器等,只要该设备的内存可以实现不使用高速缓冲存储器或者具有高速缓冲存储器一致性即可,例如,该设备的内存是可以通过硬件或软件方式实现高速缓冲存储器一致性、还可以是可以通过预设函数申请得到的不使用高速缓冲存储器的内存等,本公开对此不作限制。
其中,第一内存和第二内存之间进行数据传输的传输方式可以是将数据从第一内存直接传输至第二内存,或者从第二内存直接传输至第一内存,还可以是在传输过程中途径其他存储空间,例如,可以从第一内存传输至目标设备的内存中,并从目标设备的内存中传输至第二内存,目标设备的内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存,本公开对第一内存和第二内存之间进行数据传输的传输方式、途径的目标内存的数量均不作限制。
在一些实施例中,第一内存可以是主机中的内存,例如,CPU本地的内存(以下简称为CPU内存),或者,也可以是GPU本地的内存(以下简称为GPU内存)。第二内存可以是主机中的内存,例如,CPU内存,或者,也可以是GPU内存。
换句话说,在申请内存时,第一内存和第二内存可以是CPU内存和GPU内存的任意组合。例如,第一内存和第二内存可以是CPU内存和CPU内存,或者,GPU内存和GPU内存,或者,CPU内存和GPU内存,或者,GPU内存和GPU内存。
为便于理解,下文以第一内存和第二内存均是CPU内存为例进行说明。
图2是本申请第一方面的实施例的DMA和CPU交互的一个示意图。下面结合图2以DMA和CPU的交互过程为例对Cache一致性的问题进行示例性的说明。
在一些实施例中,如图2所示,Cache是位于CPU与内存之间的临时存储器。Cache的容量比内存小,但是交换速度比内存快。在Cache中存储内存中的、CPU即将访问的一部分数据,由此,CPU可以通过访问Cache快速地读取数据和/或写入数据,从而能够提高处理速度。
但是,由于Cache存在于CPU与内存之间,在外设对内存中的数据进行修改的情况下,不能保证Cache中的数据也得到同样的更新,并且,在CPU对Cache中的数据进行修改时,也不能保证内存中的数据得到同样的更新。在此情况下,这种Cache中的数据与内存中数据的不同步或不一致的现象,可能导致使用DMA进行数据传输时发生错误。
例如,在对DMA数据传输进行测试的过程中,测试过程中使用的内存为可以Cache的内存,并且DMA驱动将设备中的数据传输到与Cache对应的这部分内存的空间中。CPU通过对这部分内存中的数据进行验证来测试DMA驱动的准确性。由于该内存为可以Cache的内存,因此,CPU会将Cache中的数据作为该内存中的数据,在Cache中的数据没有被及时更新的情况下,CPU可能会做出该内存中的数据不准确的测试结果。测试人员根据该测试结果无法确定是由于DMA驱动不准确导致的错误还是由于Cache一致性导致的错误。因此,无法可靠地对DMA驱动进行测试。
在操作101中,在对DMA数据传输进行测试时,测试过程中使用的内存(第一内存和/或第二内存)为不能Cache的内存。也就是说,通过访问第一内存和/或第二内存才可以使用第一内存和/或第二内存中的数据,第一内存和/或第二内存中的数据不会被存储到Cache中,Cache中的数据也不会被存储到第一内存和/或第二内存中。由此,能够在DMA数据传输的测试过程中避免Cache的一致性问题带来的干扰。
此外,在操作101中,测试过程中使用的内存(第一内存和/或第二内存)也可以是具有Cache一致性的内存。即,第一内存和/或第二内存本身是可以Cache的内存,并且,该第一内存和/或第二内存中的数据与Cache中的数据保持一致。如此,也可以在DMA数据传输的测试过程中避免Cache的一致性问题带来的干扰。
在一些实施例中,在内存使用Cache时,可以通过硬件或软件的方式维护Cache的一致性。
例如,在以硬件方式维护Cache的一致性时,可以在系统级芯片(System on Chip,SoC)中设置Cache一致性控制器(Cache Coherent Interconnect,CCI)。有关CCI的具体内容可参考相关技术。
例如,在以软件的方式维护Cache的一致性时,可以根据最新的数据在CPU侧还是设备侧对Cache进行无效(invalid)或者冲洗(flush)之后,在进行DMA数据传输。
图3是本申请第一方面的实施例的以软件的方式维护Cache一致性的一个示意图。下面结合图3对设备到内存的DMA数据传输过程中的Cache一致性进行示例性的说明。如图3所示,设备的FIFO(First Input First Output)存储器中产生了新数据,需要把数据写入到内存的DMA buffer里,这样CPU可以读到设备中的数据。在DMA传输之前,最新的数据存储在设备的FIFO存储器中,此时Cache里的数据是旧的无效数据。可以先将Cache中数据无效,然后再启动DMA传输。由此,CPU能够获取最新的设备数据。
图4是本申请第一方面的实施例的以软件的方式维护Cache一致性的另一个示意图。下面结合图4对内存到设备的DMA数据传输过程中的Cache一致性进行示例性的说明。如图4所示,CPU产生了新数据,需要把数据传输到设备的FIFO存储器中。在DMA传输之前,CPU的Cache中缓存了最新的数据,可以调用Cache clean/flush操作,把Cache中的数据写入到内存中。然后再启动DMA传输。由此,能够把DMA buffer中的最新的数据传输到设备的FIFO存储器。本申请不限于此,也可以采用其他硬件或软件的方式维护Cache一致性。
在一些实施例中,在步骤101中,第一内存和第二内存可以是相同类型的内存,例如,第一内存和第二内存可以都是不使用Cache的内存,或者,第一内存和第二内存可以都是具有Cache一致性的内存。但是,本申请不限于此,第一内存和第二内存也可以是不同类型的内存,例如,第一内存和第二内存可以分别是不使用Cache的内存、具有Cache一致性的内存,或者,第一内存和第二内存可以分别是具有Cache一致性的内存、不使用Cache的内存。
在一些实施例中,在操作101中,在申请所述第一内存和所述第二内存时,可以判断输入输出内存管理单元(IOMMU)的状态,根据IOMMU的状态返回第一内存和第二内存的地址。由此,DMA数据传输的测试方法能够支持IOMMU开启或关闭状态下的DMA访问功能,能够保证DMA数据传输的测试场景的完整性。例如,不管系统(包含X86、ARM等)开启或关闭IOMMU都不会给DMA的功能造成干扰。
在一些实施例中,在申请第一内存和第二内存时,在IOMMU开启时,可以返回第一虚拟地址和第二虚拟地址,其中,第一虚拟地址包括供CPU使用的第一内存的地址和第二内存的地址;第二虚拟地址包括供设备使用的第一内存的地址和第二内存的地址。
在IOMMU关闭时,可以返回第三虚拟地址和物理地址,其中,第三虚拟地址包括供CPU使用的第一内存的地址和第二内存的地址;物理地址包括供设备使用的第一内存的地址和第二内存的地址。
在一些实施例中,可以通过Linux系统中的预设函数申请不使用高速缓冲存储器的第一内存和第二内存。由此,能够简化测试程序的开发。例如,该预设函数可以是为dma_alloc_coherent函数,和/或dma_alloc_writecombine函数。
其中,通过dma_alloc_coherent函数和dma_alloc_writecombine函数申请的内存都是不可以Cache的内存。由此,能够通过简单的方式申请第一内存和第二内存,在利用第一内存和第二内存进行DMA数据传输的测试时,能够避免Cache一致性的干扰。
其中,在通过dma_alloc_coherent函数申请内存时,还会判断IOMMU的状态。由此,不管IOMMU处于开启还是关闭的状态,都可以通过dma_alloc_coherent函数申请到正确的内存。由此,能够保证DMA数据传输的测试场景的完整性。
并且,dma_alloc_coherent函数为不同的操作系统都会实现的底层函数。因此,通过在测试方法中利用dma_alloc_coherent函数申请第一内存和/或第二内存,能够提高测试方法的普适性,能够在多平台中使用该测试方法。
本申请不限于此,也可以采用其他预设函数申请第一内存和第二内存,在第一内存和第二内存为可以Cache的内存时,还可以利用前述的硬件或软件的方式维护Cache一致性。
在一些实施例中,在操作102中和操作103中,可以利用待测试的DMA驱动在第一内存和第二内存之间进行预定数量的数据传输。如果DMA驱动通路开发正确,那么第一内存中该预定数量的数据与第二内存中该预定数量的数据是相同的,如果DMA驱动通路开发不正确,那么第一内存中该预定数量的数据与第二内存中该预定数量的数据不同。由此,能够根据第一内存和第二内存中数据的比较结果,可靠地确定DMA驱动的准确性。
在一些实施例中,在操作102和操作103中,DMA驱动可以是与设备对应的DMA驱动。例如,如图2所示,设备可以是输入输出设备,DMA驱动可以是输入输出设备的DMA驱动。其中,该输入输出设备例如可以是显示器、鼠标、键盘、调制解调器、网卡、扫描仪、打印机、外置存储器、外置芯片,等等。又例如,如图2所示,设备也可以是图形处理器(graphicsprocessing unit,GPU),DMA驱动可以是GPU的DMA驱动。本申请不限于此,设备也可以是其他类型的设备。
在一些实施例中,待测试的DMA驱动可以包括DMA传输的整个过程或整个过程中的部分内容。例如,该DMA传输过程包括:DMA请求阶段、DMA响应阶段、DMA传输阶段以及DMA结束阶段。在DMA请求阶段中,CPU对DMA控制器初始化。在DMA响应阶段中,DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知设备接口开始DMA传输。在DMA传输阶段中,DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制存储器与设备接口进行DMA传输。在DMA控制器的控制下,在存储器和设备之间直接进行数据传送,在传送过程中不需要CPU的参与。在DMA结束阶段,当完成规定的数据传输后,DMA控制器即释放总线控制权,并向设备接口发出结束信号。当设备接口收到结束信号后,一方面停止设备的工作,另一方面向CPU提出中断请求,使CPU继续执行原来的程序。本申请不限于此,DMA传输过程也可以为其他内容。
在一些实施例中,在对DMA驱动进行测试时,在操作102中,可以采用各种方式进行数据传输,以测试DMA驱动的准确性。
例如,第一内存和第二内存均为CPU内存,可以通过待测试的DMA驱动将第一内存中的数据传输到设备中,通过待测试的DMA驱动将设备中的数据传输到第二内存中。其中,设备可以为GPU设备,该GPU设备的内存可以为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存。
在一些可选的实施例中,第一内存和第二内存均为CPU内存,可以通过待测试的DMA驱动将第一内存中的数据传输第二内存中,或者,通过待测试的DMA驱动将第二内存中的数据传输第一内存中。
在一些可选的实施例中,第一内存和第二内存均为GPU内存,可以通过待测试的DMA驱动将第一内存中的数据传输到主机中,通过待测试的DMA驱动将主机中的数据传输到第二内存中,其中,主机内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存。
在一些可选的实施例中,第一内存和第二内存均为GPU内存,可以通过待测试的DMA驱动将第一内存中的数据传输第二内存中,或者,通过待测试的DMA驱动将第二内存中的数据传输第一内存中。
在一些可选的实施例中,第一内存为CPU内存,第二内存均为GPU内存,通过待测试的DMA驱动将第一内存中的数据传输到第二内存中,或者,通过待测试的DMA驱动将第二内存中的数据传输第一内存中。
以下,以第一内存和第二内存均为CPU内存为例,对操作101至操作103的具体实施方式进行施例性的说明。
例如,测试设备到内存或内存到设备的DMA数据传输的伪代码可以为如下形式:
buf_w = dma_alloc_coherent (&pdev->dev, size, &dma_addrw, GFP_DMA);//申请第一内存
buf_r = dma_alloc_coherent(&pdev->dev, size, &dma_addrr, GFP_DMA); //申请第二内存
xxx_dma_transfer(..., dma_addrw, DMA_MEM_TO_DEV);//将第一内部中的数据传输到设备
xxx_dma_transfer(..., dma_addrr, DMA_DEV_TO_MEM); //将设备中的数据传输到第二内部
memcmp(buf_w, buf_r, size) //比较第一内存和第二内存中的数据
如果memcmp成功,表示DMA的驱动通路开发正确;如果memcmp失败,可能是DMA驱动xxx_dma_transfer()本身有问题,或者,可能是硬件存在问题等。
例如,测试内存到内存的DMA数据传输的伪代码可以为如下形式:
buf_w = dma_alloc_coherent (&pdev->dev, size, &dma_addrw, GFP_DMA);//申请第一内存
buf_r = dma_alloc_coherent(&pdev->dev, size, &dma_addrr, GFP_DMA); //申请第二内存
xxx_dma_transfer(dma_addrr, dma_addrw, DMA_MEM_TO_MEM);//将第一内部中的数据传输到第二内存中
memcmp(buf_w, buf_r, size) //比较第一内存和第二内存中的数据
如果memcmp成功,表示DMA的驱动通路开发正确;如果memcmp失败,可能是DMA驱动xxx_dma_transfer()本身有问题,或者,可能是硬件存在问题等。
在一些实施例中,该测试方法可以在各种基于Linux内核的发行版操作系统中实现,例如:统信OS,麒麟OS,Ubuntu等。
根据该实施例,通过在测试过程中,申请不使用Cache的内存或者具有Cache一致性的第一内存和第二内存,并通过DMA驱动在第一内存和第二内存之间进行数据传输,比较第一内存和第二内存中的数据,根据比较结果确定DMA驱动的准确性。由此,能够避免由于Cache一致性问题对DMA数据传输的测试造成干扰,能够提高测试结果的可靠性。
第二方面的实施例
第二方面的实施例提供一种DMA数据传输的测试装置。该DMA数据传输的测试装置与第一方面的实施例的DMA数据传输的测试方法对应,将相同的内容合并于此,此处不再赘述。
图5是本申请第二方面的实施例的DMA数据传输的测试装置的一个示意图。如图5所示,DMA数据传输的测试装置500包括申请单元501、传输单元502和比较单元503。其中,申请单元501申请第一内存和第二内存,其中,第一内存和第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;传输单元502在第一内存和第二内存之间进行数据传输;比较单元503比较第一内存和第二内存中的数据,根据比较结果确定直接存储器访问驱动的准确性。
在一些实施例中,申请单元501在申请第一内存和第二内存时,判断输入输出内存管理单元(IOMMU)的状态,根据输入输出内存管理单元的状态返回第一内存和第二内存的地址。
在一些实施例中,在输入输出内存管理单元开启时,利用供中央处理器(CPU)使用的第一虚拟地址和供直接存储器访问驱动使用的第二虚拟地址表示第一内存和第二内存;在输入输出内存管理单元关闭时,利用供中央处理器使用的第三虚拟地址和供直接存储器访问驱动使用的物理地址表示第一内存和第二内存。
在一些实施例中,传输单元502通过直接存储器访问驱动将第一内存中的数据传输到设备中,通过直接存储器访问驱动将设备中的数据传输到所述第二内存中;或者,通过直接存储器访问驱动将第一内存中的数据传输到第二内存中,或者,将第二内存中的数据传输到第一内存中。
在一些实施例中,申请单元501通过Linux系统中的预设函数申请不使用高速缓冲存储器的第一内存和第二内存。
在一些实施例中,预设函数为dma_alloc_coherent函数,和/或dma_alloc_writecombine函数。
根据上述实施例,通过在测试过程中,申请不使用Cache的内存或者具有Cache一致性的第一内存和第二内存,并通过DMA驱动在第一内存和第二内存之间进行数据传输,比较第一内存和第二内存中的数据,根据比较结果确定DMA驱动的准确性。由此,能够避免由于Cache一致性问题对DMA数据传输的测试造成干扰,能够提高测试结果的可靠性。
第三方面的实施例
第三方面的实施例提供一种DMA数据传输的测试系统。图6是本申请第三方面的实施例的DMA数据传输的测试系统的一个示意图。如图6所示,DMA数据传输的测试系统600包括DMA控制器601和主机602。DMA控制器601可以运行DMA驱动程序,以控制DMA数据传输过程。主机602可以具有如第二方面的实施例中所述的DMA数据传输的测试装置,将相同的内容合并于此,此处不再赘述。
在一些实施例中,主机602可以是与DMA控制器601集成在一起的主机,即,主机602和DMA控制器601属于同一台计算机设备。或者,主机602可以是与DMA控制器601独立的主机,即,在DMA控制器601上连接主机602之后,通过主机602对DMA控制器21的DMA驱动程序进行测试。
在一些实施例中,主机602例如可以是计算机、服务器、工作站、膝上型计算机、智能手机,等等;但本申请实施例不限于此。
图7是本申请第三方面的实施例的主机的一个示意图。如图7所示,主机700可以包括:处理器(例如中央处理器CPU)710和存储器720;存储器720耦合到中央处理器710。其中该存储器720可存储各种数据;此外还存储信息处理的程序721(例如,驱动程序),并且在处理器710的控制下执行该程序721。
在一些实施例中,DMA数据传输的测试装置500的功能被集成到处理器710中实现。其中,处理器710被配置为实现如第一方面的实施例所述的方法。
在一些实施例中,DMA数据传输的测试装置500与处理器710分开配置,例如可以将DMA数据传输的测试装置500配置为与处理器710连接的芯片,通过处理器710的控制来实现DMA数据传输的测试装置500的功能。
此外,如图7所示,主机700还可以包括:输入输出(I/O)设备730和显示器740等;其中,上述部件的功能与现有技术类似,此处不再赘述。值得注意的是,主机700也并不是必须要包括图7中所示的所有部件;此外,主机700还可以包括图7中没有示出的部件,可以参考相关技术。
本申请的实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面的实施例中的任一项方法。
本申请的实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现第一方面的实施例中的任一项方法。
本申请的实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现第一方面的实施例中的任一项方法。
本申请各实施例的技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完图全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (14)

1.一种直接存储器访问数据传输的测试方法,其特征在于,所述方法包括:
申请第一内存和第二内存,其中,所述第一内存和所述第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;
通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输;以及
比较所述第一内存和所述第二内存中的数据,根据比较结果确定所述直接存储器访问驱动的准确性。
2.根据权利要求1所述的方法,其中,
在申请所述第一内存和所述第二内存时,判断输入输出内存管理单元的状态,根据所述输入输出内存管理单元的状态返回所述第一内存和所述第二内存的地址。
3.根据权利要求2所述的方法,其中,
在所述输入输出内存管理单元开启时,利用供中央处理器使用的第一虚拟地址和供所述直接存储器访问驱动使用的第二虚拟地址表示所述第一内存和所述第二内存;
在所述输入输出内存管理单元关闭时,利用供中央处理器使用的第三虚拟地址和供所述直接存储器访问驱动使用的物理地址表示所述第一内存和所述第二内存。
4.根据权利要求1所述的方法,其中,
通过Linux系统中的预设函数申请不使用高速缓冲存储器的所述第一内存和所述第二内存。
5.根据权利要求4所述的方法,其中,
所述预设函数为dma_alloc_coherent函数,和/或dma_alloc_writecombine函数。
6. 根据权利要求1所述的方法,其中,所述通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输包括:
通过所述直接存储器访问驱动将所述第一内存中的数据传输到设备中,通过所述直接存储器访问驱动将所述设备中的数据传输到所述第二内存中;或者
通过所述直接存储器访问驱动将所述第一内存中的数据传输到所述第二内存中,或者,将所述第二内存中的数据传输到所述第一内存中。
7.一种直接存储器访问数据传输的测试装置,其特征在于,所述装置包括:
申请单元,其申请第一内存和第二内存,其中,所述第一内存和所述第二内存为不使用高速缓冲存储器的内存或具有高速缓冲存储器一致性的内存;
传输单元,其通过直接存储器访问驱动在所述第一内存和所述第二内存之间进行数据传输;以及
比较单元,其比较所述第一内存和所述第二内存中的数据,根据比较结果确定所述直接存储器访问驱动的准确性。
8.根据权利要求7所述的装置,其中,
所述申请单元在申请所述第一内存和所述第二内存时,判断输入输出内存管理单元的状态,根据所述输入输出内存管理单元的状态返回所述第一内存和所述第二内存的地址。
9.根据权利要求8所述的装置,其中,
在所述输入输出内存管理单元开启时,利用供中央处理器使用的第一虚拟地址和供所述直接存储器访问驱动使用的第二虚拟地址表示所述第一内存和所述第二内存;
在所述输入输出内存管理单元关闭时,利用供中央处理器使用的第三虚拟地址和供所述直接存储器访问驱动使用的物理地址表示所述第一内存和所述第二内存。
10.根据权利要求7所述的装置,其中,
所述申请单元通过Linux系统中的预设函数申请不使用高速缓冲存储器的所述第一内存和所述第二内存。
11.根据权利要求10所述的装置,其中,
所述预设函数为dma_alloc_coherent函数,和/或dma_alloc_writecombine函数。
12.根据权利要求7所述的装置,其中,
所述传输单元通过所述直接存储器访问驱动将所述第一内存中的数据传输到设备中,通过所述直接存储器访问驱动将所述设备中的数据传输到所述第二内存中;或者,通过所述直接存储器访问驱动将所述第一内存中的数据传输到所述第二内存中,或者,将所述第二内存中的数据传输到所述第一内存中。
13.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至6任一项所述的方法。
CN202211010569.7A 2022-08-23 2022-08-23 直接存储器访问数据传输的测试方法和装置 Active CN115114103B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211010569.7A CN115114103B (zh) 2022-08-23 2022-08-23 直接存储器访问数据传输的测试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211010569.7A CN115114103B (zh) 2022-08-23 2022-08-23 直接存储器访问数据传输的测试方法和装置

Publications (2)

Publication Number Publication Date
CN115114103A CN115114103A (zh) 2022-09-27
CN115114103B true CN115114103B (zh) 2023-01-06

Family

ID=83336007

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211010569.7A Active CN115114103B (zh) 2022-08-23 2022-08-23 直接存储器访问数据传输的测试方法和装置

Country Status (1)

Country Link
CN (1) CN115114103B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117290154B (zh) * 2023-10-17 2024-05-07 无锡摩芯半导体有限公司 一种基于汽车功能安全的axi_dma冗余设计方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990187A (zh) * 2019-10-23 2020-04-10 北京全路通信信号研究设计院集团有限公司 一种内存巡检方法及系统
CN111159005A (zh) * 2018-11-07 2020-05-15 珠海全志科技股份有限公司 一种内存管理功能的测试方法和系统
CN114253777A (zh) * 2020-09-23 2022-03-29 华为技术有限公司 内存测试方法、装置及存储介质
CN114817081A (zh) * 2022-03-02 2022-07-29 阿里巴巴(中国)有限公司 内存访问方法、装置和输入输出内存管理单元

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9003077B2 (en) * 2011-09-30 2015-04-07 Oracle International Corporation Sharing IOMMU mappings across devices in a DMA group
JP6997235B2 (ja) * 2020-02-19 2022-01-17 株式会社日立製作所 データ転送システム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111159005A (zh) * 2018-11-07 2020-05-15 珠海全志科技股份有限公司 一种内存管理功能的测试方法和系统
CN110990187A (zh) * 2019-10-23 2020-04-10 北京全路通信信号研究设计院集团有限公司 一种内存巡检方法及系统
CN114253777A (zh) * 2020-09-23 2022-03-29 华为技术有限公司 内存测试方法、装置及存储介质
CN114817081A (zh) * 2022-03-02 2022-07-29 阿里巴巴(中国)有限公司 内存访问方法、装置和输入输出内存管理单元

Also Published As

Publication number Publication date
CN115114103A (zh) 2022-09-27

Similar Documents

Publication Publication Date Title
US9086957B2 (en) Requesting a memory space by a memory controller
US7533198B2 (en) Memory controller and method for handling DMA operations during a page copy
US8356149B2 (en) Memory migration
WO2000033170A1 (en) Method of communication between firmware written for different instruction set architectures
EP0766179A2 (en) Information handling system including non-disruptive command and data movement between storage and one or more auxiliary processors
JP2007287140A (ja) Dmaオペレーションを選択的に停止させるための方法、装置およびデータ処理システム
US20170364394A1 (en) System and method to perform live migration of a virtual machine without suspending operation thereof
CN100589089C (zh) 处理直接存储器访问请求的设备和方法
US5765022A (en) System for transferring data from a source device to a target device in which the address of data movement engine is determined
US5671231A (en) Method and apparatus for performing cache snoop testing on a cache system
US8832684B2 (en) Methods for improving atomicity of runtime inspections
CN115114103B (zh) 直接存储器访问数据传输的测试方法和装置
US20220413047A1 (en) Method and apparatus and non-transitory computer-readable storage medium for debugging solid-state disk (ssd) device
AU2021402110B2 (en) Memory migration within a multi-host data processing environment
EP3769222B1 (en) Testing kernel mode computer code by executing the computer code in user mode
CN111159005A (zh) 一种内存管理功能的测试方法和系统
US20120331261A1 (en) Point-in-Time Copying of Virtual Storage
US5794012A (en) Verification of strongly ordered memory accesses in a functional model of an out-of-order computer system
US8892838B2 (en) Point-in-time copying of virtual storage and point-in-time dumping
JP5673396B2 (ja) 情報処理システム、情報処理プログラム、情報処理方法
CN115454358A (zh) 数据的存储控制方法及其装置、图像处理系统
CN117762572B (zh) 宿主机与虚拟机共享目录文件系统的卸载方法及设备
US12008361B2 (en) Coherence-based dynamic code rewriting, tracing and code coverage
US12130725B2 (en) Memory page markings as logging cues for processor-based execution tracing
US20240354248A1 (en) Data transfer using coherent doorbell updates

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