本发明涉及通信技术领域,特别是涉及到一种基于多DMA队列的数据传输方法和装置。
背景技术:
传统的虚拟化技术,是通过软件模拟共享和虚拟化网络适配器的一个物理端口,以满足虚拟机的输入/输出(I/O)需求。模拟软件的多个层为虚拟机作了I/O决策,因此导致环境中出现瓶颈并影响I/O性能,从而影响到一台物理服务器上运行的虚拟机数量以均衡系统的I/O性能。随着虚拟化技术的发展,虚拟机和容器技术希望能直接操作直接内存访问(Direct Memory Access,DMA)队列来提高系统性能,减少时延。特别是容器技术出现以后,一台物理服务器上跑的并发的应用更多,希望硬件支持更多的DMA队列。
在基于多DMA队列进行数据传输时,每个DMA队列均参与数据传输和调度,即DMA队列接收到数据后,向服务质量(QOS)发送数据传输请求,QOS通过对各个DMA队列进行调度来控制数据传输。虽然这些DMA队列同时工作的时候,每个DMA队列需要支持的吞吐量很小,但同时为了满足传统的应用场景,硬件DMA队列设计仍然必须支持线速,这就造成硬件逻辑资源的大量消耗。
比如在40G网卡的应用中,设计要求支持4000个DMA队列,每个DMA队列按照40G线速来设计,那么一个DMA队列的传输带宽可以在1M~40G间配置,这个跨度带来的硬件资源消耗包括:每个DMA队列的硬件缓存需要按照40G配置,消耗的缓存与吞吐量成正比。而在对DMA队列做限定速率的时候,速度计量器和比较器也需要按照40G来设计。除了硬件资源消耗以外,由于要考虑1M和40G的DMA队列同时存在的不平衡性,设计上和验证上都会有相当的复杂性。在上述40G网卡的示例中,支持4000个DMA队列所占用的硬件资源是相当巨大的,从而极大的增大了芯片的面积和功耗。
技术实现要素:
本发明的主要目的为提供一种基于多DMA队列的数据传输方法和装置,旨在解决基于多DMA队列进行数据传输时对硬件资源消耗大的技术问题。
为达以上目的,本发明提出一种基于多DMA队列的数据传输方法,所述方法包括以下步骤:
配置一级DMA队列和二级DMA队列,为所述一级DMA队列分配至少一个二级DMA队列;
通过所述一级DMA队列获取数据,将所述数据分配给所述一级DMA队列对应的二级DMA队列;
通过对所述二级DMA队列进行调度来控制数据传输。
进一步地,所述通过对所述二级DMA队列进行调度来控制数据传输的步骤包括:
根据调度策略选择二级DMA队列,执行选中的二级DMA队列的数据传输请求;
判断所述二级DMA队列的传输速率是否超过了限定速率,若是,则挂起所述二级DMA队列。
进一步地,所述将所述数据分配给所述一级DMA队列对应的二级DMA队列的步骤包括:
当一个数据包括至少两个部分时,将所述数据的各个部分分配给所述一级DMA队列对应的同一个DMA队列。
进一步地,所述将所述数据分配给所述一级DMA队列对应的二级DMA队列的步骤包括:
当一个数据包括至少两个部分时,将所述数据的各个部分分别分配给所述一级DMA队列对应的至少两个二级DMA队列,并为所述数据的各个部分设置所属二级DMA队列之间的关联关系。
进一步地,所述方法还包括:
当选中的二级DMA队列的数据传输请求执行完毕后,判断本次传输的数据块是否为一个完整的数据;
若不是一个完整的数据,则进一步判断本次传输的数据块是否是同一个数据的最后一部分;
若不是同一个数据的最后一部分,则自动将本次传输的数据块所关联的二级DMA队列作为下一轮调度的选择结果。
本发明同时提出一种基于多DMA队列的数据传输装置,所述装置包括:
队列配置模块,用于配置一级DMA队列和二级DMA队列,为所述一级DMA队列分配至少一个二级DMA队列;
数据分配模块,用于通过所述一级DMA队列获取数据,将所述数据分配给所述一级DMA队列对应的二级DMA队列;
队列调度模块,用于通过对所述二级DMA队列进行调度来控制数据传输。
进一步地,所述队列调度模块用于:
根据调度策略选择二级DMA队列,执行选中的二级DMA队列的数据传输请求;判断所述二级DMA队列的传输速率是否超过了限定速率,若是,则挂起所述二级DMA队列。
进一步地,所述数据分配模块用于:
当一个数据包括至少两个部分时,将所述数据的各个部分分配给所述一级DMA队列对应的同一个DMA队列。
进一步地,所述数据分配模块用于:
当一个数据包括至少两个部分时,将所述数据的各个部分分别分配给所述一级DMA队列对应的至少两个二级DMA队列,并为所述数据的各个部分设置所属二级DMA队列之间的关联关系。
进一步地,所述队列调度模块还用于:
当选中的二级DMA队列的数据传输请求执行完毕后,判断本次传输的数据块是否为一个完整的数据;若不是一个完整的数据,则进一步判断本次传输的数据块是否是同一个数据的最后一部分;若不是同一个数据的最后一部分,则自动将本次传输的数据块包关联的二级DMA队列作为下一轮调度的选择结果。
本发明实施例所提供的一种基于多DMA队列的数据传输方法,通过将DMA队列配置为一级DMA队列和二级DMA队列,一级DMA队列接收数据并分配给二级DMA队列,二级DMA队列参与后续的数据传输和调度,由于二级DMA队列的数据来自于一级DMA队列的分配,而同一个一级DMA队列下可以有多个二级DMA队列,因此每个二级DMA队列只需要支持很小的速率,大大减小了每个二级DMA队列的缓存,从而减小了对硬件资源的消耗,有效节省了芯片的面积和功耗。同时,使得增加DMA队列的代价变得可控,可以以较低的成本实现更多的DMA队列,对虚拟化应用提供了更大的灵活性,并使得硬件能够更好的支持更细粒度的虚拟化。
附图说明
图1是本发明第一实施例的基于多DMA队列的数据传输方法的流程图;
图2是本发明实施例中DMA队列的结构示意图;
图3是本发明实施例中二级DMA队列的状态转换示意图;
图4是本发明实施例中一级DMA队列向二级DMA队列分配数据的示意图;
图5是本发明实施例中一级DMA队列向二级DMA队列分配数据的另一示意图;
图6是本发明第二实施例的基于多DMA队列的数据传输方法的流程图;
图7是本发明第三实施例的基于多DMA队列的数据传输装置的模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
实施例一
参照图1,提出本发明第一实施例的基于多DMA队列的数据传输方法,所述方法包括以下步骤:
S11、配置一级DMA队列和二级DMA队列,为一级DMA队列分配至少一个二级DMA队列。
本发明实施例中,将传统的DMA队列拆分成两级DMA队列,分别为一级DMA队列和二级DMA队列,可选地,可以将一级DMA队列称为客户队列,将二级DMA队列称为调度队列。
一级DMA队列提供给用户传统的DMA队列操作界面,比如在40G网卡的示例中,每个一级DMA队列依旧可以被配置成1M~40G之间的任意速率。一级DMA队列的数量可以根据需要配置,如配置两个、三个或多个一级DMA队列,如图2所示,示例性的配置了三个一级DMA队列,分别为CQ0、CQ1和CQ2。
二级DMA队列是真正在数据通路上参与数据传输和调度的队列,是在数据通路上参与操作和仲裁的逻辑单元。换句话说,二级DMA队列参与服务仲裁,仲裁结果决定选中哪个二级DMA队列中的数据被执行。为每个二级DMA队列设置限制速率,各个二级DMA队列的限制速率可以相同也可以不同。二级DMA队列的数量可以和一级DMA队列的数目一样多,或者更多,如图2所示,示例性的配置了六个二级DMA队列,分别为SQ0、SQ1、SQ2、SQ3、SQ4和SQ5。每个一级队列需要支持的最高速率=超额配置速率/二级DMA队列的数量,超额配置速率一般会高于线速,但是不会高太多,仍然以40G网卡作为示例,如果设定超额配置速率为80G(2倍线速),二级DMA队列的数量为4000,那么每个二级DMA队列只需要支持1M~20M的速率,因此每个二级DMA队列需要的缓存就很少,而且各二级DMA队列之间也更均衡。
可以通过建立一级DMA队列和二级DMA队列的映射关系来为每一个一级DMA队列分配二级DMA队列,其中,一级DMA队列和二级DMA队列的映射关系可以由软件来指定或者由硬件通过算法来指定。映射到同一一级DMA队列的二级DMA队列的队列序号可以是连续的或者是不连续的,比如二级DMA队列队列1、2、3映射到一级DMA队列1是连续的,而把二级DMA队列1、3、5映射到一级DMA队列1则是不连续的,连续的队列序号映射到同一客户队列可以节省队列映射的逻辑。如图2所示,可以将二级DMA队列SQ0分配给一级DMA队列CQ0,将二级DMA队列SQ1,SQ2,SQ3分配给一级DMA队列CQ1将二级DMA队列SQ4和SQ5配给一级DMA队列CQ2。
映射在同一个一级DMA队列上的所有二级DMA队列的信用值(credit)和速率合在一起等于该一级DMA队列的信用值和速率设定。信用值用于带权重的优先级仲裁或者轮询仲裁,映射在同一个一级DMA队列上的不同二级DMA队列的信用值和速率值(限定速率)可以不一样。
如图3所示,二级DMA队列至少有休眠、激活和挂起三种状态。二级DMA队列被分配给一级DMA队列后(如在映射到一级DMA队列后),则从休眠状态进入激活状态;当二级DMA队列发送数据的传输速率超过其限定速率时,二级DMA队列则从激活状态进入挂起状态;在挂起状态下,当满足解除挂起状态的条件时(如挂起持续预设时间,挂起计时器计时结束时),二级DMA队列又从挂起状态返回激活状态;二级DMA队列在激活和挂起两个状态之间来回转换,直到与一级DMA队列的映射关系被取消时,重新回到休眠状态。
S12、通过一级DMA队列获取数据,将数据分配给该一级DMA队列对应的二级DMA队列。
本步骤S12中,一级DMA队列接收数据,然后将接收到的数据按照预设的分配策略分配给其对应的二级DMA队列,可选地,一级DMA队列可以根据负载均衡原则进行数据分配,如将接收到的数据按顺序分配给各个二级DMA队列。如图2所示,一级DMA队列CQ1接收到D0-D5共六个数据,其中,将数据D0和D3分配给二级DMA队列SQ1,将数据D1和D4分配给二级DMA队列SQ2,将数据D2和D5分配给二级DMA队列SQ3。
当一个数据包括至少两个部分时,一级DMA队列可以采用以下两种分配策略进行数据分配:
其一,一级DMA队列将数据的各个部分分配给其对应的同一个DMA队列。例如,如图4所示,一级DMA队列CQ1将一个由D1(1)-D1(3)三部分组成的数据打包后全部分配给二级DMA队列SQ2。
其二,一级DMA队列将数据的各个部分分别分配给一级DMA队列对应的至少两个二级DMA队列,并为该数据的各个部分设置所属二级DMA队列之间的关联关系,这种分配策略的优点是可以使各个二级DMA队列的负荷更均衡,而且可以节省数据缓存。例如,如图5所示,一级DMA队列CQ1将一个由D1(1)-D1(3)三部分组成的数据分别分配给三个二级DMA队列,其中,D(1)分配给二级DMA队列SQ2,D1(2)分配给二级DMA队列SQ3,D1(3)分配给二级DMA队列SQ1,并且将D1(1)链接到D1(2)所属的二级DMA队列SQ3,将D1(2)链接到D1(3)所属的二级DMA队列SQ1,以保证同一个数据能连续地发出。将同一个数据的不同部分按顺序分配到不同的二级DMA队列可以节省缓存数据的空间。
本发明实施例中,传输的数据主要是数据报,当然,也可以传输其它的数据。数据报存储于物理内存中时,以数据块的形式存在,在传输数据报时,只需要传输数据报所对应的数据块的描述符(或称控制符)即可,该描述符指示了数据报在物理内存中的存放位置,也就是说,放入一级DMA队列和二级DMA队列的数据是数据报的描述符。
通常的,每一个数据块中存放一个数据报的内容,一个指示符指示一个完整的数据报,一级DMA队列接收各个数据报的描述符,并将各个数据报的描述符分配给对应的二级DMA队列。
但在某些情况下,一个数据报在物理内存里的存储位置可能是离散的,一个数据报由至少两个数据块组成,因此需要至少两个描述符才能表述一个完整的数据报。此时,一级DMA队列可以将同一数据报的不同描述符打包后分配给其对应的同一个二级DMA队列,也可以将同一数据报的不同描述符分别分配给其对应的不同的二级DMA队列,将同一个数据报的不同描述符按顺序分配到不同的二级DMA队列可以节省缓存描述符的空间。通过建立链接关系来同步同一个数据报的不同描述符。一级DMA队列把描述符分配到二级DMA队列的分配方式可以随应用不同而不同。
S13、通过对二级DMA队列进行调度来控制数据传输。
本发明实施例中,由二级DMA队列参与数据传输和调度。具体的,处于激活状态的各个二级DMA队列向队列调度模块(如QOS)发送数据传输请求,队列调度模块根据调度策略选择二级DMA队列,执行选中的二级DMA队列的数据传输请求;当该二级DMA队列的数据传输请求执行完毕后,队列调度模块判断该二级DMA队列的传输速率是否超过了限定速率,若是,则挂起该二级DMA队列,若否,则继续保持该二级DMA队列处于激活状态。处于挂起状态的二级DMA队列不再请求数据传输,直到满足解除挂起状态的条件时(如挂起持续预设时间,挂起计时器计时结束时),二级DMA队列才从挂起状态返回激活状态。
本发明实施例所述的调度策略可以采用现有技术的调度策略,在此不赘述。
进一步地,为了保证被分配给不同的二级DMA队列的同一数据能被完整连续的传输,当选中的二级DMA队列的数据传输请求执行完毕后,队列调度模块还判断本次传输的数据块是否为一个完整的数据;若不是一个完整的数据,则进一步判断本次传输的数据块是否是同一个数据的最后一部分;若不是同一个数据的最后一部分,则自动将本次传输的数据块所关联的二级DMA队列作为下一轮调度的选择结果。
举例而言,当传输的数据为数据报的描述符时,当选中的二级DMA队列的数据传输请求执行完毕后,队列调度模块判断本次传输的描述符是否指示了一个完整的数据报;若否,则进一步判断本次传输的描述符是否指示同一个数据报的最后一部分;若否,则自动将本次传输的描述符所关联的二级DMA队列作为下一轮调度的选择结果。
例如,在图5中,当选中二级DMA队列SQ2传输D1(1)后,下一轮调度时则自动选中二级DMA队列SQ3传输D1(2),再下一轮调度时则自动选中二级DMA队列SQ1传输D1(3)。
本发明实施例的基于多DMA队列的数据传输方法,通过将DMA队列配置为一级DMA队列和二级DMA队列,一级DMA队列接收数据并分配给二级DMA队列,二级DMA队列参与后续的数据传输和调度,由于二级DMA队列的数据来自于一级DMA队列的分配,而同一个一级DMA队列下可以有多个二级DMA队列,因此每个二级DMA队列只需要支持很小的速率,大大减小了每个二级DMA队列的缓存,从而减小了对硬件资源的消耗,有效节省了芯片的面积和功耗。同时,使得增加DMA队列的代价变得可控,可以以较低的成本实现更多的DMA队列,对虚拟化应用提供了更大的灵活性,并使得硬件能够更好的支持更细粒度的虚拟化。
实施例二
参照图6,提出本发明第二实施例的基于多DMA队列的数据传输方法,本实施例以传输数据报为例,包括以下步骤:
S21、一级DMA队列接收数据报的描述符。
S22、一级DMA队列将描述符分配到激活的二级DMA队列。
其中,一个一级DMA队列至少分配了一个二级DMA队列,各一级DMA队列将各自接收到的描述符分配给其对应的二级DMA队列。当同一数据报由多个描述符指示时,一级DMA队列可以将同一数据报的不同描述符打包后分配给其对应的同一个二级DMA队列,也可以将同一数据报的不同描述符分别分配给其对应的不同的二级DMA队列。
二级DMA队列参与后续的调度,换句话说,二级DMA队列参与队列调度模块的服务仲裁,仲裁结果决定选中哪个二级DMA队列中的描述符被执行。
S23、队列调度模块根据调度策略选择二级DMA队列,执行选中的二级DMA队列的数据传输请求。传输一次二级DMA队列请求传输的数据报的描述符。
S24、队列调度模块判断选中的二级DMA队列的传输速率是否超过限定速率。当超过限定速率时,执行步骤S25;当没有超过限定速率时,直接跳到步骤S26。
S25、队列调度模块挂起选中的二级DMA队列。然后执行步骤S26。
处于挂起状态的二级DMA队列不再请求数据传输,直到满足解除挂起状态的条件时(如挂起持续预设时间,挂起计时器计时结束时),二级DMA队列才从挂起状态返回激活状态。
S26、队列调度模块判断本次传输的描述符是否指示了一个完整的数据报。若是,则返回步骤S23,进行下一轮调度;若否,则执行步骤S27。
S27、队列调度模块判断本次传输的描述符是否指示同一个数据报的最后一部分。若是则返回步骤S23,进行下一轮调度;若否,则执行步骤S28。
S28、队列调度模块自动将本次传输的描述符所关联的二级DMA队列作为下一轮调度的选择结果,并返回步骤S23,进行下一轮调度。
采用本发明实施例的基于多DMA队列的数据传输方法,每个二级DMA队列只需要支持很小的速率,大大减小了每个二级DMA队列的缓存,从而减小了对硬件资源的消耗,有效节省了芯片的面积和功耗。同时,使得增加DMA队列的代价变得可控,可以以较低的成本实现更多的DMA队列,对虚拟化应用提供了更大的灵活性,并使得硬件能够更好的支持更细粒度的虚拟化。
实施例三
参照图7,提出本发明第三实施例的基于多DMA队列的数据传输装置,所述装置包括队列配置模块、数据分配模块和队列调度模块,其中:
队列配置模块:用于配置一级DMA队列和二级DMA队列,为一级DMA队列分配至少一个二级DMA队列。
一级DMA队列提供给用户传统的DMA队列操作界面,二级DMA队列是真正在数据通路上参与数据传输和队列调度模块的调度的队列。队列配置模块为每个二级DMA队列设置了限制速率,各个二级DMA队列的限制速率可以相同也可以不同。
队列配置模块可以通过建立一级DMA队列和二级DMA队列的映射关系来为每一个一级DMA队列分配二级DMA队列。如图2所示,队列配置模块可以将二级DMA队列SQ0分配给一级DMA队列CQ0,将二级DMA队列SQ1,SQ2,SQ3分配给一级DMA队列CQ1将二级DMA队列SQ4和SQ5配给一级DMA队列CQ2。
数据分配模块:用于通过一级DMA队列获取数据,将数据分配给一级DMA队列对应的二级DMA队列。
具体的,数据分配模块通过一级DMA队列接收数据,然后将接收到的数据按照预设的分配策略分配给其对应的二级DMA队列,可选地,一级DMA队列可以根据负载均衡原则进行数据分配,如将接收到的数据按顺序分配给各个二级DMA队列。如图2所示,一级DMA队列CQ1接收到D0-D5共六个数据,其中,将数据D0和D3分配给二级DMA队列SQ1,将数据D1和D4分配给二级DMA队列SQ2,将数据D2和D5分配给二级DMA队列SQ3。
当一个数据包括至少两个部分时,一级DMA队列可以采用以下两种分配策略进行数据分配:
其一,一级DMA队列将数据的各个部分分配给其对应的同一个DMA队列。例如,如图4所示,一级DMA队列CQ1将一个由D1(1)-D1(3)三部分组成的数据打包后全部分配给二级DMA队列SQ2。
其二,一级DMA队列将数据的各个部分分别分配给一级DMA队列对应的至少两个二级DMA队列,并为该数据的各个部分设置所属二级DMA队列之间的关联关系,这种分配策略的优点是可以使各个二级DMA队列的负荷更均衡,而且可以节省数据缓存。例如,如图5所示,一级DMA队列CQ1将一个由D1(1)-D1(3)三部分组成的数据分别分配给三个二级DMA队列,其中,D(1)分配给二级DMA队列SQ2,D1(2)分配给二级DMA队列SQ3,D1(3)分配给二级DMA队列SQ1,并且将D1(1)链接到D1(2)所属的二级DMA队列SQ3,将D1(2)链接到D1(3)所属的二级DMA队列SQ1,以保证同一个数据能连续地发出。
本发明实施例中,传输的数据主要是数据报,当然,也可以传输其它的数据。数据报存储于物理内存中时,以数据块的形式存在,在传输数据报时,只需要传输数据报所对应的数据块的描述符(或称控制符)即可,该描述符指示了数据报在物理内存中的存放位置,也就是说,放入一级DMA队列和二级DMA队列的数据是数据报的描述符。
通常的,每一个数据块中存放一个数据报的内容,如图6所示,数据块0-5中分别存放了数据报0-5的内容。一级DMA队列接收各个数据报的描述符,并将各个数据报的描述符分配给对应的二级DMA队列。
但在某些情况下,一个数据报在物理内存里的存储位置可能是离散的,一个数据报由至少两个数据块组成,因此需要至少两个描述符才能表述,如图7所示,数据块(1)-(3)组成一个数据报D1。此时,一级DMA队列可以将同一数据报的不同描述符打包后分配给其对应的同一个二级DMA队列,也可以将同一数据报的不同描述符分别分配给其对应的不同的二级DMA队列。
队列调度模块:用于通过对二级DMA队列进行调度来控制数据传输。
具体的,队列调度模块根据调度策略选择二级DMA队列,执行选中的二级DMA队列的数据传输请求;当该二级DMA队列的数据传输请求执行完毕后,队列调度模块判断该二级DMA队列的传输速率是否超过了限定速率,若是,则挂起该二级DMA队列,若否,则继续保持该二级DMA队列处于激活状态。处于挂起状态的二级DMA队列不再请求数据传输,直到满足解除挂起状态的条件时(如挂起持续预设时间,挂起计时器计时结束时),二级DMA队列才从挂起状态返回激活状态。
本发明实施例所述的调度策略可以采用现有技术的调度策略,在此不赘述。
进一步地,为了保证被分配给不同的二级DMA队列的同一数据能被完整连续的传输,当选中的二级DMA队列的数据传输请求执行完毕后,队列调度模块还判断本次传输的数据块是否为一个完整的数据;若不是一个完整的数据,则进一步判断本次传输的数据块是否是同一个数据的最后一部分;若不是同一个数据的最后一部分,则自动将本次传输的数据块所关联的二级DMA队列作为下一轮调度的选择结果。
举例而言,当传输的数据为数据报的描述符时,当选中的二级DMA队列的数据传输请求执行完毕后,队列调度模块判断本次传输的描述符是否指示了一个完整的数据报;若否,则进一步判断本次传输的描述符是否指示同一个数据报的最后一部分;若否,则自动将本次传输的描述符所关联的二级DMA队列作为下一轮调度的选择结果。
例如,在图5中,当选中二级DMA队列SQ2传输D1(1)后,下一轮调度时则自动选中二级DMA队列SQ3传输D1(2),再下一轮调度时则自动选中二级DMA队列SQ1传输D1(3)。
本发明实施例的基于多DMA队列的数据传输装置,通过将DMA队列配置为一级DMA队列和二级DMA队列,一级DMA队列接收数据并分配给二级DMA队列,二级DMA队列参与后续的数据传输和调度,由于二级DMA队列的数据来自于一级DMA队列的分配,而同一个一级DMA队列下可以有多个二级DMA队列,因此每个二级DMA队列只需要支持很小的速率,大大减小了每个二级DMA队列的缓存,从而减小了对硬件资源的消耗,有效节省了芯片的面积和功耗。同时,使得增加DMA队列的代价变得可控,可以以较低的成本实现更多的DMA队列,对虚拟化应用提供了更大的灵活性,并使得硬件能够更好的支持更细粒度的虚拟化。
需要说明的是:上述实施例提供的基于多DMA队列的数据传输装置与基于多DMA队列的数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,且方法实施例中的技术特征在装置实施例中均对应适用,这里不再赘述。
本发明实施例的基于多DMA队列的数据传输方法和装置,主要应用于PCIE设备,当然也可以应用于其它设备。
本领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存储器)、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。