CN101149714A - 用于执行直接存储器存取的方法和系统 - Google Patents
用于执行直接存储器存取的方法和系统 Download PDFInfo
- Publication number
- CN101149714A CN101149714A CNA2007101528170A CN200710152817A CN101149714A CN 101149714 A CN101149714 A CN 101149714A CN A2007101528170 A CNA2007101528170 A CN A2007101528170A CN 200710152817 A CN200710152817 A CN 200710152817A CN 101149714 A CN101149714 A CN 101149714A
- Authority
- CN
- China
- Prior art keywords
- dma
- bus
- engine
- memory access
- direct memory
- 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.)
- Granted
Links
Images
Classifications
-
- 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/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Abstract
提供一种构造为松散地耦合的直接存储器存取引擎(DE)和总线引擎(BE)的直接存储器存取(DMA)设备。DE将编程的数据块分拆成单独的事务,解释分散/聚集(scatter/gather)描述符,以及在通道间判优。DE和BE使用能够在该DE和BE之间排队的组合的读写(RW)命令。总线引擎(BE)具有两个读队列和一个写队列。第一读队列用于“新的读”以及第二读队列用于“旧的读”,旧的读是已经在总线上重试过至少一次的读。BE将绝对优先级给新的读,并且仍避免死锁状况。
Description
技术领域
本申请一般涉及改进的数据处理系统和方法。更具体地,本申请针对一种支持高等待时间设备的直接存储器存取控制器。
背景技术
许多在片系统(system-on-a-chip,SOC)设计包含叫做直接存储器存取(DMA)控制器的设备。DMA的目的是有效地将数据块从存储器中的一个位置移动到另一个位置。DMA控制器通常用来在系统存储器和输入/输出(I/O)设备之间移动数据,但是也用来在系统存储器中一个区域和另一个区域之间移动数据。因为在移动数据时不涉及处理器,所以DMA控制器被叫做“直接”。
没有DMA控制器,可以通过使处理器在软件控制下将数据逐片地从一个存储器空间复制到另一个存储器空间来移动数据块。这对大块数据通常不可取。使处理器逐片地复制大块数据块是缓慢的,因为处理器不具有大存储缓冲器以及必须以小的、低效率的大小(诸如每次32位)移动数据。同样,当该处理器进行复制时,其没空进行其他工作。因此,占用该处理器直到移动完成。卸载这些数据块移动到DMA控制器则好很多,DMA控制器能够更快地完成它们以及并行地完成其他工作。
DMA控制器通常具有多个“通道(channel)”。因此,可以编程该DMA控制器来在不同的通道上同时地执行几个块移动,允许该DMA设备同时向或从几个I/O设备传送数据。
DMA控制器典型的另一个特征是“分散/聚集”特征。当执行分散/聚集操作时,无须对于每个块由处理器对DMA控制器编程。相反地,处理器依靠该分散/聚集结构在存储器中设置“描述符表”或“描述符链接列表”。每个描述符描述数据块移动,包括源地址、目的地址和要传送的字节数目。经由该DMA寄存器直接地编程的非分散/聚集块移动被称为“单独编程”的DMA块移动。
与表结构相比,链接列表结构是灵活和动态的。在链接列表结构中,处理器指示DMA通道中的一个给链中的第一描述符,并且在链接列表中的每个描述符包含到存储器中下一个描述符的指针。描述符可以在存储器的任何地方,以及当传送发生时处理器可以动态地将其加入列表。DMA控制器自动地遍历所述表或列表并且执行由每个描述符描述的数据块移动直到达到该表或列表的结尾。
如果期望高的总线利用则高等待时间设备呈现独特挑战。如果总线在大部分时间传输数据而没有间隙或停止,则每个总线具有能够实现的最大维持带宽。当与高等待时间设备对话时,必须存在足够的未完成的同时事务,从而从高等待时间设备接收数据花费的时间小于或等于从所有其他的排在它前面的未完成的事务传送数据花费的时间量。如果满足该准则,则在总线上将很少有间隙或停止,其中DMA在总线上等待数据并且不具有任何其他可以传输的数据。
许多总线和互连不能在每个主机(master)中处理16或更多未完成的读事务,但是大部分总线确实具有简单“重试”机制。重试是由目标给出的响应,其告诉主机在稍后时间重复相同事务,因为目标在那时无法完成该事务。
“延迟读取”是高等待时间目标用于通过当高等待时间目标获取高等待时间数据时不停止总线来提高总线利用的方法。目标典型地具有下述选项:将等待状态插入事务中以延迟该事务的完成直到其能够返回数据。等待状态对高等待时间目标非常低效,因为这种目标必须每个事务插入许多等待状态,并且当总线在等待状态时,不能运行其他从任何主机到任何目标的事务。总线被停止。延迟读取避免了由于高等待时间读取而停止总线。
延迟读取工作如下。当高等待时间目标接收新的读取请求时,其将重试该请求并且同时排队事务以及开始处理它。重试马上释放总线并且允许总线判优器来允许运行来自相同或不同的主机的下一事务。当目标已经排队读取时,该读取变为挂起。如果主机在目标有可以返回的数据前回到重复的事务,则目标再次重试该事务并且读取依然挂起。
当主机回到重复的事务并且目标确实具有排队并准备返回的所请求的数据时,目标接受事务并且马上返回该数据。延迟的读取允许目标对与其设计用于同时处理的事务一样多的事务进行排队,而不管总线支持多少未完成的事务。总线不具有在目标内有多少事务被排队的任何知识。因此,延迟的读取是在任何给定的总线上排队众多同时事务的好方法。
发明内容
说明性实施例认识到现有技术的缺点,并且提供一种构造为松散地耦合的直接存储器存取引擎和总线引擎的直接存储器存取设备。该直接存储器存取引擎将编程的数据块移动分拆成单独的事务,解释分散/聚集描述符,以及在通道间判优。总线引擎理解直接存储器存取设备所附属的总线的总线协议,并且运行由直接存储器存取引擎送出的所有事务。直接存储器存取引擎和总线引擎通过使用能够在直接存储器存取引擎和总线引擎之间排队的已组合的读写(RW)命令使得处理更有效。总线引擎具有两个读队列和一个写队列。第一读队列用于“新的读取”以及第二读队列用于“旧的读取”,旧的读取是已经在总线上重试过至少一次的读取。总线引擎将最高优先级给新的读取,因为它们是高等待时间。这种机制提供来给予新的读取绝对优先级,并且仍避免死锁状况的方法。
在一个说明性实施例中,提供一种用于在直接存储器存取设备中执行直接存储器存取块移动的方法。该方法包括:在直接存储器存取设备中的直接存储器存取引擎处接收直接存储器存取块移动请求,其中该直接存储器存取块移动请求指示源和目标。该方法进一步包括:在直接存储器存取设备中从直接存储器存取引擎向总线引擎发出关于直接存储器存取块移动请求的一个或多个读写命令。该方法进一步包括:由总线引擎对于一个或多个读写命令的每个执行从源读取数据的读取操作和将数据写入目标的写操作,以满足直接存储器存取块移动请求。
在一个示范性实施例中,在一个或多个读写命令中的每个读写命令包括源地址、目的地址和字节计数。在另一个示范性实施例中,该字节计数对应于总线引擎的缓冲器大小。
在另一个示范性实施例中,该方法包括:响应于在总线引擎处接收给定的读写命令,如果在该总线引擎中的缓冲器空间没有满,则向直接存储器存取引擎返回确认应答。在再一个示范性实施例中,该方法进一步包括:响应于在总线引擎处接收给定的读写命令,如果在该总线引擎中的缓冲器空间已满,则保留对该直接存储器存取引擎的确认应答,以及响应于在总线引擎中缓冲器空间变为可用,返回确认应答到直接存储器存取引擎。直接存储器存取引擎不发出后续的读写命令,直到在直接存储器存取引擎处接收确认应答。
在再一个示范性实施例中,执行读操作和写操作包括将与给定读写命令相关联的读事务置于该总线引擎中的新的读队列中。在再一个示范性实施例中,执行读操作和写操作进一步包括:从新的读队列运行读事务,确定该读事务是否是重试,以及如果该读事务不是重试,则将与该读写命令相关联的写事务置于总线引擎中的写队列中。在再一个示范性实施例中,执行读操作和写操作进一步包括:如果该读事务是被重试,则将该读事务置于旧的读队列中。
在再一个说明性实施例中,数据处理系统包括:总线、多个耦合到总线的总线单元设备、耦合到总线的直接存储器存取设备、和处理单元。所述直接存储器存取设备包括直接存储器存取引擎和总线引擎。所述处理单元有接入到总线的通路。直接存储器存取引擎从处理单元中接收直接存储器存取块移动请求。直接存储器存取块移动请求指示在多个总线单元设备中的源设备和目标设备。直接存储器存取引擎向该总线引擎发出一个或多个用于直接存储器存取块移动请求的读写命令。总线引擎对于一个或多个读写命令的每个执行从源设备读取数据的读取操作和将数据写入目标设备的写入操作,以满足直接存储器存取块移动请求。
在再一个示范性实施例中,数据处理系统执行以上概述关于在该说明性实施例的方法的各种操作。
在再一个说明性实施例中,南桥包括:总线和耦合到总线的直接存储器存取设备。该直接存储器存取设备包括直接存储器存取引擎和总线引擎。处理单元有接入到该总线的通路。直接存储器存取引擎从处理单元中接收直接存储器存取块移动请求。直接存储器存取决移动请求指示连接到总线的源设备和目标设备。直接存储器存取引擎向该总线引擎发出一个或多个关于直接存储器存取块移动请求的读写命令。总线引擎对于一个或多个读写命令的每个执行从该源设备读取数据的读取操作和将数据写入目标设备的写入操作,以满足直接存储器存取块移动请求。
在再一个示范性实施例中,该南桥执行以上概述关于在该说明性实施例的方法的各种操作。
本发明的这些和其他特征、优点将在以下本发明的示范性实施例的具体说明中描述,或将由于以下本发明的示范性实施例的具体说明而对本领域的技术人员而言变得显然。
附图说明
通过在结合附图阅读时参考说明性实施例的以下详细描述,本发明以及其优选使用模式,另外的目的和优点将能够很好地理解,其中;
图1是数据处理系统的示例方框图,在其中可以实现说明性实施例的各方面;
图2是是示例数据处理系统的方框图,在其中可以实现说明性实施例的各方面;
图3是说明依照说明性实施例的南桥的方框图;
图4说明了依照说明性实施例的整个总线引擎队列结构;
图5说明了依照说明性实施例的、对于总线引擎中的队列的队列间排序;
图6是说明依照说明性实施例的、直接存储器存取引擎发出读写命令的操作的流程图;以及
图7A和7B是说明依照说明性实施例的、在直接存储器存取设备中总线引擎的操作的流程图。
具体实施方式
现在参考附图并且特别是参考图1-2,提供在其中可实现本发明的说明性实施例的数据处理环境的示范性图。应当了解图1-2仅是示范并且无意声明或暗示关于在其中可实现本发明的实施例或各方面的环境的任何限制。在不背离本发明的精神和范围的情况下,可以对描述的环境做出许多修改。
图1是数据处理系统的示例方框图,在其中可以实现说明性实施例的各方面。如图1所示的示范性数据处理系统是小区宽带引擎(CBE)数据处理系统的例子。虽然将在本发明的优选实施例的说明中使用该CBE,但本发明并不限制于此,本领域的技术人员一阅读如下说明就将很容易明白这点。
如图1所示,CBE100包括具有处理器(PPU)116及其L1和L2高速缓存112和114的电源处理器部件(PPE)110,和多个协同处理器部件(SPE)120-134,其中每个具有它自己的协同处理器单元(SPU)140-154、存储器流控制155-162、局部存储器或贮存器(store)(LS)163-170、以及总线接口单元(BIU单元)180-194(其可以是,例如组合的直接存储器存取(DMA)、存储器管理单元(MMU)、和总线接口单元)。也提供高带宽内部器件互连总线(EIB)196、总线接口控制器(BIC)197和存储器接口控制器(MIC)198。
局部存储器或局部贮存器(LS)163-170是大存储器映射表(map)的非连贯的可寻址的部分,其物理上可以作为耦合到SPU 140-154的小存储器来提供。局部贮存器163-170可以被映射到不同的地址空间。这些地址区域是连续的而不混淆配置的。局部贮存器163-170通过其地址位置与其相对应的SPU140-154以及SPE 120-134关联,诸如经由下文非常详细地描述的SPU识别寄存器。只要局部贮存器没有置于操作的安全模式,系统中的任何资源都具有从/向局部贮存器163-170读写的能力,在安全模式下仅其关联的SPU可以存取局部贮存器163-170或存取局部贮存器163-170的指定的安全部分。
CBE100可以是在片系统,从而在图1中图示的每个器件可在单个微处理芯片上提供。此外,CBE 100是异构处理环境,在其中每个SPU可以从系统中的每个其他SPU接收不同的指令。此外,用于SPU的指令集不同于PPU的指令集,例如,PPU可以执行基于精简指令集计算机(RISC)的指令而SPU执行矢量化的指令。
SPE120-134相互耦合并且经由EIB196耦合到L2高速缓存114。此外,SPE120-134经由EIB196耦合到MIC198和BIC197。MIC198提供到共享存储器的接口,BIC197在CBE100和其他外部总线及设备之间提供通信接口。
PPE110是双线程的PPE110。此双线程的PPE110和八个SPE120-134的组合使得CBE100能够处理10个同时的线程以及超过128个未完成的(outstanding)存储器请求。PPE110为处理大部分计算工作量的其他八个SPE120-134充当控制器。PPE110可用来运行传统的操作系统,而SPE120-134进行比如矢量化浮点代码执行。
SPE120-134包括协同处理单元(SPU)140-154,存储器流控制单元155-162、局部存储器或贮存器163-170、以及接口单元180-194。在一个示范性实施例中,局部存储器或贮存器163-170包括256KB指令和数据存储器,所述数据存储器对PPE110是可见的,并且能够通过软件直接地寻址。
PPE110可以以小程序或线程装载SPE120-134,将SPE串在一起来处理复杂操作中的每个步骤。例如,并入CBE100的机顶盒可以装载用于读取DVD,视频和音频解码,以及显示的程序,以及数据将从SPE到SPE进行到最后,直到其最终在输出显示器上结束。在4GHz,每个SPE 120-134给出理论上的32G浮点操作(FLOPS)性能而PPE 110具有相似等级的性能。
存储器流控制单元(MFC)155-162用作SPU到系统其余以及其他器件的接口。MFC 155-162提供用于数据传输、保护以及在主存储器和局部贮存器163-170之间的同步的首要机制。对于处理器中的每个SPU,逻辑上存在MFC。有些实现能够在多个SPU之间共享单个MFC的资源。在此情况下,对于每个SPU,为MFC定义的所有设备和命令必须独立于软件而呈现。共享MFC的效果被限制为依赖于实现的设备和命令。
现在参考图2,示出示例数据处理系统的方框图,在其中可以实现说明性实施例的各方面。在描述的例子中,数据处理系统200使用包括南桥和输入/输出(I/O)控制器集线器(SB/ICH)204的集线器架构。处理单元202经由存储器接口控制器(MIC)210连接到系统存储器208。处理单元202经过总线接口控制器(BIC)206连接到SB/ICH204。
在描述的例子中,局域网(LAN)适配器212与SB/ICH204连接。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、硬盘驱动器(HDD)226、CD-ROM驱动器230、通用串行总线(USB)端口和其他通信端口232,以及PCI/PCIe驱动器234经过总线238和总线240与SB/ICH204连接。PCI/PCIe驱动器可以包括,例如,以太网适配器、附件卡、和用于笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不用。ROM224可以是例如快闪二进制输入/输出系统(BIOS)。
HDD226和CD-ROM驱动器230经过总线240连接到SB/ICH 204。HDD226和CD-ROM驱动器230可以使用例如集成驱动器电路(IDE)或串行高级技术附连(SATA)接口。超级I/O(SIO)设备236可以与SB/ICH204连接。
操作系统运行在处理单元202上。操作系统协调在图2中的数据处理系统200内的各种组件并提供控制。作为客户端,操作系统可以是商业可获得的操作系统。面向对象的编程系统,诸如JavaTM编程系统,可以结合操作系统一起运行,并且提供从JavaTM程序或在数据处理系统200上执行的应用程序对操作系统的调用(Java是SUN Microsystem在美国、其他国家或这二者的商标)。
作为服务器,数据处理系统200可以是例如IBMeServerTMpSeries计算机系统,运行高级交互执行(AIX)操作系统或LINUX操作系统(eServer、pSeries和AIX是国际商用机器公司在美国、其他国家或这二者的商标,而LINUX是Linus Torvalds在美国、其他国家或这二者的商标)。数据处理系统200可以在处理单元202中包括多个处理器。可替换的,可以使用单个处理器系统。
操作系统、面向对象的编程系统、以及应用或程序的指令位于贮存设备上,诸如HDD226,并且可以被载入主存储器208以通过处理单元202执行。可以由处理单元202使用计算机可用程序代码来执行本发明的说明性实施例的处理,所述计算机可用程序代码位于诸如例如主存储器208、ROM224的存储器或例如位于一个或多个外围设备226和230。
诸如如图2所示的总线238或总线240的总线系统,可以由一个或多个总线组成。当然,该总线系统可以使用任何类型的通信结构或架构来实现,所述通讯结构或架构提供在附连到该结构或架构的不同部件或设备之间的数据传输。通信单元,诸如图2中的调制解调器222或网络适配器212,可以包括一个或多个用来发送和接收数据的设备。存储器可以是,例如,主存储器208、ROM224、或诸如在图2中的NB/MCH202中找到的高速缓存。
除了在图1-2中描述的硬件或取代该硬件,本领域的技术人员将理解在图1-2中的硬件可以取决于实现而变化。其他内部硬件或外围设备,诸如快闪存储器、等效非易失性存储器、或光盘驱动器等等。同样,说明性实施例的处理除了前面提到的SMP系统,可以适于多处理器数据处理系统,而不脱离本发明的宗旨和范围。
此外,数据处理系统200可以采用许多不同的数据处理系统中的任何形式,该数据处理系统包括:客户端计算设备、服务器计算设备、平板(tablet)计算机、膝上型计算机、电话或其他通信设备、个人数字助理(PDA)、视频游戏控制台等。在有些说明性例子中,数据处理处理系统200可以是便携计算设备,其配置有快闪存储器以提供非易失性存储器来存储操作系统文件和/或例如用户生成的数据。实质上,数据处理系统200可以是不受结构限制的任何已知的或以后开发的数据处理系统。
南桥204可以包括直接存储器存取(DMA)控制器。DMA控制器一般用于在系统存储器和输入/输出(I/O)设备之间移动数据,但是也用于在系统存储器中的一个区域和另一个区域之间移动数据。如果期待高总线利用,则高等待时间设备呈现独特挑战。当与高等待时间设备对话时,必须存在足够的未完成的同时事务,从而从高等待时间设备接收数据花费的时间少于或等于从所有其他的排在它前面的未完成的事务传输数据花费的时间量。如果满足该准则,则在总线上将很少有间隙或停止,其中DMA在总线上等待数据并且不具有任何其他可以传输的数据。
随着进一步集成的趋势,特别是对在片系统,在图2中的许多设备可以被集成在南桥204内。例如,单个总线可以被集成在南桥204内。同样,控制器和接口,诸如USB控制器、PCI和PCIe控制器、存储器控制器等等可以被集成在南桥204内并且被附连到内部总线。此外,南桥204可以包括将存储器模块与其连接用于局部存储器的存储器控制器。同样注意,处理单元202可以包括内部总线,诸如在图1中的EIB196,DMA设备可以经由该EIB存取系统存储器208。
图3是说明依照说明性实施例的南桥的方框图。处理单元302例如发出DMA命令到在南桥300中的总线320。在南桥300中的DMA设备310然后可以通过进行从诸如总线单元设备322的源设备中的读操作,和到诸如总线单元设备324的目标设备的写操作来执行该DMA命令。在替换的例子中,DMA命令可以请求从总线单元设备322向系统存储器304移动数据块,或根据另一个例子;DMA命令可以请求从存储器304向总线单元设备324移动数据块。总线单元设备322和总线单元设备324可以是,例如存储器控制器、USB控制器、PCI控制器、存储设备控制器等等或它们的组合。
源设备和目标设备可以包括诸如存储器的低等待时间设备和诸如硬盘驱动器的高等待时间设备。注意,但是,诸如存储器设备的通常为低等待时间设备的设备在一些情况下也可以是高等待时间。出于简化,南桥300的许多部件未示出。本领域的技术人员将认识到,南桥300将包括更多未在图3中示出的更多特征和功能。
在南桥300中,DMA设备310包括DMA引擎(DE)312和总线引擎(BE)314。专用读写(RW)命令允许DE312更有效地排队到BE314的事务(transaction)。使用更标准的实现,DE将通过指定BE将在总线上执行的每一事务来对BE进行细节管理。但是,在该说明性的实施例中,该专用RW命令允许DE312同时指定读和写二者,从而DE312能够更有效地控制数据块的移动。
BE314可以读诸如块移动请求的、从处理单元302向总线320发出的DMA命令。处理单元302可以直接地向DMA设备310发出DMA命令。可替换地,处理单元302可以使用分散/聚集(Scater/gather)列表发出DMA命令,该列表可以是系统存储器304中的表或链接列表。在后一情况下,BE314可以简单地从分散/聚集列表中读描述符以接收下一个DMA命令。DMA设备310可以将经过局部存储器控制器326而连接的局部存储器328用作工作存储器。比如,DMA设备310可以使用局部存储器328来缓冲读和写。
依照如图3示出的说明性实施例,例如,DMA设备被构造为松散耦合的DMA引擎(DE)和总线引擎(BE)。DE将编程的数据块移动分拆成单独的事务,解释分散/聚集描述符,以及在通道间判优。BE理解该DMA设备附连到的总线的总线协议,并且运行由该DE发送的所有事务。BE必须支持足够的同时事务,并由此支持足够的缓冲器来阻止数据流管道停止。DE排队到BE的事务并且根据BE的缓冲器空间会远超过BE。BE经由简单请求/确认应答握手抑制该DE。
DE不知道,或不必知道,BE已经实现了多少缓冲器;因此,不同的BE能够被用于相同的DE来支持不同等待时间的环境或附连到不同的总线。为了最大可量测性,可以将BE构造为逻辑上独立的“BE单元”,每个负责为DE管理一个缓冲器和一个事务。BE单元的数量可以是可配置的合成参数。
只要DE获得关于其当前请求的确认应答,其能够生成另一个请求。当BE用完可用的缓冲器时,其保留DE当前请求的确认应答,这防止该DE请求更多事务。当资源在BE中释放,其将激活向DE的确认应答,并且然后该DE能够请求另一个事务。
BE包含总的缓冲器池。例如,如果BE包含16个缓冲器,所有16个可以由一个DMA通道使用,或它们可以在通道间以DE需要的任何方式来分配。DE排队从任一通道到BE的事务。DE仅当其没有更多工作要做时或当BE保留指示其可用的缓冲器空间用完的确认应答时停止排队事务。
BE根据总线协议运行所有的已排队的事务并且处理可能的总线状况,诸如返回次序颠倒的事务数据和重试的事务。对于数据块移动,处理次序颠倒的数据的DMA被优化,对其而言子块的次序没有意义。有些象网络和视频流传送的应用,数据必须按次序移动。
在该DE和BE之间可以有简单接口,DE在其中排队到BE的事务。BE为DE运行该事务,直到DE已经导致所有编程的数据块被移动。DE可以通过指定向BE的每个读和写来导致所有的数据块被移动,其在总线上进行那些读和写。DE在通道间判优并且通常以公平地方式交织来自各种通道的读和写,从而来自所有通道的数据能够差不多同时传输。存在各种能够实现的通道判优优先级的方案;但是,判优不是本公开的焦点。
因为DMA涉及移动数据,DE从源地址进行的每个读事务必须最终跟随有相应的到目的地址的写事务。并且因为DMA移动数据而不是处理数据,所以由读事务传输的数据与由相应的写事务传输的数据是相同的。该数据没有作任何修改。因此,依照说明性实施例,DE和BE通过使用能够在DE和BE之间排队的组合的读写(RW)命令使得处理更有效。
RW事务同时指定读和相应的写。当DE排队到BE的RW事务时,相对传统的读或写事务仅有单个地址和字节计数其指定源地址、目的地址和字节计数。该RW命令简化DE的架构,因为DE不必对其排队的每个事务管理读和写两个阶段。相反,DE只排队单个RW事务并且于是能够“忘记”该事务。BE对每个由DE排队的RW事务运行单独的读和写。
除了DE的设计简化外,此架构比传统的架构快。在传统的架构中,对于数据块移动的每个事务,DMA引擎将读排队并等待读完成。然后,DMA引擎排队相应的写。本说明性实施例的RW事务架构消除来自BE的、用于通知DE读已结束的通信以及从DE到BE的、排队相应的写的通信。该通信的消除对每一事务节省至少两个时钟周期。
在该架构中利用RW命令同样能够简化BE的架构。可以使用单个事务队列,而不是实现单独的读和写队列。该架构同样节省DE中的属性空间,因为在等待读数据回来的同时,DE不必拥有空间以存储通道的数目乘以缓冲器的数目的地址。举个例子,DE在16个缓冲器、4个通道的DMA控制器中可能需要64个地址。BE仅需为其包含的缓冲器存储读和写地址。
对于单独的读和写命令,必须为每个由DE排队到BE的可能的事务保留属性;因此,对相同的DE使用不同的BE将很困难,因为DE必须拥有的属性空间的数量直接取决于在BE内的缓冲器的数目。在说明性实施例的RW事务架构中,一旦BE确认应答,DE就“忘记”每个事务,因此DE内的架构和资源不依赖于该BE支持多少缓冲器。这允许不同的BE具有不同数目的缓冲器,并且因此不同区域资源将用于相同的DE。缓冲器的数目能够取决于在每个芯片系统(SOC)中的设备的期望的等待时间。
当DE不知道BE拥有多少个缓冲器时,DE可以知道在BE中实现的缓冲器大小。DE可以向BE做出“测定缓冲器大小”的请求。不考虑缓冲器大小,BE可以变得太复杂,因为将没有东西来防止DE请求超出BE缓冲器空间的总数量的事物。
在本说明性实施例的架构中,BE能够以“流过(flow through)”模式运行,只要总线不“调步(pace)”(插入等待状态)写数据。这意味着一旦在BE总线上确认应答写请求,缓冲器马上能够重新用于为下一次读。因为写数据不能停止,能够存在读数据流入缓冲器的一侧同时写数据流出另一侧。这允许读和写数据并行的传送到相同缓冲器而没有读数据将覆盖写数据的任何可能。
利用单独的读和写命令,DE必须知道错误;因此,BE必须更新错误寄存器并且通知DE任何其必须知道的在总线上发生的错误。当在已利用单独的读和写命令排队的事务之一中发现错误时,DE做什么将取决于其实现。DE可以设计用来做的事之一是停止在当前通道上排队任何更多的事务直到由软件处理错误。在利用RW命令的说明性实施例的架构中,因为DE一旦排队事务就忘记每个RW事务,这变成BE的责任来处理作为执行RW事务的读和相关联的写的结果而在总线上发生的任何错误。
“延迟读取”是高等待时间目标使用的、通过在总线正取高等待时间数据的同时不停止该总线来提高总线利用的方法。目标典型地具有选项:将等待状态插入事务中以延迟该事务的完成直到其能够返回该数据。等待状态对高等待时间目标非常低效,因为这种目标必须对于每个事务插入许多等待状态,并且当总线在等待状态时,不能运行从任何主机到任何目标的其他事务。
目标定向完成(TDC)是对延迟读取的增强。支持TDC的目标捕获事务的标签连同地址。目标具有与其能够接收的每个标签相关联的读屏蔽信号。如果总线允许16个不同的读标签,则每个TDC目标具有读屏蔽总线。当TDC目标排队读时,它声明(assert)与读的标签对应的读屏蔽信号。只要为标签声明读屏蔽,主机知道不要重复该读。当目标准备好为该读传送数据时,它对该读屏蔽信号解除声明(deassert)。主机然后可以重复事务,并且由目标完成该事务。
可以将来自所有目标的读屏蔽信号“或”运算到一起来形成提供给主机的单个读屏蔽。这是可以实现的,因为主机不能拥有多于一个的在总线上未完成的、具有相同标签的读事务。一次仅一个目标向给定的主机对于给定的标签声明该读屏蔽。
TDC拥有两个主要的目的。首先,TDC是避免不必要地重复事务的办法,由此该主机重复已经重试并且由目标排队的事务(其还未准备好返回数据)。在高等待时间环境,能够避免许多多余的事务,为生产性工作节省总线带宽。其次,对于能够排队许多(如16)事务的目标,TDC为该目标提供告诉主机哪个事务可用于卸载,以及它们以什么次序完成的办法。
主机向目标排队比如16个事务并且然后循环那16个事务以看看该16个事务中哪个已经完成和哪个没有完成而将是非常低效的。例如,假定16个中13个事务首先完成。主机将必须读标签0,得到重试,读标签1,得到重试,读标签2,得到重试等等,直到它最后到达准备卸载数据的事务13。TDC避免了对能够排队许多事务的目标的极大量的多余的请求。此外,TDC允许主机按它可以达到最佳公平性的次序来卸载读数据。
在一个说明性实施例中,总线引擎(BE)具有两个读队列和一个写队列。第一读队列用于“新的读取”以及第二读队列用于“旧的读取”,旧的读取是已经在总线上重试过至少一次的读取。BE将最高优先级给新的读取,因为它们是高等待时间。这种机制提供办法来给予新的读取绝对优先级,并且仍避免死锁状况。
这样构造在此架构中的三个队列以致于事务从DE向新的读队列移动。重试过读的事务移动到旧的读队列。读完成的事务移动到写队列。新的读队列拥有绝对优先级。之后,在旧的读队列和写队列之间公平判优。在每个队列内,基于先进先出(FIFO)派遣各事务。
这种架构比其他方案拥有性能优势,其在不同类型的事务间更公平地判优。其他方案实现更公平的判优以避免死锁,而增加第二读队列消除了死锁的可能性。
图4说明了依照说明性实施例的整个总线引擎队列结构。接口410从DMA引擎接收RW命令,并且将这些命令置于新的读队列402中。DE经由简单请求/确认应答握手来排队到BE的事务。当没有更多队列空间时,BE保留确认应答。
每个DMA移动由读和写组成。因此,每个RW命令作为在新的读队列402中的新的读而开始。新的读队列402包含尚未在总线430上尝试的读。总线接口单元(BIU)420经由FIFO机制(下面进一步详细描述)、按照读被放入新的读队列402的次序运行所述读。FIFO排序适于所有的队列402-406。
复用器411从新的读队列402中选择将由总线接口单元420运行的读。当BIU420从新的读队列402中运行读时,有两种可能的结果。读可能马上完成。这例如可能发生于低等待时间目标,其不使用TDC机制并且能够立刻接受该事务。在此情况下,BIU420在总线430上执行读。当完成读时,将事务送到写队列406,绕过旧的读队列404。
当运行新的读时可能发生的第二结果是重试该读。例如,如果目标设备忙,则读可能被重试。这个适于TDC和非TDC设备。当TDC设备因为忙而重试时,它不声明读屏蔽信号。然后向旧的读队列404发送重试的忙事务,从而将其放入队列中再次运行。可替换地,如果TDC设备已经排队该事务则可以重试读。当此发生时,设备重试该事务并且声明对应于标签的读屏蔽信号。排队的事务被保留在新的读队列中直到其相关联的读屏蔽信号解除声明--其标签不放回FIFO排序的新的读队列中。当相应的读屏蔽信号解除声明时,读从新的读队列404发送到旧的读队列404。这是TDC机制防止事务再次运行的方式,直到目标说读数据可用。
复用器412从旧的读队列404中选择将由总线接口单元420运行的读。当BIU420从旧的读队列404中运行读时,存在两种可能的结果。该读可能马上完成。这可能发生于非-TDC目标,其由于忙之前重试过至少一次读,但是现在能够接受事务。对于其数据现在可用的TDC目标,读也可能完成。在任一情况下,该事务一完成就被从旧的读队列404发送到写队列406。
从旧的读队列404运行读时可能发生的第二种事情是该读可能被重试。这个应该仅发生于先前已经重试的非TDC读,因为一旦由TDC设备解声明该读屏蔽,它不应该重试该事务(但是,这并非严格要求的)。如果重试旧的读,则它仍留在旧的读队列404的相同位置,但是它的标签被送回到FIFO排序的旧的读队列的开始以将其放回队列中再次运行,如下面将进一步详细描述的。
复用器413从写队列406中选择将由总线接口单元420运行的写。当BIU420从写队列406中运行写时,存在两种可能的结果。写可能马上完成。在此情况下,由事务指定的事务数据移动被完成。一旦写由总线430(即,即便在该数据已经在不利用等待状态调步写的总线上被传输之前)接受(确认应答),相关联的事务标签就被“解分配(deallocated)”以及能够被重新用于新的写。在此点之前可能不会发出使用此标签的另一个读,因为读和相应的写共享数据缓冲器位置。事实上,对于所有三个队列,给定的队列位置指向相同的数据缓冲位置。
当运行写时可能发生的第二种事情是其被重试。这个可能发生,因为目标忙或不拥有可用的写缓冲器。如果重试该写,则它仍留在写队列406的相同位置,但是它的标签被送回到FIFO排序的写队列的开始以将其放回队列中再次运行,如下面将进一步详细描述的。可替换地,BE可以马上简单重复重试的写而非将其再装回到FIFO排序中。这将不会导致死锁,因为写的完成不取决于除了其前头的其他写之外的其他事务的完成。
复用器415在来自新的读队列402、旧的读队列404、和写队列406中的事务中选择。总线接口单元420给予新的读队列402绝对优先级;因此,如果在新的读队列402中新的读可用,则BIU 420向复用器415提供选择信号以便从复用器411中选择事务。
如果新的读在新的读队列402中不可用,则BIU420向复用器415提供选择信号以便从复用器414中选择事务。复用器414在旧的读队列404和写队列406之间选择。BIU420在在旧的读队列404和写队列406之间公平地判优;因此,当新的读不可用时,BIU420向复用器414提供选择信号以便在来自复用器412的事务和来自复用器413的事务之间交替。
如上所述,BIU420给予新的读队列402绝对优先级。如果在新的读队列402中有任何新的读可用,则它们全部将在任何读从旧的读队列404中发出或任何写从写队列406中发出之前发出。在这种方式中,对于高等待时间设备该DMA控制器被优化,由于是强制启动那些设备尽可能快地工作于它们的数据提取。
当高等待时间设备正工作于它们的提取时,完成相对快的写和旧的读能够由DMA控制器处理。这达到最大量的并行性,因为DMA控制器能够工作于那些它能够完成的(写和旧的读),同时高等待时间设备工作于它们的高等待时间读。当不存在未决的新的读,但是BIU420考虑写和旧的读时,BIU420的判优机制在旧的读和写之间公平地判优。公平判优的实现是因为处理旧的读和写是同等地重要的。处理“准备好”TDC读和处理写二者经过管道移动数据,以便最终释放标签从而可以排队更多的读。
当判优方案给予任何类别的事务绝对优先级时,死锁和资源缺乏值得关注。这里,BIU给予新的读绝对优先级。一般,当一个事务无法完成时死锁会发生(即,连续地重试事务),因为有些其他事务必须先完成,但是其他事务由于第一事务处于具有绝对优先级的事务类别而无法完成。第二“释放”事务处于较低优先级的事务类别中,其无法运行。
该说明性实施例的架构保证不会死锁,因为给定事务仅能够在新的读队列排队一次。如果重试该事务,则排队或没有排队的现在被当作旧的读,并且公平地判优旧的读与写和其他旧的读。因此,如果那些其他事务之一导致要重试新的读,则该事务将有机会运行和解除依赖性。
由于拥有绝对优先级的新的读的稳定流动,该说明性实施例的架构将同样不会经历旧的读队列404或写队列406的资源缺乏。这是因为一旦读离开新的读队列402而进入旧的读队列404或写队列406,另一个新的读无法在该新的读队列中的相同位置处取代其直到开始关于该事务的写。这保证新的读队列无法使其他队列资源缺乏,因为在新的读队列402中无法代替事务,直到其已经被写队列406处理。
图5说明依照说明性实施例的、在总线引擎中的队列的队列间排序。该总线引擎向每个请求事务分配标签。该标签可以同在总线上使用的事务标签号码一样。在队列510中对应于请求的标签的位置处载入事务。例如,具有TAG=5的事务被载入队列510中的位置5处。
在BE将事务的请求属性载入队列510的同时,BE将请求的标签置于队列排序FIFO520中。队列排序FIFO520被用来记住事务放入队列510中的次序。请求标签按照它们被排队的次序“弹”出队列排序FIFO520的底部。队列排序FIFO520的输出被用来通过向复用器512提供选择信号来从队列510中选择该相应的事务。
图6是说明依照说明性实施例的、发出读写命令的直接存储器存取引擎的操作的流程图。将可理解,流程图说明的每个方框,以及流程图说明的方框组合能够通过计算机程序指令实现。可以向处理器或其他可编程数据处理装置提供这些计算机程序指令以制造机器,从而在处理器或其他可编程数据处理装置上执行的指令创建用于实现在流程图方框中指定的功能的器件。这些计算机程序指令也可以被存储在计算机可读存储器或存储介质上,其能够指引处理器或其他可编程数据处理装置以特定方式工作,从而存储在计算机可读存储器或存储介质中的指令产生制造品,其包括实现在流程图方框中指定的功能的指令器件。
因此,流程图说明的方框支持用于执行该指定功能的步骤的组合、用于执行指定功能的步骤的组合和用于执行指定功能的程序指令器件。将同样可理解,流程图说明的每个方框,以及流程图说明的方块组合能够通过执行指定功能或步骤的专用的基于硬件的计算机系统实现,或通过专用硬件和计算机指令的组合来实现。
现在参考图6,操作开始并且直接存储器存取(DMA)引擎(DE)确定是否准备好向总线引擎(BE)发出新的读-写(RW)命令(块602)。如果新的RW命令没有准备好,操作返回到块602等待,直到RW命令准备好。
如果新的RW命令在块602中准备好,DE向BE发出该RW命令(块604)。此后,DE确定是否接收到关于当前命令的确认应答(块606)。如果DE确定其已经接收关于当前命令的确认应答,则操作返回到块602以确定是否准备好发出新的RW命令。
如果DE在块606中确定没有接收到确认应答,操作返回到块606等待,直到接收到确认应答。只要该DE获得关于其当前请求的确认应答,其能够作出另一个请求。当BE用光可用的缓冲器时,它保留DE当前请求的确认应答,这防止DE请求任何更多的事务。当资源在BE中释放,它将激活到DE的确认应答,并且然后该DE能够请求另一个事务。
图7A和7B是说明依照说明性实施例的、在直接存储器存取设备中的总线引擎的操作的流程图。更具体地,参考图7A,所示流程图说明依照说明性实施例的、从DMA引擎(DE)接收读-写(RW)命令的总线引擎(BE)的操作。操作开始并且BE确定是否正从DE发出新的RW命令(块702)。如果没有发出新的RW命令,操作返回到块702等待,直到RW命令被发出。
如果在块702中新的RW命令正从DE中发出,则BE从DE接收该RW命令(块704)。然后BE确定缓冲器空间是否满(块706)。如果缓冲器空间不满,则BE向DE发出确认应答;否则,该BE保留确认应答,直到缓冲器空间可用(块710)。此后,BE将RW命令置于新的读队列中(块712),并且操作返回块702以确定是否正从DE中发出新的RW命令。
图7B是说明依照说明性实施例的、用于在DMA设备中的总线引擎(BE)的队列间排序的操作的流程图。操作开始并且BE确定在新的读队列中是否存在事务(块722)。如果存在新的读,则BE从新的读队列中运行下一个读(块724)。下一步,BE确定该读是否导致重试(块726)。如果该读没有导致重试,意味着该读马上完成,BE向写队列发送该事务(块728)。此后,操作返回到块722以确定在新的读队列中是否存在事务。
如果该读导致块726中的重试,则BE确定该重试是否是因为该目标设备排队读(通过声明该读屏蔽信号)或因为目标设备忙因而声明重试而没有声明读屏蔽(块730)。如果重试是因为目标设备忙(没有声明read_mask),则BE向旧的读队列发出该事务(块732),并且操作返回到块722以确定在新的读队列中是否存在事务。如果利用重试声明读屏蔽,TDC设备已经排队该事务,则BE保持该事务在新的读队列中直到该读屏蔽解声明,然后向旧的读队列发送该事务(块738)。此后,操作返回到块722,以确定在新的读队列中是否存在事务。
返回到块722,如果在新的读队列中不存在事务,则BE使用公平判优从旧的读队列或写队列中选择事务(块740)。下一步,BE确定该事务是旧的读或写(块742)。如果该事务是旧的读,BE运行从旧的读队列中选择的读(块744)。BE确定读是否导致重试(块746)。如果读没有导致重试,BE将事务发送到写队列(块748)。否则,BE将关于事务的请求标签送回旧的读队列排序FIFO的开始处(块750)。此后,操作返回到块722以确定在新的读队列中是否存在事务。
在块742中如果该事务是写,则BE确定写是否导致重试(块752)。如果写没有导致重试,BE解分配事务标签(块754),并且操作返回到块722以确定在新的读队列中是否存在事务。在块752中如果写确实导致重试,BE发回请求标签、或事务标签到写队列排序FIFO的开始处,以便重试(块756)。可替换地,在块756中,BE可以重复写,直到写成功地完成。此后,操作返回到块722,以确定在新的读队列中是否存在事务。
因此,该说明性实施例通过提供一种构造为松散耦合的DMA引擎(DE)和总线引擎(BE)的DMA设备来解决现有技术的缺点。该DE将编程的数据块分拆成单独的事务,解释分散/聚集描述符,以及在通道间判优。BE理解DMA设备所附属的总线的总线协议,并且运行由DE送出的所有事务。DE和BE通过使用能够在DE和BE之间排队的已组合的读-写(RW)命令使得该处理更有效。总线引擎(BE)具有两个读队列和一个写队列。第一读队列用于“新的读”以及第二读队列用于“旧的读”,旧的读是已经在总线上重试过至少一次的读。BE将最高优先级给新的读,因为它们是高等待时间。这种机制提供办法来给予新的读绝对优先级,并且仍避免死锁状况。
应当理解本说明性实施例可以采用整个硬件实施例、整个软件实施例或包含硬件和软件部件二者的实施例的形式。在一个示范性实施例中,用软件实现该说明性实施例的机制,该软件包括但是不限于固件、常驻软件、微代码等。
此外,说明性实施例可以采用从计算机可用或计算机可读介质可存取的计算机程序产品的形式,其提供通过计算机或任何指令系统、或与计算机或任何指令执行系统相结合地使用的程序代码。对于本说明书的目的,计算机可用或计算机可读介质能够是任何装置,其能够包含、存储、通信、传播、或传输通过指令执行系统、装置或与设备或结合所述指令执行系统、装置或设备使用的程序。
该介质可以是电子的、磁的、光的、电磁的、红外的、或半导体系统(或装置或设备)或传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可移动的计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的现有例子包括压缩盘-只读存储器(CD-ROM)、压缩盘-读/写(CD-R/M)和DVD。
适合于存储和/或执行程序代码的数据处理系统将包括至少一个经过系统总线直接或间接地耦合到存储器件的处理器。该存储器件能够包括在实际执行程序代码期间使用的局部存储器、大容量存储器、和高速缓冲存储器(其提供至少某些程序代码的临时,存储以便减少在执行期间必须从大容量存储器检索代码的次数)。
输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备等)能够直接地或经过居间I/O控制器耦合到系统。也可将网络适配器耦合到系统,以使能数据处理系统经过居间专用或公用网络耦合到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是当前可用的网络适配器类型中的一些。
已经出于说明和描述的目的撰写了本发明的说明书,但是无意以公开的形式穷尽或限制本发明。许多修改和改变对于本领域技术人员将显然。选择和描述实施例以便最好地解释本发明的原理、实际应用,并且使本领域其他技术人员理解本发明的各种实施例具有适合于期望的特定用途的各种修改。
Claims (20)
1.一种用于在直接存储器存取设备中执行直接存储器存取块移动的方法,该方法包括:
在直接存储器存取设备内的直接存储器存取引擎处接收直接存储器存取块移动请求,其中该直接存储器存取块移动请求指示源和目标;
在直接存储器存取设备内从直接存储器存取引擎向总线引擎发出关于直接存储器存取块移动请求的一个或多个读写命令;以及
由总线引擎对于一个或多个读写命令中的每一个执行从源读取数据的读操作和将数据写入目标的写操作,以满足直接存储器存取块移动请求。
2.如权利要求1所述的方法,其中在一个或多个读写命令内的每一个读写命令包括源地址、目的地址和字节计数。
3.如权利要求2所述的方法,其中对于给定的读写命令,所述字节计数对应于总线引擎的缓冲器大小。
4.如权利要求1所述的方法,进一步包括:
响应于在总线引擎处接收给定的读写命令,如果在该总线引擎内的缓冲器空间没有满,则向该直接存储器存取引擎返回确认应答。
5.如权利要求4所述的方法,进一步包括:
响应于在总线引擎处接收给定的读写命令,如果在该总线引擎内的缓冲器空间已满,则保留对该直接存储器存取引擎的确认应答;以及
响应于在总线引擎中缓冲器空间变为可用,返回确认应答到直接存储器存取引擎,其中直接存储器存取引擎不发出后续的读写命令,直到在该直接存储器存取引擎处接收所述确认应答。
6.如权利要求1所述的方法,其中执行所述读操作和写操作包括:
将与给定读写命令相关联的读事务置于在总线引擎内的新的读队列中。
7.如权利要求6所述的方法,其中执行所述读操作和写操作进一步包括:
从新的读队列中运行读事务;
确定该读事务是否是被重试;以及
如果该读事务不是被重试,则将与读写命令相关联的写事务置于在总线引擎内的写队列中。
8.如权利要求7所述的方法,其中执行所述读操作和写操作进一步包括:
如果该读事务是被重试,则将该读事务置于旧的读队列中。
9.一种数据处理系统,包括:
总线;
多个耦合到总线的总线单元设备;
耦合到总线的直接存储器存取设备,其中该直接存储器存取设备包括直接存储器存取引擎和总线引擎;和
处理单元,其中该处理单元有到总线的通路,
其中直接存储器存取引擎从处理单元中接收直接存储器存取块移动请求,其中直接存储器存取块移动请求指示在多个总线单元设备内的源设备和目标设备;
其中直接存储器存取引擎向该总线引擎发出一个或多个关于直接存储器存取块移动请求的读写命令;和
其中总线引擎对于一个或多个读写命令中的每一个执行从源设备读取数据的读操作和将数据写入目标设备的写操作,以满足直接存储器存取块移动请求。
10.如权利要求9所述的数据处理系统,其中在一个或多个读写命令内的每一个读写命令包括对应于源的源地址、对应于目标的目的地址和字节计数。
11.如权利要求9所述的数据处理系统,其中响应于接收给定的读写命令,如果在总线引擎内的缓冲器空间没有满,则总线引擎向直接存储器存取引擎返回确认应答。
12.如权利要求11所述的数据处理系统,其中响应于接收给定的读写命令,如果在总线引擎内的缓冲器空间已满,则总线引擎保留向直接存储器存取引擎的确认应答;和
其中响应于对缓冲器空间变为可用,总线引擎返回确认应答到直接存储器存取引擎,其中直接存储器存取引擎不发出后续的读写命令,直到在直接存储器存取引擎处接收到确认应答。
13.如权利要求9所述的数据处理系统,其中总线引擎将与给定的读写命令相关联的读事务置于在总线引擎内的新的读队列中。
14.如权利要求13所述的数据处理系统,其中总线引擎从新的读队列中运行读事务,确定该读事务是否是被重试,并且如果该读事务不是被重试,则将与读写命令相关联的写事务置于在总线引擎内的写队列中。
15.如权利要求14所述的数据处理系统,其中如果该读事务是被重试,则总线引擎将该读事务置于旧的读队列中。
16.如权利要求15所述的数据处理系统,其中总线引擎将绝对优先级给新的读队列,并且在旧的读队列和写队列之间公平地判优。
17.如权利要求9所述的数据处理系统,其中多个总线单元设备包括存储器设备、贮存设备、或输入/输出设备。
18.如权利要求9所述的数据处理系统,其中处理单元是芯片上的不同种类的多处理器系统。
19.一种南桥,包括:
总线;
耦合到该总线的直接存储器存取设备,包括:
直接存储器存取引擎;和
总线引擎,
其中处理单元有到该总线的通路;
其中直接存储器存取引擎从处理单元中接收直接存储器存取块移动请求,其中直接存储器存取块移动请求指示连接到总线的源设备和目标设备;
其中直接存储器存取引擎向该总线引擎发出一个或多个关于直接存储器存取块移动请求的读写命令;和
其中总线引擎对于一个或多个读写命令中的每一个执行从该源设备读取数据的读操作和将数据写入目标设备的写操作,以满足直接存储器存取块移动请求。
20.如权利要求19所述的南桥,其中在一个或多个读写命令内的每一个读写命令包括源地址、目的地址和字节计数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/532,562 US7523228B2 (en) | 2006-09-18 | 2006-09-18 | Method for performing a direct memory access block move in a direct memory access device |
US11/532,562 | 2006-09-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101149714A true CN101149714A (zh) | 2008-03-26 |
CN101149714B CN101149714B (zh) | 2012-06-27 |
Family
ID=39250251
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101528170A Expired - Fee Related CN101149714B (zh) | 2006-09-18 | 2007-09-18 | 用于执行直接存储器存取的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7523228B2 (zh) |
CN (1) | CN101149714B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763246A (zh) * | 2008-12-23 | 2010-06-30 | 国际商业机器公司 | 用于对直接存储器存取引擎进行编程的方法和装置 |
CN103299281A (zh) * | 2010-11-15 | 2013-09-11 | 先进微装置公司 | 防止硬件事务存储器系统非故意丢失事务数据 |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
CN104011656A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 使用直接数据路径架构来存储数据以降低能量消耗和改进性能 |
CN104081372A (zh) * | 2011-11-16 | 2014-10-01 | 高通股份有限公司 | 配置成提供对多个组的同时读/写访问的存储器 |
CN104320351A (zh) * | 2014-10-27 | 2015-01-28 | 任子行网络技术股份有限公司 | 基于零拷贝和Linux内核的软件流控方法及其系统 |
CN106874081A (zh) * | 2015-12-11 | 2017-06-20 | 马维尔国际贸易有限公司 | 在nand闪速控制器中根据优先级对解码任务进行排队 |
CN107111461A (zh) * | 2015-02-03 | 2017-08-29 | 高通股份有限公司 | 在基于中央处理单元(cpu)的系统中通过经压缩存储器控制器(cmc)使用背靠背读取操作来提供存储器带宽压缩 |
CN107229581A (zh) * | 2016-03-25 | 2017-10-03 | 爱思开海力士有限公司 | 数据存储装置及其操作方法 |
CN107301139A (zh) * | 2016-04-15 | 2017-10-27 | 罗伯特·博世有限公司 | 存储器直接访问控制装置 |
CN107851163A (zh) * | 2015-07-20 | 2018-03-27 | 英特尔公司 | 用于i/o数据的完整性、防重放和真实性保证的技术 |
CN108701103A (zh) * | 2016-03-01 | 2018-10-23 | 罗伯特·博世有限公司 | 具有工作存储器的计算单元的存储器直接访问控制装置 |
CN109460183A (zh) * | 2017-09-06 | 2019-03-12 | 三星电子株式会社 | 具有页位图的高效事务表 |
CN109565455A (zh) * | 2016-06-02 | 2019-04-02 | 马维尔以色列(M.I.S.L.)有限公司 | 具有高速缓存的分组存储器中的分组描述符存储 |
CN109739785A (zh) * | 2018-09-20 | 2019-05-10 | 威盛电子股份有限公司 | 多核系统的内连线结构 |
CN110287148A (zh) * | 2019-07-01 | 2019-09-27 | 中原银行股份有限公司 | 一种数据交互方法及装置 |
CN117407321A (zh) * | 2023-12-13 | 2024-01-16 | 井芯微电子技术(天津)有限公司 | 一种芯片缓存的读写请求处理方法及相关装置 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7822903B2 (en) * | 2006-02-24 | 2010-10-26 | Qualcomm Incorporated | Single bus command having transfer information for transferring data in a processing system |
US8176252B1 (en) | 2007-11-23 | 2012-05-08 | Pmc-Sierra Us, Inc. | DMA address translation scheme and cache with modified scatter gather element including SG list and descriptor tables |
US8495301B1 (en) | 2007-11-23 | 2013-07-23 | Pmc-Sierra Us, Inc. | System and method for scatter gather cache processing |
US8681526B2 (en) * | 2008-07-02 | 2014-03-25 | Cradle Ip, Llc | Size and retry programmable multi-synchronous FIFO |
US7870308B2 (en) * | 2008-12-23 | 2011-01-11 | International Business Machines Corporation | Programmable direct memory access engine |
US8281075B2 (en) * | 2009-04-14 | 2012-10-02 | International Business Machines Corporation | Processor system and methods of triggering a block move using a system bus write command initiated by user code |
US8446944B1 (en) * | 2009-04-30 | 2013-05-21 | Verint Video Solutions Inc. | Data processing system and method |
CN102567257B (zh) * | 2011-12-26 | 2014-08-27 | 华中科技大学 | 一种控制多通道固态盘数据读写的方法 |
CN102929792B (zh) * | 2012-11-12 | 2016-03-30 | 华为技术有限公司 | 数据移动方法和系统、存储设备和主机 |
US9569384B2 (en) * | 2013-03-14 | 2017-02-14 | Infineon Technologies Ag | Conditional links for direct memory access controllers |
CN103353848B (zh) * | 2013-06-28 | 2017-04-26 | 华为技术有限公司 | 多队列或设备的选择方法和计算节点 |
US10310923B1 (en) | 2014-08-28 | 2019-06-04 | Seagate Technology Llc | Probabilistic aging command sorting |
US20160092123A1 (en) * | 2014-09-26 | 2016-03-31 | Pankaj Kumar | Memory write management in a computer system |
US10528253B2 (en) | 2014-11-05 | 2020-01-07 | International Business Machines Corporation | Increased bandwidth of ordered stores in a non-uniform memory subsystem |
TWI536179B (zh) * | 2015-07-02 | 2016-06-01 | 緯創資通股份有限公司 | 連接電路及具有該連接電路之計算機系統 |
US10684795B2 (en) * | 2016-07-25 | 2020-06-16 | Toshiba Memory Corporation | Storage device and storage control method |
US10831403B2 (en) | 2017-05-19 | 2020-11-10 | Seagate Technology Llc | Probabalistic command aging and selection |
CN111723058B (zh) * | 2020-05-29 | 2023-07-14 | 广东浪潮大数据研究有限公司 | 一种预读数据缓存方法、装置、设备及存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7054962B2 (en) * | 2002-03-08 | 2006-05-30 | Hewlett-Packard Development Company, L.P. | Embedded system having broadcast data storing controller |
US7631106B2 (en) * | 2002-08-15 | 2009-12-08 | Mellanox Technologies Ltd. | Prefetching of receive queue descriptors |
WO2004057481A1 (ja) * | 2002-12-20 | 2004-07-08 | Fujitsu Limited | Dma制御装置、dma制御方法、dma制御プログラム |
US7421694B2 (en) * | 2003-02-18 | 2008-09-02 | Microsoft Corporation | Systems and methods for enhancing performance of a coprocessor |
US7512722B2 (en) * | 2003-07-31 | 2009-03-31 | International Business Machines Corporation | Method for completing a plurality of chained list DMA commands that include a fenced list DMA command element |
US6981074B2 (en) * | 2003-10-14 | 2005-12-27 | Broadcom Corporation | Descriptor-based load balancing |
US7076578B2 (en) * | 2003-12-22 | 2006-07-11 | Intel Corporation | Race free data transfer algorithm using hardware based polling |
US7218566B1 (en) * | 2005-04-28 | 2007-05-15 | Network Applicance, Inc. | Power management of memory via wake/sleep cycles |
US7650557B2 (en) * | 2005-09-19 | 2010-01-19 | Network Appliance, Inc. | Memory scrubbing of expanded memory |
US7707477B2 (en) * | 2005-09-29 | 2010-04-27 | Apple Inc. | Checksum calculation |
US7620746B2 (en) * | 2005-09-29 | 2009-11-17 | Apple Inc. | Functional DMA performing operation on DMA data and writing result of operation |
CN100507886C (zh) | 2005-12-22 | 2009-07-01 | 北京中星微电子有限公司 | 一种对非易失性存储器进行直接存储访问的方法及其装置 |
US7822903B2 (en) * | 2006-02-24 | 2010-10-26 | Qualcomm Incorporated | Single bus command having transfer information for transferring data in a processing system |
-
2006
- 2006-09-18 US US11/532,562 patent/US7523228B2/en not_active Expired - Fee Related
-
2007
- 2007-09-18 CN CN2007101528170A patent/CN101149714B/zh not_active Expired - Fee Related
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8918553B2 (en) | 2008-12-23 | 2014-12-23 | International Business Machines Corporation | Multithreaded programmable direct memory access engine |
CN101763246A (zh) * | 2008-12-23 | 2010-06-30 | 国际商业机器公司 | 用于对直接存储器存取引擎进行编程的方法和装置 |
CN103299281A (zh) * | 2010-11-15 | 2013-09-11 | 先进微装置公司 | 防止硬件事务存储器系统非故意丢失事务数据 |
CN103299281B (zh) * | 2010-11-15 | 2017-05-24 | 先进微装置公司 | 防止硬件事务存储器系统非故意丢失事务数据 |
CN104081372B (zh) * | 2011-11-16 | 2017-06-13 | 高通股份有限公司 | 配置成提供对多个组的同时读/写访问的存储器 |
CN104081372A (zh) * | 2011-11-16 | 2014-10-01 | 高通股份有限公司 | 配置成提供对多个组的同时读/写访问的存储器 |
CN104011656A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 使用直接数据路径架构来存储数据以降低能量消耗和改进性能 |
CN104011656B (zh) * | 2011-12-22 | 2018-08-14 | 英特尔公司 | 使用直接数据路径架构来存储数据以降低能量消耗和改进性能 |
US10049061B2 (en) | 2012-11-12 | 2018-08-14 | International Business Machines Corporation | Active memory device gather, scatter, and filter |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
CN104320351A (zh) * | 2014-10-27 | 2015-01-28 | 任子行网络技术股份有限公司 | 基于零拷贝和Linux内核的软件流控方法及其系统 |
CN104320351B (zh) * | 2014-10-27 | 2019-04-05 | 任子行网络技术股份有限公司 | 基于零拷贝和Linux内核的软件流控方法及其系统 |
CN107111461A (zh) * | 2015-02-03 | 2017-08-29 | 高通股份有限公司 | 在基于中央处理单元(cpu)的系统中通过经压缩存储器控制器(cmc)使用背靠背读取操作来提供存储器带宽压缩 |
CN107851163B (zh) * | 2015-07-20 | 2022-03-08 | 英特尔公司 | 用于i/o数据的完整性、防重放和真实性保证的技术 |
CN107851163A (zh) * | 2015-07-20 | 2018-03-27 | 英特尔公司 | 用于i/o数据的完整性、防重放和真实性保证的技术 |
CN106874081A (zh) * | 2015-12-11 | 2017-06-20 | 马维尔国际贸易有限公司 | 在nand闪速控制器中根据优先级对解码任务进行排队 |
CN106874081B (zh) * | 2015-12-11 | 2022-07-22 | 马维尔亚洲私人有限公司 | 在nand闪速控制器中根据优先级对解码任务进行排队 |
CN108701103A (zh) * | 2016-03-01 | 2018-10-23 | 罗伯特·博世有限公司 | 具有工作存储器的计算单元的存储器直接访问控制装置 |
CN108701103B (zh) * | 2016-03-01 | 2021-01-05 | 罗伯特·博世有限公司 | 具有工作存储器的计算单元的存储器直接访问控制装置 |
CN107229581A (zh) * | 2016-03-25 | 2017-10-03 | 爱思开海力士有限公司 | 数据存储装置及其操作方法 |
CN107301139B (zh) * | 2016-04-15 | 2024-04-30 | 罗伯特·博世有限公司 | 存储器直接访问控制装置 |
CN107301139A (zh) * | 2016-04-15 | 2017-10-27 | 罗伯特·博世有限公司 | 存储器直接访问控制装置 |
CN109565455B (zh) * | 2016-06-02 | 2023-09-26 | 马维尔以色列(M.I.S.L.)有限公司 | 具有高速缓存的分组存储器中的分组描述符存储 |
CN109565455A (zh) * | 2016-06-02 | 2019-04-02 | 马维尔以色列(M.I.S.L.)有限公司 | 具有高速缓存的分组存储器中的分组描述符存储 |
CN109460183A (zh) * | 2017-09-06 | 2019-03-12 | 三星电子株式会社 | 具有页位图的高效事务表 |
CN109460183B (zh) * | 2017-09-06 | 2023-08-01 | 三星电子株式会社 | 具有页位图的高效事务表 |
CN109739785A (zh) * | 2018-09-20 | 2019-05-10 | 威盛电子股份有限公司 | 多核系统的内连线结构 |
CN109739785B (zh) * | 2018-09-20 | 2020-12-29 | 威盛电子股份有限公司 | 多核系统的内连线结构 |
CN110287148A (zh) * | 2019-07-01 | 2019-09-27 | 中原银行股份有限公司 | 一种数据交互方法及装置 |
CN110287148B (zh) * | 2019-07-01 | 2021-10-29 | 中原银行股份有限公司 | 一种数据交互方法及装置 |
CN117407321A (zh) * | 2023-12-13 | 2024-01-16 | 井芯微电子技术(天津)有限公司 | 一种芯片缓存的读写请求处理方法及相关装置 |
CN117407321B (zh) * | 2023-12-13 | 2024-02-13 | 井芯微电子技术(天津)有限公司 | 一种芯片缓存的读写请求处理方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
US7523228B2 (en) | 2009-04-21 |
CN101149714B (zh) | 2012-06-27 |
US20080126602A1 (en) | 2008-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101149714B (zh) | 用于执行直接存储器存取的方法和系统 | |
CN101221544B (zh) | 用于执行dma块移动的方法及dma设备 | |
CN101221543B (zh) | 执行dma块移动的方法、dma设备和数据处理系统 | |
CN107078959B (zh) | 用于减轻分布式非核结构中的业务量引导低效的系统和方法 | |
US10949091B2 (en) | Memory controllers, memory systems, solid state drives and methods for processing a number of commands | |
US10698833B2 (en) | Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput | |
JP5886470B2 (ja) | 共有メモリ・ファブリックを介したメモリ・アクセスの調停 | |
US6952749B2 (en) | Multiprocessor interrupt handling system and method | |
AU2011302452B2 (en) | Multi-ported memory controller with ports associated with traffic classes | |
CN105009101B (zh) | 提供与数据缓冲器相关联的监听滤波 | |
CN101606130A (zh) | 在处理器系统的指令级使能资源分配标识的方法和装置 | |
US9244877B2 (en) | Link layer virtualization in SATA controller | |
CN107003962B (zh) | 保持计算系统中高速缓存一致性的方法、装置和计算系统 | |
US9971711B2 (en) | Tightly-coupled distributed uncore coherent fabric | |
WO2016014237A1 (en) | Dynamic multi-processing in multi-core processors | |
CN103092781A (zh) | 闪存接口的有效利用 | |
US10169260B2 (en) | Multiprocessor cache buffer management | |
CN103645865B (zh) | 一种命令超时的处理方法 | |
CN109213424B (zh) | 并发io命令的无锁处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120627 Termination date: 20200918 |
|
CF01 | Termination of patent right due to non-payment of annual fee |