CN111666228A - 数据传输方法及装置 - Google Patents
数据传输方法及装置 Download PDFInfo
- Publication number
- CN111666228A CN111666228A CN202010395016.2A CN202010395016A CN111666228A CN 111666228 A CN111666228 A CN 111666228A CN 202010395016 A CN202010395016 A CN 202010395016A CN 111666228 A CN111666228 A CN 111666228A
- Authority
- CN
- China
- Prior art keywords
- sub
- block
- pcie
- value
- dma buffer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Bus Control (AREA)
Abstract
本申请提供一种数据传输方法及装置,该方法应用于PCIe主机包括的cpu,该方法包括:获取分块信号量,该分块信号量用于指示PCIe板卡设备包括的dma buffer块中的子块;根据分块信号量,从dma buffer块中,确定第一子块;从已定义的全局变量中,获取第一子块包括的head地址字段中存储的head值以及第一子块的基地址;从dma buffer块中,获取第一子块包括的tail地址字段中存储的tail值;当第一子块的head值等于tail值时,根据待写入数据的长度值,更新head值;根据基地址以及更新后的head值,通过PCIe总线,将待写入数据写入第一子块包括的子buffer字段内。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种数据传输方法及装置。
背景技术
高速外围组件互连(英文:Peripheral Component Interconnect Express,简称:PCle)是一种总线和接口标准,也即是一种点对点串行连接的设备连接方式。每个设备在传输数据时,各自建立专属的传输通道,避免其他设备的干扰。直接内存访问(英文:DirectMemory Access,简称:dma)是一种不经过CPU而直接从内存存取数据的数据交换模式,其是解决内存和外部芯片之间数据交互的重要技术。结合两者优势的数据传输方法的研究和应用也在逐步开展,当下基于PCIe和dma的通信设备(例如,路由器、交换机)也越来越多。
目前,通过运行在PCIe板卡设备(例如,C可编程任务优化处理器(英文:C-programmable Task Optimized Processors,简称:ctop))上的应用程序可实现将PCIe主机(例如,host cpu)的数据快速搬移至PCIe板卡设备中。设备间传输数据的简要过程如图1所示,图1为现有技术中通过PCIe传输数据过程框图。
cpu通过PCIe通道将数据写入dma缓存(buffer)中,ctop上运行的应用程序不断读取dma buffer指定位置的值判断是否要进行数据传输。若可以进行数据传输,则应用程序读取的数据先暂存至cmem中,然后,再将数据存储至emem中指定的位置。
假设使用物理大小为16K的dma buffer空间作为数据中转缓存空间,如图2所示,dma addr表示dma buffer的首地址,cpu每次相对于首地址偏移head长度对数据进行操作;而ctop每次相对于首地址偏移tail长度对数据进行操作。head addr表示用于存储cpu操作数据时的偏移量。当head值达到buffer长度时,重置为0;tail addr表示用于存储ctop操作数据时的偏移量。当tail值达到buffer长度时,重置为0。因此,每次执行完数据传输操作后,head值与tail值相同。
在数据传输过程中,应用程序会不断读取head addr和tail addr中存储的head值和tail的值。如果head值大于tail值,则说明cpu向dma buffer中写入了数据,该数据长度为head值与tail值之间的差值,ctop读取数据,完成数据传输。
现有技术中给出的数据传输方法仅是简单的实现了PCIe主机和PCIe板卡设备之间数据交换的功能,但其存在空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
首先,每次数据交换的操作独占整个dma buffer,并且使用时会对dma buffer上锁,如此,同一时间内只能进行单一的操作。其次,dma buffer空间浪费较大,由于在写操作时一次仅使用128B或256B的空间,然而,每次操作独占dma buffer的空间已远远大于写操作时所需的空间;进行读操作时占用的空间也会过剩,造成了严重的资源浪费。上述原因导致了数据交换传输速率不够理想。
发明内容
有鉴于此,本申请提供了一种数据传输方法及装置,用以解决现有技术中,dmabuffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
第一方面,本申请提供了一种数据传输方法,所述方法应用于PCIe主机包括的cpu,所述PCIe主机与PCIe板卡设备通过PCIe总线连接,所述方法包括:
获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块;
根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块;
从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址;
从所述dma buffer中,获取所述第一子块包括的tail地址字段中存储的tail值;
当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值;
根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
第二方面,本申请提供了一种数据传输方法,所述方法应用于PCIe板卡设备包括的ctop,所述PCIe板卡设备还包括cpu核以及dma buffer,所述dma buffer包括多个子块,所述PCIe板卡设备与PCIe主机通过PCIe总线连接,所述方法包括:
为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块;
针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值;
当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
第三方面,本申请提供了一种数据传输装置,所述装置应用于PCIe主机包括的cpu,所述PCIe主机与PCIe板卡设备通过PCIe总线连接,所述装置包括:
获取单元,用于获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块;
确定单元,用于根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块;
所述获取单元还用于,从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址;
所述获取单元还用于,从所述dma buffer中,获取所述第一子块包括的tail地址字段中存储的tail值;
更新单元,用于当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值;
写入单元,用于根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
第四方面,本申请提供了一种数据传输装置,所述装置应用于PCIe板卡设备包括的ctop,所述PCIe板卡设备还包括cpu核以及dma buffer,所述dma buffer包括多个子块,所述PCIe板卡设备与PCIe主机通过PCIe总线连接,所述装置包括:
分配单元,用于为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块;
获取单元,用于针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值;
所述获取单元还用于,当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
因此,通过应用本申请提供的一种数据传输方法及装置,PCIe主机与PCIe板卡设备通过PCIe总线连接。cpu获取用于指示PCIe板卡设备包括的dma buffer中多个子块的分块信号量。根据分块信号量,cpu从dma buffer包括的多个子块中,确定第一子块;从已定义的全局变量中,cpu获取第一子块包括的head地址字段中存储的head值以及基地址。从dmabuffer中,cpu获取第一子块包括的tail地址字段中存储的tail值。当第一子块的head值等于tail值时,根据待写入数据的长度值,cpu更新head值。根据基地址以及更新后的head值,通过PCIe总线,cpu将待写入数据写入第一子块包括的子buffer字段内。
前述方式中,每次操作只需PCIe主机更新数据,PCIe板卡设备上的程序主动读取dma buffer中的数据,降低双cpu的调度开销;在共用一个物理dma buffer空间的前提下,将dma buffer逻辑分成N个块并结合多线程技术操作dma buffer的不同位置使得多种类型的数据或读写操作能同时进行且互相不会影响,提高N倍数据传输效率;解决了现有技术中,dma buffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
附图说明
图1为现有技术中通过PCIe传输数据过程框图;
图2为现有技术中dma buffer的构造示意图;
图3为本申请实施例提供的一种数据传输方法的流程图;
图4为本申请实施例提供的分块后的dma buffer结构示意图;
图5为本申请实施例提供的另一种数据传输方法的流程图;
图6为本申请实施例提供的通过PCIe传输数据过程框图;
图7为本申请实施例提供的一种数据传输装置结构图
图8为本申请实施例提供的另一种数据传输装置结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施例并不代表与本申请相一致的所有实施例。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相对应的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
下面对本申请实施例提供的数据传输方法进行详细地说明。参见图3,图3为本申请实施例提供的一种数据传输方法的流程图。该方法应用于PCIe主机包括的cpu,PCIe主机与PCIe板卡设备通过PCIe总线连接,具体包括下述步骤。
步骤310、获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块。
具体地,在本申请实施例中,cpu为dma buffer分配基地址,并配置dma buffer的大小。在不影响操作性能的前提下,PCIe主机对PCIe板卡设备包括的dma buffer物理空间从逻辑上进行分块处理。分块后的每个子块具有相同大小的存储空间。每个子块包括子buffer字段、head地址字段、tail地址字段、错误代码地址字段以及回复地址字段。
以使用一个大小为16K的dma buffer,逻辑上划分为4个块并运行4个线程为例,分块后的dma buffer结构如图4所示。
在dma buffer中,每个子块具有相同的结构。以第一子块为例,dma addr_1为子块的基地址(也可称为首地址);head addr_1用来存放PCIe主机每次操作dma buffer后相对于基地址(该基地址为dma buffer的基地址)的偏移,当该值达到dma buffer长度时,重置为0;tail addr_1用来存放PCIe板卡设备每次操作dma buffer后相对于基地址(该基地址为dma buffer的基地址)的偏移,当该值达到dma buffer长度时,也重置为0。
cpu定义一全局变量,该全局变量用于存放每个子块的基地址、每个子块包括的各个地址字段的值。在全局变量中存储的前述内容供PCIe主机使用。
cpu还将dma buffer的基地址、配置的可使用的dma buffer的大小、子块的基地址、每个子块包括的各个地址字段的值一同写入地址寄存器中。cpu还将状态寄存器置1表示PCIe主机初始化完成。
可以理解的是,地址寄存器、状态寄存器可被PCIe板卡设备访问。如此,PCIe板卡设备可明确当前PCIe主机的状态以及PCIe主机对dma buffer的配置。
当PCIe主机需要向PCIe板卡设备传输数据时,PCIe主机首先需从dma buffer中选择出一个子块作为目标子块,将待传输的数据写入目标子块中。
具体地,cpu在使用dma buffer的任务中定义一个变量。cpu对该变量执行运算后,得到分块信号量。该分块信号量用于指示PCIe板卡设备包括的dma buffer中的子块。
步骤320、根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块。
具体地,根据分块信号量,cpu定位到dma buffer中的某一个子块(例如,第一子块)。可以理解的是,根据任务的不同,运算后的分块信号量可指向dma buffer中的不同子块,从而使任务能较为均匀的散列在多个子块上。
步骤330、从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址。
具体地,根据前述步骤310的描述,cpu从已定义的全局变量中,获取第一子块包括的head地址字段(例如,head addr_1)中存储的head值以及第一子块的基地址(例如,dmaaddr_1)。
步骤340、从所述dma buffer中,获取所述第一子块包括的tail地址字段中存储的tail值。
具体地,CPU访问第一子块包括的tail地址字段(例如,tail addr_1),从中获取tail值。
步骤350、当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值。
具体地,cpu判断head值是否等于tail值。若head值等于tail值,则cpu根据待写入数据的长度值,更新head值。
其中,head值增加的大小等于此次传输的数据大小,并作为下次PCIe主机向dmabuffer传输数据时相对于基地址的偏移。head的值还可为信号来通知PCIe板卡设备,也即是PCIe主机有数据要传输。
若head值不等于tail值,则cpu重复执行步骤340。如此,可保证在上一次操作未完成时,涉及到的数据不会被本次的数据覆盖。
步骤360、根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
具体地,cpu更新head值后,利用第一子块的基地址以及更新后的head值,通过PCIe总线,以基地址偏移head值为起始地址,将待写入数据写入第一子块包括的子buffer字段内。
因此,通过应用本申请提供的一种数据传输方法,PCIe主机与PCIe板卡设备通过PCIe总线连接。cpu获取用于指示PCIe板卡设备包括的dma buffer中多个子块的分块信号量。根据分块信号量,cpu从dma buffer包括的多个子块中,确定第一子块。从已定义的全局变量中,cpu获取第一子块包括的head地址字段中存储的head值以及基地址。从dma buffer中,cpu获取第一子块包括的tail地址字段中存储的tail值。当第一子块的head值等于tail值时,根据待写入数据的长度值,cpu更新head值。根据基地址以及更新后的head值,通过PCIe总线,cpu将待写入数据写入第一子块包括的子buffer字段内。
前述方式中,每次操作只需PCIe主机更新数据,PCIe板卡设备上的程序主动读取dma buffer中的数据,降低双方cpu的调度开销;在共用一个物理dma buffer空间的前提下,将dma buffer逻辑分成N个块并结合多线程技术操作dma buffer的不同位置使得多种类型的数据或读写操作能同时进行且互相不会影响,提高N倍数据传输效率;解决了现有技术中,dma buffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
可选地,在前述步骤360之后,还包括下述过程:
首先,cpu将全局变量中更新的head值,存储至第一子块包括的head地址字段中。然后,cpu周期性获取第一子块包括的回复地址字段(例如,response addr_1)中存储的回复值。cpu判断该回复值是否被置1。当回复值为1时,cpu确定已完成当前数据传输。当回复值不为1时,cpu再次获取第一子块包括的回复地址字段中存储的回复值。
cpu为多个子块中的每个子块分配一个锁,该锁用于保证PCIe主机上多个任务同时操作多个子块时数据不会被覆盖。
当PCIe主机从PCIe板卡设备处获取数据时,PCIe板卡设备从dma buffer块的基地址处写入数据,则cpu从dma buffer块的基地址处读取数据。
可选地,由于PCI Multithread涉及多个线程并行地操作相关功能,如读计数器、操作表项等。因此,需要保证数据的一致性,避免同一块数据在同一时刻被多个线程同时操作的情况发生。在此基础上,需要对使用PCI Multithread的模块添加互斥锁的操作。
下面将以使用PCI Multithread进行表项操作的事务为例,进行说明:
(1)使用PCI Multithread对表项进行操作,可以同时令n个线程同时操作不同的表项。但是,为了避免多个线程同时操作同一表项,导致数据一致性被破坏的情况发生,所以,需要对表项操作的事务添加互斥锁:即在操作表项之前锁住整张表。
(2)如(1)中的描述虽避免了冲突,但在操作同一个表中的不同表项时不能进行并行的操作,达不到性能优化的目的。因此,需要使用粒度更小的锁一个表项的互斥锁。
(3)在加锁时需要指定唯一的信号量。锁整张表时,以唯一值——表的Struct ID作为信号量即可;但锁一个表项时,不同的表项需要指定不同的信号量,且该信号量需为每个表项唯一。
基于上述问题,对于不同类型的表,信号量的计算也不同。对于直接表(Table)而言,其查找键(Key)对于每个表项唯一,可以使用Key的值,进行n线程散列,作为互斥锁的信号量。对于哈希(Hash)表而言,其第一哈希(First Hash)值唯一确定了其在主表中的位置,因此,可以使用First Hash值进行散列。
计算上述散列后,以散列值进行加锁,不仅可以避免一个表项被多个线程同时操作导致的数据不一致问题,还可以避免dma通道的冲突问题。
下面对本申请实施例提供的数据传输方法进行详细地说明。参见图5,图5为本申请实施例提供的另一种数据传输方法的流程图。该方法应用于PCIe板卡设备包括的ctop,PCIe板卡设备还包括cpu核以及dma buffer,其中,dma buffer包括多个子块,PCIe板卡设备与PCIe主机通过PCIe总线连接,具体包括下述步骤。
步骤510、为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块。
具体地,根据前述实施例的描述,PCIe主机在实现数据传输的过程中进行了相关配置,则PCIe板卡设备也进行适应性配置,使之能与PCIe主机一起实现数据传输。
进一步地,根据PCIe板卡设备包括的第一数量个cpu核(例如,4个cpu,以cpu16-19为例),ctop复刻与第一数量个cpu核相等的第二数量个线程(例如,fork4个线程),并将复刻的每个线程的PCI多线程(PCI Multithread)程序与一个cpu核绑定,即每个线程独占使用一个cpu。
Ctop循环读取状态寄存器的值,判断状态寄存器的值是否置1。当状态寄存器置1时,ctop为每个线程对应分配一段dam buffer,大小为PCIe主机配置的可使用的dmabuffer的一个子块。ctop从地址寄存器中获取dma buffer的基地址。针对每个线程,根据基地址以及cpu核的标识,ctop确定为每个线程分配的对应子块。ctop对每个子块进行初始化处理,并将计数寄存器加1。当全部子块完成初始化后,ctop清空计数寄存器,并将状态寄存器置0,其中,状态寄存器的值用于表示PCIe板卡设备初始化完成。
更进一步地,根据基地址以及cpu核的标识,ctop确定为每个线程分配的对应子块的过程,具体为:针对每个线程,ctop根据CPU核的标识,对基地址进行n*4k的偏移操作。ctop根据执行偏移操作后的基地址以及PCIe主机配置的子块大小,确定为线程分配的子块,其中,每个子块包括子buffer字段、head地址字段、tail地址字段、错误代码地址字段以及回复地址字段。
ctop对基地址进行n*K(其中,n≤N,N为子块的个数,n为整数;K为dma buffer的大小与子块的个数的商)的偏移操作,得到每个子块的基地址。在本申请实施例中,K=4k。然后,ctop从地址寄存器中读取PCIe主机配置的可使用的dma buffer的一个子块的大小。如此,ctop确定为每个线程分配的子块。
更进一步地,ctop对每个子块进行初始化处理的过程,具体为:ctop从地址寄存器中获取对应子块包括的各地址字段的值(例如,dma_addr字段,head_addr字段,tail_addr字段,error_code_addr字段和response_addr字段中,各个地址字段的值。各字段的值为PCIe主机配置)。ctop将获取的子块包括的各地址字段的值对应存储至为线程分配的子块包括的各地址字段内。
步骤520、针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值。
具体地,针对每个子块,以第一子块为例。ctop获取第一子块包括的head_addr_1字段的head值以及tail_addr_1字段的tail值。
步骤530、当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
具体地,ctop判断head值是否等于tail值。若head值不等于tail值,则ctop确定PCIe主机已写入第一子块数据。ctop从第一子块包括的子buffer字段内获取PCIe主机通过PCIe总线传输的数据。其中,数据的大小为head值与tail值之间的差值。
如图6所示,图6为本申请实施例提供的通过PCIe传输数据过程框图。其中,dmabuffer被划分为多个子块,每个子块被一个cpu核中运行的线程使用。
进一步地,ctop根据获取的数据长度值,更新第一子块的基地址。其中,第一子块的基地址为第一子块的tail值与数据的长度值之和,并作为下次PCIe板卡设备在dmabuffer中读取数据的起始地址。然后,ctop将第一子块包括的response_addr_1字段中存储的回复值置1,该回复值用于使PCIe主机确定完成当前数据传输。
因此,通过应用本申请提供的一种数据传输方法,PCIe主机与PCIe板卡设备通过PCIe总线连接。PCIe板卡设备还包括cpu核以及dma buffer,dma buffer包括多个子块。ctop为运行在cpu核中的线程分配所述dma buffer包括的一个子块。针对每个子块,ctop获取子块包括的head地址字段中存储的head值以及子块包括的tail地址字段中存储的tail值。当head值不等于tail值时,ctop从子块包括的子buffer字段内获取PCIe主机通过PCIe总线传输的数据,其中,数据的大小为head值与tail值之间的差值。
前述方式中,每次操作只需PCIe主机更新数据,PCIe板卡设备上的程序主动读取dma buffer中的数据,降低双方cpu的调度开销;在共用一个物理dma buffer空间的前提下,将dma buffer逻辑分成N个块并结合多线程技术操作dma buffer的不同位置使得多种类型的数据或读写操作能同时进行且互相不会影响,提高N倍数据传输效率;解决了现有技术中,dma buffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
可选地,当PCIe主机从PCIe板卡设备处获取数据时,ctop从dma buffer的基地址处写入数据,则cpu从dma buffer块的基地址处读取数据。
基于同一发明构思,本申请实施例还提供了与上述图3描述的数据传输方法对应的数据传输装置。参见图7,图7为本申请实施例提供的一种数据传输装置结构图,该装置应用于PCIe主机包括的cpu,PCIe主机与PCIe板卡设备通过PCIe总线连接,该装置包括:
获取单元710,用于获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块;
确定单元720,用于根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块;
所述获取单元710还用于,从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址;
所述获取单元710还用于,从所述DMA Buffer中,获取所述第一子块包括的tail地址字段中存储的tail值;
更新单元730,用于当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值;
写入单元740,用于根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
可选地,所述装置还包括:存储单元(图中未示出),用于将所述更新后的head值,存储至所述第一子块包括的head地址字段中;
所述获取单元710还用于,获取所述第一子块包括的回复地址字段中存储的回复值;
确定单元(图中未示出),用于当所述回复值为1时,确定完成当前数据传输。
可选地,所述装置还包括:配置单元(图中未示出),用于为所述dma buffer分配基地址,并配置所述dma buffer的大小;
所述写入单元740还用于,将分配的基地址以及配置的所述dma buffer的大小写入地址寄存器中;
所述配置单元(图中未示出)还用于,将状态寄存器置1,所述状态寄存器的值用于表示所述PCIe主机初始化完成。
可选地,所述配置单元(图中未示出)还用于,为所述多个子块中的每个子块分配一个锁。
可选地,所述装置还包括:读取单元(图中未示出),用于当所述PCIe主机从所述PCIe板卡设备处获取数据时,从所述dma buffer块的基地址处读取数据。
因此,通过应用本申请提供的一种数据传输装置,PCIe主机与PCIe板卡设备通过PCIe总线连接。该装置获取用于指示PCIe板卡设备包括的dma buffer中多个子块的分块信号量。根据分块信号量,该装置从dma buffer包括的多个子块中,确定第一子块。从已定义的全局变量中,该装置获取第一子块包括的head地址字段中存储的head值以及基地址。从dma buffer中,该装置获取第一子块包括的tail地址字段中存储的tail值。当第一子块的head值等于tail值时,根据待写入数据的长度值,该装置更新head值。根据基地址以及更新后的head值,通过PCIe总线,该装置将待写入数据写入第一子块包括的子buffer字段内。
前述方式中,每次操作只需PCIe主机更新数据,PCIe板卡设备上的程序主动读取dma buffer中的数据,降低双方cpu的调度开销;在共用一个物理dma buffer空间的前提下,将dma buffer逻辑分成N个块并结合多线程技术操作dma buffer的不同位置使得多种类型的数据或读写操作能同时进行且互相不会影响,提高N倍数据传输效率;解决了现有技术中,dma buffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
基于同一发明构思,本申请实施例还提供了与上述图5描述的数据传输方法对应的数据传输装置。参见图8,图8为本申请实施例提供的另一种数据传输装置结构图,该装置应用于PCIe板卡设备包括的ctop,PCIe板卡设备还包括cpu核以及dma buffer,其中,dmabuffer包括多个子块,PCIe板卡设备与PCIe主机通过PCIe总线连接,所述装置包括:
分配单元810,用于为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块;
获取单元820,用于针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值;
所述获取单元820还用于,当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
可选地,所述装置还包括:复刻单元(图中未示出),用于根据所述PCIe板卡设备包括的第一数量个cpu核,复刻与所述第一数量个cpu核相等的第二数量个线程,并将复刻的每个线程与一个所述cpu核绑定;
所述获取单元820还用于,当状态寄存器置1时,从地址寄存器中获取所述dmabuffer的基地址;
确定单元(图中未示出),用于针对每个线程,根据所述基地址以及所述cpu核的标识,确定为每个线程分配的对应子块;
初始化单元(图中未示出),用于对每个子块进行初始化处理,并将计数寄存器加1;
配置单元(图中未示出),用于当全部子块完成初始化后,清空所述计数寄存器,并将状态寄存器置0,所述状态寄存器的值用于表示所述PCIe板卡设备初始化完成。
可选地,所述确定单元(图中未示出)具体用于,针对每个线程,根据所述CPU核的标识,对所述基地址进行n*K的偏移操作;
根据执行偏移操作后的基地址以及所述PCIe主机配置的子块大小,确定为所述线程分配的子块,所述子块包括子buffer字段、head地址字段、tail地址字段、错误代码地址字段以及回复地址字段;
其中,n≤N,N为子块的个数,n为整数;K为dma buffer的大小与子块的个数的商。
可选地,所述初始化单元(图中未示出)具体用于,从所述地址寄存器中获取对应子块包括的各地址字段的值;
将获取的子块包括的各地址字段的值对应存储至为线程分配的子块包括的各地址字段内。
可选地,所述装置还包括:更新单元(图中未示出),用于更新所述子块的基地址,所述子块的基地址为所述子块的tail值与所述数据的长度值之和;
存储单元(图中未示出),用于将所述子块包括的回复地址字段中存储的回复值置1,所述回复值用于使所述PCIe主机确定完成当前数据传输。
可选地,所述装置还包括:写入单元(图中未示出),用于当所述PCIe主机从所述PCIe板卡设备处获取数据时,从所述dma buffer的基地址处写入数据。
因此,通过应用本申请提供的一种数据传输装置,PCIe主机与PCIe板卡设备通过PCIe总线连接。PCIe板卡设备还包括cpu核以及dma buffer,dma buffer包括多个子块。该装置为运行在cpu核中的线程分配所述dma buffer包括的一个子块。针对每个子块,该装置获取子块包括的head地址字段中存储的head值以及子块包括的tail地址字段中存储的tail值。当head值不等于tail值时,该装置从子块包括的子buffer字段内获取PCIe主机通过PCIe总线传输的数据,其中,数据的大小为head值与tail值之间的差值。
前述方式中,每次操作只需PCIe主机更新数据,PCIe板卡设备上的程序主动读取dma buffer中的数据,降低双方cpu的调度开销;在共用一个物理dma buffer空间的前提下,将dma buffer逻辑分成N个块并结合多线程技术操作dma buffer的不同位置使得多种类型的数据或读写操作能同时进行且互相不会影响,提高N倍数据传输效率;解决了现有技术中,dma buffer空间配置不够灵活,空间利用率低、数据交换传输速率不够理想等缺点。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
对于数据传输装置实施例而言,由于其涉及的方法内容基本相似于前述的方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (13)
1.一种数据传输方法,其特征在于,所述方法应用于PCIe主机包括的cpu,所述PCIe主机与PCIe板卡设备通过PCIe总线连接,所述方法包括:
获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块;
根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块;
从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址;
从所述dma buffer中,获取所述第一子块包括的tail地址字段中存储的tail值;
当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值;
根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述更新后的head值,存储至所述第一子块包括的head地址字段中;
获取所述第一子块包括的回复地址字段中存储的回复值;
当所述回复值为1时,确定完成当前数据传输。
3.根据权利要求1所述的方法,其特征在于,所述获取分块信号量之前,所述方法还包括:
为所述dma buffer分配基地址,并配置所述dma buffer的大小;
将分配的基地址以及配置的所述dma buffer的大小写入地址寄存器中;
将状态寄存器置1,所述状态寄存器的值用于表示所述PCIe主机初始化完成。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为所述多个子块中的每个子块分配一个锁。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述PCIe主机从所述PCIe板卡设备处获取数据时,从所述dma buffer块的基地址处读取数据。
6.一种数据传输方法,其特征在于,所述方法应用于PCIe板卡设备包括的ctop,所述PCIe板卡设备还包括cpu核以及dma buffer,所述dma buffer包括多个子块,所述PCIe板卡设备与PCIe主机通过PCIe总线连接,所述方法包括:
为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块;
针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值;
当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
7.根据权利要求6所述的方法,其特征在于,所述为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块之前,所述方法还包括:
根据所述PCIe板卡设备包括的第一数量个cpu核,复刻与所述第一数量个cpu核相等的第二数量个线程,并将复刻的每个线程与一个所述cpu核绑定;
当状态寄存器置1时,从地址寄存器中获取所述dma buffer的基地址;
针对每个线程,根据所述基地址以及所述cpu核的标识,确定为每个线程分配的对应子块;
对每个子块进行初始化处理,并将计数寄存器加1;
当全部子块完成初始化后,清空所述计数寄存器,并将状态寄存器置0,所述状态寄存器的值用于表示所述PCIe板卡设备初始化完成。
8.根据权利要求7所述的方法,其特征在于,所述根据所述cpu核的标识,确定为每个线程分配的对应子块,具体包括:
针对每个线程,根据所述CPU核的标识,对所述基地址进行n*K的偏移操作;
根据执行偏移操作后的基地址以及所述PCIe主机配置的子块大小,确定为所述线程分配的子块,所述子块包括子buffer字段、head地址字段、tail地址字段、错误代码地址字段以及回复地址字段;
其中,n≤N,N为子块的个数,n为整数;K为dma buffer的大小与子块的个数的商。
9.根据权利要求8所述的方法,其特征在于,所述对每个子块进行初始化处理,具体包括:
从所述地址寄存器中获取对应子块包括的各地址字段的值;
将获取的子块包括的各地址字段的值对应存储至为线程分配的子块包括的各地址字段内。
10.根据权利要求6所述的方法,其特征在于,所述从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据之后,所述方法还包括:
更新所述子块的基地址,所述子块的基地址为所述子块的tail值与所述数据的长度值之和;
将所述子块包括的回复地址字段中存储的回复值置1,所述回复值用于使所述PCIe主机确定完成当前数据传输。
11.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述PCIe主机从所述PCIe板卡设备处获取数据时,从所述dma buffer的基地址处写入数据。
12.一种数据传输装置,其特征在于,所述装置应用于PCIe主机包括的cpu,所述PCIe主机与PCIe板卡设备通过PCIe总线连接,所述装置包括:
获取单元,用于获取分块信号量,所述分块信号量用于指示所述PCIe板卡设备包括的dma buffer中的子块,所述dma buffer包括多个子块;
确定单元,用于根据所述分块信号量,从所述dma buffer包括的多个子块中,确定第一子块;
所述获取单元还用于,从已定义的全局变量中,获取所述第一子块包括的head地址字段中存储的head值以及所述第一子块的基地址;
所述获取单元还用于,从所述dma buffer中,获取所述第一子块包括的tail地址字段中存储的tail值;
更新单元,用于当所述第一子块的head值等于tail值时,根据待写入数据的长度值,更新所述head值;
写入单元,用于根据所述基地址以及更新后的head值,通过所述PCIe总线,将所述待写入数据写入所述第一子块包括的子buffer字段内。
13.一种数据传输装置,其特征在于,所述装置应用于PCIe板卡设备包括的ctop,所述PCIe板卡设备还包括cpu核以及dma buffer,所述dma buffer包括多个子块,所述PCIe板卡设备与PCIe主机通过PCIe总线连接,所述装置包括:
分配单元,用于为运行在所述cpu核中的线程分配所述dma buffer包括的一个子块;
获取单元,用于针对所述每个子块,获取所述子块包括的head地址字段中存储的head值以及所述子块包括的tail地址字段中存储的tail值;
所述获取单元还用于,当所述head值不等于所述tail值时,从所述子块包括的子buffer字段内获取所述PCIe主机通过PCIe总线传输的数据,所述数据的大小为所述head值与所述tail值之间的差值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010395016.2A CN111666228A (zh) | 2020-05-12 | 2020-05-12 | 数据传输方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010395016.2A CN111666228A (zh) | 2020-05-12 | 2020-05-12 | 数据传输方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111666228A true CN111666228A (zh) | 2020-09-15 |
Family
ID=72383327
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010395016.2A Pending CN111666228A (zh) | 2020-05-12 | 2020-05-12 | 数据传输方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111666228A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860595A (zh) * | 2021-03-12 | 2021-05-28 | 湖南国科微电子股份有限公司 | Pci设备或pcie设备、数据存取方法及相关组件 |
-
2020
- 2020-05-12 CN CN202010395016.2A patent/CN111666228A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860595A (zh) * | 2021-03-12 | 2021-05-28 | 湖南国科微电子股份有限公司 | Pci设备或pcie设备、数据存取方法及相关组件 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5229968B2 (ja) | 複数クラスデータキャッシュポリシー | |
CN107818052B (zh) | 内存访问方法及装置 | |
CA2414438C (en) | System and method for semaphore and atomic operation management in a multiprocessor | |
US7987322B2 (en) | Snoop request management in a data processing system | |
CN112948318B (zh) | 一种Linux操作系统下基于RDMA的数据传输方法及装置 | |
WO2004088462A2 (en) | Hardware assisted firmware task scheduling and management | |
US11748174B2 (en) | Method for arbitration and access to hardware request ring structures in a concurrent environment | |
US8904045B2 (en) | Opportunistic improvement of MMIO request handling based on target reporting of space requirements | |
KR20140082829A (ko) | 다수의 메모리 포트들에 걸친 선택적 복제를 사용하여 메모리 접근 지연들을 감소시키는 시스템 및 방법 | |
JP2007157142A (ja) | 特定のspeを使ってcellプロセッサのアトミックなコンペア・アンド・スワップ命令を実行するための技術 | |
US9208088B2 (en) | Shared virtual memory management apparatus for providing cache-coherence | |
CN103827842A (zh) | 向控制器存储器空间写入消息 | |
CN110119304B (zh) | 一种中断处理方法、装置及服务器 | |
WO2015134103A1 (en) | Method and system for ordering i/o access in a multi-node environment | |
JP2021515318A (ja) | NVMeベースのデータ読み取り方法、装置及びシステム | |
CN112955876A (zh) | 具有对写入操作的改进处理的用于数据处理网络的i/o相干请求节点 | |
JP4130465B2 (ja) | メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術 | |
CN115718711A (zh) | 一种dma数据传输的系统和方法 | |
CN111666228A (zh) | 数据传输方法及装置 | |
US20140297957A1 (en) | Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus | |
CN106164874B (zh) | 多核系统中数据访问者目录的访问方法及设备 | |
CN104408069A (zh) | 一种基于布隆过滤器思想的一致性目录设计方法 | |
WO2004088461A2 (en) | Local emulation of data ram utilizing write-through cache hardware within a cpu module | |
JP2010244327A (ja) | キャッシュシステム | |
US6757793B1 (en) | Reducing probe traffic in multiprocessor systems using a victim record table |
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 |