CN101594299B - 基于链表的交换网络中队列缓冲管理方法 - Google Patents

基于链表的交换网络中队列缓冲管理方法 Download PDF

Info

Publication number
CN101594299B
CN101594299B CN2009100842780A CN200910084278A CN101594299B CN 101594299 B CN101594299 B CN 101594299B CN 2009100842780 A CN2009100842780 A CN 2009100842780A CN 200910084278 A CN200910084278 A CN 200910084278A CN 101594299 B CN101594299 B CN 101594299B
Authority
CN
China
Prior art keywords
cell
linked list
cycles
queue
sram
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.)
Expired - Fee Related
Application number
CN2009100842780A
Other languages
English (en)
Other versions
CN101594299A (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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN2009100842780A priority Critical patent/CN101594299B/zh
Publication of CN101594299A publication Critical patent/CN101594299A/zh
Application granted granted Critical
Publication of CN101594299B publication Critical patent/CN101594299B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

基于链表的交换网络中队列缓冲管理方法,属于计算机网络技术领域,其特征在于:同时采用DRAM以及SRAM构造数据与控制分离的链表单元结构,通过链表方式对外存空间进行管理,实现多队列结构;利用队列操作以数据包为单位这个特点,压缩存储链表单元中的控制信息,提高了链表单元的存储效率;通过流水线设计实现多个链表单元的并发处理,克服了存储器延迟的不利影响,提高了链表的操作效率。它的特点在于吞吐率高,扩展性好。

Description

基于链表的交换网络中队列缓冲管理方法
技术领域
队列管理是计算机网络应用(如路由器,交换机和防火墙等核心设备中)的关键技术之一。队列管理的任务是通过相应的体系结构、根据数据包相应的标识信息,实现对数据包的分队列存储与输出,它属于计算机网络技术领域。
背景技术
随着英特网的进一步发展,新的网络业务不断涌现。包括语音服务、虚拟专用网络在内的多种网络业务对网络服务质量提出了更高的要求。由于网络流量的突发特性,采用带宽的过度预留已经不能有效保证网络的服务质量。与此同时,网络服务提供商也希望通过提供有差别的服务来增加收入。
通过对不同的网络业务执行相应的优先级服务可以实现较好的网络服务质量。而为了实现优先级服务,就必须实现对数据包的队列管理,具体又分为排队存储和调度输出。排队存储的主要任务是把输入的数据包根据对应标识(如流号)、区分队列分别存储,并在每个队列内根据数据包到达的先后顺序维护FIFO(First In First Out,FIFO)结构。而调度输出则是根据调度算法得出的服务次序、将指定队列队首的数据包送出,并更新相应队列状态。
随着网络链路传输速率的快速提高,通过软件方式实现的队列管理已经不能满足要求,而通过硬件实现的队列管理芯片凭借其巨大的性能优势逐渐占据高端应用领域。通过设计相应的硬件芯片,配合采用动态随机存储器(DynamicRandom Access Memory,DRAM)、静态随机存储器(Static Random AccessMemory,SRAM)等外存芯片可以实现高速而又廉价的队列管理系统。这个过程中需要解决的问题是:外存芯片只能根据对应的物理地址实现相应的数据读写操作。如何组织相应的数据结构,在外存所提供的线性存储空间中实现多队列结构是队列管理的重要问题之一。这个问题还涉及到外存延迟、存储开销等多方面内容。
下面针对上述问题的一般解决方法进行相应说明。
首先是外存芯片的规格化。为了尽可能地简化硬件操作、实现外存存储与带宽的最大化利用,在外存芯片(尤其是DRAM)的使用中,通常将多个存储单元视为一个大的存储单元进行集中使用。这种方式可以较好地解决外存芯片使用中的一些问题(如Bank Conflict,DRAM刷新等),但是也因此引入了额外的开销。由于存储空间划分的粒度加大,当数据读写操作粒度相对较小时,仍然需要对整个大存储单元进行完整操作。在均衡多方面因素后,一般认为把DRAM的存储单元按照64字节或者128字节为单位进行使用效果最好。详细原因在此略过。
通过外存芯片的规格化,外存芯片所包含的存储空间可视为一连串独立的大存储单元。链式空间管理可以实现对这些存储单元较好的管理。其基本思想是利用一个或者多个大存储单元构造链表单元,每个链表单元又存储相应控制信息(如链表指针等),通过串联多个链表单元实现队列,同时在硬件芯片内部存储对应队列的头尾指针(头尾链表单元对应的外存地址)。这种方式只要额外维护队列的头尾指针信息、存储压力较小,因而被广泛采用。但是在具体的实现细节上却各有不同,效率上也有很大差别。重点体现在链表的存储效率和链表操作的效率两个方面。
之前提到过每个大存储单元因数据操作的粒度存在利用率问题,链表的存储效率则是指在实际数据操作中有效数据所占的比例。例如,设每个大存储单元为64字节,在某次数据操作中,只有60字节被用于构造链表,而链表单元内部又额外存储了16字节的控制信息(如下一跳指针、当前链表单元的有效长度、数据包的分段信息等)。于是,实际链表的存储效率只有(44/64)。
而链表的操作效率则是指在某段时间内、对外存的实际数据操作所占时间的比例。由于存在外存延迟,链表操作很难连续。例如:在读取某一队列队首链表单元时,要先获取其对应队首链表单元地址,然后读取对应地址的外存存储单元,又经过若干周期后才获得读出数据,送出数据并等待下次操作请求。这个过程中,只有“获得读出数据”这一环节实际占用了外存芯片,于是相应的链表操作效率就很低了。
如何提高上述两种效率是队列管理的重要研究方向。
针对传统方法存在的多种问题,本专利申请的技术方法的先进性和新颖性体现在:利用调度输出过程以数据包为单位这个特点,压缩存储链表单元中的控制信息,提高了链表单元的存储效率;同时通过SRAM和DRAM构造了数据与控制分离的链表单元结构,设计流水线实现多个链表单元的并发处理,提高了链表的操作效率。它开销小、扩展性好。
发明内容
本发明的目的在于,充分利用系统设计中松耦合设计的思想,将数据存储与队列控制信息分离,通过压缩控制信息,充分利用控制信息所存放的SRAM的带宽,节省系统的瓶颈DRAM带宽,同时,利用数据和控制信息的异步操作,通过流水设计隐藏外存储器的延时,有效的提高了队列管理系统的有效带宽,并且系统的设计非常灵活。
本发明的特征在于,所述方法是一种基于链表的交换网络中多队列缓冲管理的方法,是在一种队列缓冲管理系统中依次按以下步骤实现的:
步骤(1).构建一个用于所述交换网络中多队列缓冲管理的队列管理系统,所述系统含有:FPGA芯片、缓存数据包DRAM和缓存数据包描述控制信息用的SRAM,其中:
FPGA芯片含有:队列管理模块和片内存储器,其中
队列管理模块设有:数据包输入端口和数据包输出端口,
片内存储器MRAM,与所述队列管理模块互连,
缓存数据包DRAM,与所述队列管理模块互连,所述缓存数据包DRAM是一种延迟压缩式的RLDRAM,以16个周期为读写操作的最小时间单位,实际配置为64B×512K,拥有读/写分离的数据总线,但读写复用一套地址及控制总线,
缓存数据包描述控制信息用的SRAM,型号为CY7C1370C,拥有一套读写复用的数据和控制总线,实际配置为32bits×512K;
步骤(2).把所选RLDRAM和SRAM共同组成一个“数据域和控制域分离”的链表单元,所述的每个链表单元包含一个64B的数据域和一个32bits的控制域,由拥有相同高位地址的所述RLDRAM和SRAM组成,
步骤(3).在所述FPGA中建立一个链表空间管理结构实现的512K个所述链表单元的管理:在该FPGA的片内存储器MRAM中额外维护每个逻辑队列的头尾指针,以对应于头尾链表单元对应的外存地址,再通过一个存有空闲链表头尾指针的独立队列Freelist,实现对空闲链表单元的管理,
步骤(4).把所述交换网络中多队列缓冲的控制信息进行最大限度的压缩后得到:流号Flow No,占16bits,分段信息Seg.Info占2bits,信元长度length占5bits,数据包总长度Total Length占9bits,其中:
流号Flow No,高位表示目的线卡号Card No,
分段信息Seg.Info,其中包括:四种状态:“01”表示数据包头,“00”表示数据包中段,“10”表示数据包尾,“11”表示独立数据包,
然后,在第一个链表单元中存储所述16bits流号和9bits数据包总长度信息,在后继链表单元的后继信元中存储所述分段信息Seg.Info,以便在对所述DRAM进行操作的同时读取所述SRAM中下一链表单元的控制信息,
步骤(5).按以下步骤对到达的4个信元A、B、C、D依次进行流水线操作以便等效于在16个周期内处理一个信元:
步骤(5.1).所述队列管理模块在4个周期内读取入队信元A,并获取该信元A的流号信息,
步骤(5.2).所述队列管理模块在4个周期内,对所述片内存储器MRAM进行一次读操作,查询步骤步骤(5.1)中获取的流号所属当前队列的队尾指针,同时,在8个周期内对所述的SRAM进行一次读操作,以查询当前空闲链表,申请一个新链表单元,获取当前空闲链表的下一跳指针,用来更新空闲链表,再在发出所述查询当前空闲链表一个周期后,用5个周期的时间对所述SRAM进行一次写操作,修改所述当前队列队尾链表的下一跳指针,使它指向所述新申请的链表,同时读取到达信元B的流号信息,在该步骤(5.2)中所执行的所有操作在16个周期内完成,去处理所述A和B两个信元,
步骤(5.3).所述队列管理模块对所述MRAM进行一次写操作,修改所述信元A中的队尾指针信息,同时,在11个周期内对所述RLDRAM进行一次写操作,所述信元A写入到对应所述RLDRAM的链表单元的数据域,与此同时,获取所述信元C的流号信息,在该步骤(5.3)中所执行的所有操作在16个周期内完成,同时处理所述A、B、C三个信元,
步骤(5.4).在每个所述的链表单元为64B的情况下,所述队列管理模块再耗时16个周期,结束所述信元A的写入,同时对所述信元B,在4个周期内执行对所述MRAM的写操作,修改队列的队尾指针信息,在11个周期内,对所述的RLDRAM执行写操作,写入所述信元B,同时获取所述信元D的流号信息,在该步骤(5.4)中的执行的所有操作在16个周期内完成,去处理所述A、B、C、D共4个信元,
步骤(5.5).把所述信元C的RLDRAM写入操作、所述信元D的查询当前流号所述当前队列的队尾指针的对所述MRAM的读操作,以及查询当前空闲链表的对所述SRAM的读操作、移入到下一阶段4个16周期内E、F、G、H四个信元来临时的第一个16周期内进行,以此类推。
以上操作步骤的流程如图1所示。
图2示意了队列管理的系统框图,数据包一般在外存储芯片DRAM进行排队和缓存,数据包构成的队列描述信息可存储在外存储芯片DRAM/SRAM或者FPGA片内存储中。因DRAM带宽有限,一般尽量将额外的描述信息放在SRAM或者片内存储中。
附图说明
图1本发明的流程图。
图2队列管理器的系统框图。
图3数据域和控制域分离的链式空间管理结构示意图。
图4信元格式示意图。
图5存储设备的错峰使用原理示意图。
图6入队操作时的4级流水示意图。
图7在不同数据包长度情况下系统的吞吐率曲线。
具体实施方式
本发明的目的在于提供一种优化的实现方案,最大化利用外存芯片、实现高速的队列管理。
发明内容又可细分为两大部分:
1、压缩存储链表单元中的控制信息,提高链表单元的存储效率;
2、构造数据与控制分离的链表单元结构,设计流水线实现多个链表单元的并发处理,提高链表的操作效率;
下面依次对两者的基本特征与核心思想进行说明。
首先是压缩存储链表单元中的控制信息。控制信息在链表的维护操作中是必不可少的,但是它给系统带来了额外的存储与带宽开销。那么,如何压缩控制信息又保留等效的控制功能呢?本发明利用队列管理调度输出过程以数据包为单位这个特点,通过继承操作的方式,压缩了同一数据包对应的多个链表单元中重复出现的控制信息。
由于每个链表单元大小有限,在数据包较大的情况下,一个数据包会被分割存储于多个链表单元中。为了实现链表单元在外存中的存储、数据包输出时的重组、或者数据包各个片段在网络中的传输等操作,每个链表单元需要独立维护一定量的控制信息。
由于同一个数据包内部的多个链表单元存在极大的相似性。如它们对应的优先级相同,调度输出的时间连续,对应的原始数据包的长度一致等。可以发现控制信息在同一数据包内部的多个链表单元间存在非常严重的重复现象。利用这一特点,仅在数据包对应的首个链表单元中存储这部分控制信息,后继同一数据包的链表单元可以根据和首链表单元之间的相对关系,直接继承这部分控制信息。由于调度输出时以数据包为单位,在实际硬件操作中只需要用寄存器暂时维护这部分信息即可,而链表单元间的相对关系可以用2比特信息表示(如“01”表数据包头、“00”表示数据包中段、“10”表示数据包尾、“11”表示独立数据包)。对于长度较大的数据包,除包头链表单元外的后继链表单元仅用2比特数据实现大量控制信息的等效存储,从而大大地提高链表单元的存储效率。
借由这种方式每个链表单元内部的控制信息被大大压缩了,通过SRAM的配合使用可以实现数据与控制分离的链表单元结构。具体的做法是把SRAM和DRAM进行一一对应、共同构造链表单元,将大部分控制信息(如链表指针,当前链表单元有效长度,分段信息等)存储于SRAM中。传统方法是无法做到这点的,因为SRAM的存储容量通常要远小于DRAM,每个链表单元未压缩的控制信息一般是无法单独存储于SRAM中的。
采用这种数据与控制分离的链表单元结构给链表操作带来了巨大的便利,操作效率大大提高了。原因在于:
1、由于DRAM和SRAM分属两个物理设备,并行操作增大了系统整体带宽。
2、链表单元的数据域和控制域分离了,使得链表操作可以异步执行,同时操作不同链表单元的数据域和控制域。
其中第二点尤为重要。由于单链表结构中下一个链表单元的地址存储于前一链表单元的指针域中,单链表操作具有严格的顺序操作限制(即不能在读取到某链表单元前对其下一跳链表进行读取)。考虑外存芯片的延迟,背靠背的链表操作很难实现,造成外存芯片操作过程中出现大量“缝隙”,影响了系统整体的吞吐率。如果采用多链表结构虽然可以解决此类问题,但是需要额外存储一定量的控制信息,存储与更新开销都将增大。
利用数据与控制分离的链表单元结构,在DRAM操作的同时超前读取SRAM中下一链表单元的控制信息,通过预操作克服外存延迟,利用流水化操作消除外存芯片操作过程中的“缝隙”。其核心思想非常简单,但在具体实现上却需要一定技巧。
具体实施过程中采用的FPGA芯片型号为Altera Stratix EP1S80F1508C5,RLDRAM(Reduced Latency DRAM)的型号为MT49H16M18C,采用的SRAM型号为CY7C1370C。
RLDRAM是一种延迟较小的DRAM存储器,本次使用的芯片容量达到16M×18bits,共计288Mbits,拥有8个Bank,运行频率为166Mhz,它采用了DDR(Double Date Rate)技术,等效运行频率为333Mhz。它最大的特点在于拥有读/写分离的数据总线,但读/写复用一套地址以及控制总线。
为了实现RLDRAM的读/写并行、最大程度上利用带宽,在RLDRAM的使用中以16个周期为读写操作的最小时间单位。对应这16周期所能达到的最大吞吐量为18bits×2×16=576bits,其中排除用于校验后的有效部分是576bits×(16/18)=512bits=64B。则RLDRAM的实际配置可以理解为64B×512K。
CY7C1370C是Cypress公司出品的一款高性能SRAM。它拥有一套读写复用的数据和控制总线。所有的数据操作都只能在时钟上升沿触发。其配置方式为36bits×512K,容量总计18Mbits,运行频率为166Mhz。考虑4bits要用于校验,实际剩余空间及配置方式只能为32bits×512K,共计16Mbits。
设计一:“数据域和控制域分离”的链表结构,实现链式空间管理。
利用RLDRAM和SRAM逻辑地址空间相同(都是512K),由RLDRAM和SRAM共同组成“数据域和控制域分离”链表单元结构。逻辑上,我们把拥有相同高位地址的RLDRAM和SRAM视为一个完整的链表单元。对应每个链表单元包含一个64B的数据域(RLDRAM中存储)和一个32bits的控制域(SRAM中存储)。
通过图3所示的链式空间管理结构实现对512K个链表单元的管理。其中在FPGA片内存储器(MRAM)中额外维护每个逻辑队列的头尾指针,而通过一个独立队列(Freelist)实现对空闲链表单元的维护。图中示意了三个链表单元的链接信息:地址分别为A、B、C对应的RLDRAM的64B的数据域存储的信元具有链接关系,地址A对应于控制域的信息为B,即表示地址A处数据域下一个信元为地址B所存储。
设计二:压缩信元中的控制信息。
针对交换网络中多队列缓冲应用的具体需求。常见的控制信息包括:
1、Card No.,目的线卡号。由于每个信元都需要经交换网络接口封装成帧,通过交换网络发往其他端口。目的线卡号指出了这个信元具体的目的线卡地址。
2、Flow No.,流号。流号是逻辑队列内部所有数据包的统一标识,通过流号可以区分各个数据包所属的逻辑队列。
3、Length,长度。信元是由数据包分割得来的,对于某些短包或者长包的最后一个信元来说,其有效信息可能不足64字节。由于RLDRAM采用的是固定操作,当某个信元内部实际有效信息小于64字节时,需要由Length标识出实际负载的有效长度。
4、Seg.Info,分段信息。数据包分割为信元经过交换网络后,需要还原为数据包,此时需要一个信息用来指导重组。分段信息标识了当前信元对应原数据包的哪个部分。
5、Total Length,数据包总长度。用来标识信元对应的数据包的原始长度,用于检测是否存在信元丢失。
可以看出上述控制信息对于每个信元都是必不可少的。首先对其进行最大限度的压缩。
1、将CardNo与FlowNo做合并处理,用流号的高位表示目的线卡号。考虑支持64K队列则预留16bits。
2、Seg.Info.,分段信息可以压缩至2bits。由于在实际调度过程中,通常以数据包为单位进行调度。同一数据包内不会乱序。只需表明当前信元属于“包头”、“包尾”、“包中部”或者是“独立包”即可。一共4种状态,用2bits即可。
3、Length,由于信元最大不过64B,设内部数据接口为32bits,以4B为单位。实际信元的长度不超过16×4B。所以长度字段只需5bits。(也可以用4bits,此时用0表示16。)
4、Total Length,同样以4B为单位,以1500字节为数据包最大长度,则需要9bits存储空间。
经过压缩,Flow No占16bits,Seg.Info占2bits,Length占5bits,Total Length占9bits,总计已经32bits,超过SRAM剩余的13bits(全部32bits中的19bits用于存储链表单元下一跳指针)。
利用调度同一数据包过程中信元不乱序这个特点,可以进一步优化控制信息存储的开销。仅在SRAM中存储2bits Seg.Info,5bits Length,就可以达到与存储32bits相同的效果。
由于调度同一数据包过程中信元不乱序,所以只需要在第一个信元中存储16bits流号和9bits总长度信息,后继信元经由查询Seg.Info字段得知某信元与每个IP包第一个信元的关系,继承第一个信元的流号信息即可。
反映到硬件实现的具体方法就是:在调度第一个信元时,将第一个信元的流号信息存于片内寄存器供后继信元使用。
于是定义的信元格式有两种。图4(a)所示的是数据包第一个信元或者当数据包仅有一个信元时的信元格式。图4(b)所示的则是后继信元的数据格式。
通过这种方式可大大提高系统在长数据包情况下的存储效率。
设计三:流水线设计。
仅仅靠减少外存额外开销并不能直接提高系统的传输效率,更重的是如何实现信元间背靠背的传输。通过采用了流水线设计可以极大地提高了系统效率。本节将对设计流水线过程中遇到的问题和解决方法做简要说明。
其中上文提到的“数据与控制分离”的特性对于实现系统流水线设计,增加系统的吞吐率至关重要。
流水设计难点
在本次实现范例中,每次对RLDRAM的操作是按照固定64B进行的,对应16个时钟周期。而RLDRAM同时存在两条独立的读写分离的数据总线。这就要求系统每16个周期要处理两个数据包(一个入队、一个出队)。平均8个周期处理一个数据包。另一方面,存储器的延迟(以返回的结果可以被利用的总时间来计算)通常不小,举例:
(1)MRAM等片内存储读取的延迟为4个周期;
(2)片内FIFO读取延迟4个周期;
(3)片外SRAM读取的延迟8个周期,写入延迟5个周期;
(4)RLDRAM读取延迟12个周期,写入延迟加上错位延迟大约11周期。
加之一些操作上存在一定的逻辑先后关系,8周期内完成一次独立的操作过程是不可能的。
以入队操作的完整过程说明各个操作环节所耗费的时钟周期数。在顺序操作情况下,一次入队操作的过程可分为如下步骤:
(1)获取即将入队的信元的流号信息。这个过程要求读取入队FIFO,耗时4周期。
(2)查询流号所属队列当前队尾指针。队尾指针存储于片内存储,读取它需要进行一次MRAM操作,耗时4个周期。
(3)查询当前空闲链表,申请一个新链表单元,同时要获取当前空闲链表头的下一跳指针,用来更新空闲链表。此过程为一次SRAM读操作,耗时8周期。
(4)修改当前队尾链表下一跳指针,使之指向新申请的链表单元,此操作为SRAM写操作,耗时5周期。
(5)修改当前队列队尾指针信息。此操作为MRAM操作,耗时4周期。
(6)将信元写入到对应RLDRAM链表单元数据域。从发出命令到RLDRAM内部开始写入,耗时11周期。
(7)对应64B信元情况下,再耗时16周期写入结束。
可以看出一个入队操作就要52个周期。如果再和出队操作综合考虑,排除设备争用的因素,则实际操作需要耗费60周期以上,与8周期的要求相差太远。而上述操作中只有16个周期执行了RLDRAM操作,外存利用效率极低。
解决方法
本发明采用两种方法解决上述问题,概括地说就是:
1、压缩
将那些无严格数据相关的操作安排在流水线中同一时隙;因为设备独占而具有排他性的操作尽可能安排在流水线中连续时隙以减少复位操作。
2、折叠
利用链表单元数据和控制分离的特点,在调度当前信元的同时,提前取得下一个信元的控制信息,使得一个信元寻址和实际调度的时间被拉长到两个甚至三个流水线时隙(一个完整流水线时隙包含16周期)。
下面首先对“压缩”进行举例解释,其具体思想的表现形式又可细分为如下三种情况:
1、系统同时和FIFO,MRAM,SRAM,RLDRAM等设备存在联系。而这些设备是相对独立的,这意味着同一时间内可以有多种操作同时访问这些设备。
以之前的入队操作为例。入队操作步骤(5)和操作步骤(6)这两个操作就分别对应片内存储和RLDRAM操作,且无逻辑先后关系。因此可以并行。
2、节省复位操作的使用,压缩读写。
依然以入队操作为例进行说明。入队操作步骤(3)和入队操作步骤(4)分别对应一次SRAM读操作和一次SRAM写操作。
从逻辑上来讲二者没有依赖关系。操作步骤(3)中需要获取的指针信息直到下次入队操作才会被使用到。而操作步骤(4)对应的写入信息就是“当前空闲链表头”,在操作步骤(3)开始时已经知道。
换句话说,操作步骤(3)读出的信息不急用,操作步骤(4)所要写入的条件已经具备。两个操作,理论上也可以同时被执行。
但是SRAM只有一套数据和控制总线,是输入输出复用的,不能同时执行。如果等到操作步骤(3)所需的8个周期完成后再开始操作步骤(4),则全过程耗费13周期。
简单分析SRAM读写过程中总线的占用情况。设t0时刻,对SRAM执行了一次读操作,则可知在t0+7时刻其对应读取结果被送出。而从t0+1到t0+6这段时间内,SRAM的总线实际上是空闲的。能否在t0+1时刻执行写操作呢?完全可以。
具体做法是:把操作步骤(3)和操作步骤(4)间隔一个周期发出,操作步骤(4)被隐藏于操作步骤(3)的执行过程中,两者消耗的时间合计就只有8个周期。
3、存储设备的错峰使用。
以入队操作为例分析,操作步骤(2)与操作步骤(4)存在逻辑上的先后关系。
因此必须直到操作步骤(2)完成后才能开始步骤(4)的操作。通过方法二可以把操作步骤(3)、(4)合并为一个8周期操作。因此入队操作步骤(2)、(3)、(4)总共耗时12周期。出队操作也有类似结论。如果依然顺序执行入队和出队任务,则整个过程还是需要24周期。
其实大可不必。继续分析方法2中SRAM总线的占用情况可知SRAM总线仍有空闲。采用方法二以后t0到t0+7时刻,总线占用的情况为t0时刻读操作,t0+1写操作,t0+2时刻写复位操作,t0+7时刻读结果送出。而t0+3到t0+6这4个周期SRAM仍然是空闲的。这4个空闲的周期,正好可以供出队方向使用。
因为整个过程和现实生活中的错峰用电现象类似,本发明将此一优化方法称为“存储设备的错峰使用”。
通过合理的错峰使用,可以把整个过程控制在16个周期以内,节省8个周期。图5给出了“存储设备的错峰使用”思想的逻辑示意,按照串行的方式执行入队、出队的MRAM和SRAM读写操作,总共需要24个周期,但如果对SRAM进行存储设备的错峰使用,将入出队对SRAM读写错峰使用,可将时钟数压缩到16个周期。
以上就是采用的几种压缩流水线方法,通过“压缩”,可以把一个数据包对应的“MRAM和SRAM的寻址操作”压缩到16周期,但是仍然不能把所有操作压入16周期。
以入队操作为例,操作步骤(1)和操作步骤(2)存在逻辑上的先后关系,不能压缩或并行。
加上并发操作后的操作步骤(5)和操作步骤(6),整个过程仍然达到47周期,与16周期的要求还有差距。
为了进一步优化流水线设计就必须采用折叠流水的方法。
以入队操作为例,可以发现经过“压缩”后的操作步骤耗时呈现“4+16+11+16”分布。其中“4”对应获取信元控制信息,“16”对应MRAM、SRAM寻址(获取队列控制信息),“11”对应RLDRAM数据操作延迟,“16”对应写入64B数据所需时间。
上述每个部分都单独对应了信元的控制信息操作或者数据信息操作。
假设依次到达信元A、B、C、D要求入队。
利用数据与控制分离的特点,在流水线的实现过程中,在一个16周期内可以:
(1)读取信元D的控制信息。
(2)获取信元C的队列控制信息。
(3)开始执行信元B的RLDRAM操作。
(4)信元A写入完成。
上述4个步骤均可在16个周期内完成。而且像“读取信元D的控制信息”这样的操作甚至可以被拉长到16周期。
图6示意的是入队操作时的4级流水。
一个信元从开始处理到结束,共需要51个周期(协调流水线内部操作后,单个信元的处理时间比顺序执行有所加长)。
图6中用4种不同颜色来区分4个不同信元的处理过程。可以看出在4级流水线中最多可以同时存在4个信元的对应信息。而任意时刻可以最多有3个信元正在接受处理。等效后系统在入队方向上就可以每16周期处理一个信元。在出队方向也有类似的结论。于是一个系统可以并发处理6个以上信元,并在一个流水线时隙内完成其中的两个。流水设计使得系统可以实现在入队出队两个方向上,信元的背靠背传输,极大地提高了数据传输效率。
性能分析
经过流水线设计,信元在外存传输的过程中是背靠背的。但是受限于RLDRAM最小操作单元限制,在信元不足64B时,不足64B部分的外存带宽只能被浪费。另外,考虑RLDRAM在1024个周期内必须固定32个周期用于DRAM刷新。实际带宽效率只有η=96.875%。
结合图4所示信元格式以及采用芯片的具体性能,分析如下:
长度为yB的数据包会被分割为n个信元。其中
Figure GSB00000440522400171
在各个不同数据包长情况下的有效带宽:
Throughput ( y ) = 1 6 × 32 × y 64 n × 96.875 % Gbps . 40 ≤ y ≤ 1500
对应了公式得出的吞吐率曲线如图7所示。可以看出在设计上,系统带宽的利用率已经到达极限,1468字节情况下的最大带宽(5.1526Gbps)已经与外存最大有效带宽(166Mhz×32Bits×η=5.146Gbps)基本一致。
结论,我们采用数据与控制分离的链表单元结构,通过流水线设计、压缩控制信息等技术实现了外存芯片带宽的最大化利用,整体设计领先于国内外当前其他任何技术。

Claims (1)

1.基于链表的交换网络中队列缓冲管理方法,其特征在于,所述方法是一种基于链表的交换网络中多队列缓冲管理的方法,是在一种队列缓冲管理系统中依次按以下步骤实现的:
步骤(1).构建一个用于所述交换网络中多队列缓冲管理的队列管理系统,所述系统含有:FPGA芯片、缓存数据包DRAM和缓存数据包描述控制信息用的SRAM,其中:
FPGA芯片含有:队列管理模块和片内存储器,其中
队列管理模块设有:数据包输入端口和数据包输出端口,
片内存储器MRAM,与所述队列管理模块互连,
缓存数据包DRAM,与所述队列管理模块互连,所述缓存数据包DRAM是一种延迟压缩式的RLDRAM,以16个周期为读写操作的最小时间单位,实际配置为64B×512K,拥有读/写分离的数据总线,但读写复用一套地址及控制总线,
缓存数据包描述控制信息用的SRAM,型号为CY7C1370C,拥有一套读写复用的数据和控制总线,实际配置为32bits×512K;
步骤(2).把所选RLDRAM和SRAM共同组成一个“数据域和控制域分离”的链表单元,所述的每个链表单元包含一个64B的数据域和一个32bits的控制域,由拥有相同高位地址的所述RLDRAM和SRAM组成,
步骤(3).在所述FPGA中建立一个链表空间管理结构实现的512K个所述链表单元的管理:在该FPGA的片内存储器MRAM中额外维护每个逻辑队列的头尾指针,以对应于头尾链表单元对应的外存地址,再通过一个存有空闲链表头尾指针的独立队列Freelist,实现对空闲链表单元的管理,
步骤(4).把所述交换网络中多队列缓冲的控制信息进行最大限度的压缩后得到:流号Flow No,占16bits,分段信息Seg.Info占2bits,信元长度length占5bits,数据包总长度Total Length占9bits,其中:
流号Flow No,高位表示目的线卡号Card No,
分段信息Seg.Info,其中包括:四种状态:“01”表示数据包头,“00”表示数据包中段,“10”表示数据包尾,“11”表示独立数据包,
然后,在第一个链表单元中存储所述16bits流号和9bits数据包总长度信息,在后继链表单元的后继信元中存储所述分段信息Seg.Info,以便在对所述DRAM进行操作的同时读取所述SRAM中下一链表单元的控制信息,
步骤(5).按以下步骤对到达的4个信元A、B、C、D依次进行流水线操作以便等效于在16个周期内处理一个信元:
步骤(5.1).所述队列管理模块在4个周期内读取入队信元A,并获取该信元A的流号信息,
步骤(5.2).所述队列管理模块在4个周期内,对所述片内存储器MRAM进行一次读操作,查询步骤步骤(5.1)中获取的流号所属当前队列的队尾指针,同时,在8个周期内对所述的SRAM进行一次读操作,以查询当前空闲链表,申请一个新链表单元,获取当前空闲链表的下一跳指针,用来更新空闲链表,再在发出所述查询当前空闲链表一个周期后,用5个周期的时间对所述SRAM进行一次写操作,修改所述当前队列队尾链表的下一跳指针,使它指向所述新申请的链表,同时读取到达信元B的流号信息,在该步骤(5.2)中所执行的所有操作在16个周期内完成,去处理所述A和B两个信元,
步骤(5.3).所述队列管理模块对所述MRAM进行一次写操作,修改所述信元A中的队尾指针信息,同时,在11个周期内对所述RLDRAM进行一次写操作,所述信元A写入到对应所述RLDRAM的链表单元的数据域,与此同时,获取所述信元C的流号信息,在该步骤(5.3)中所执行的所有操作在16个周期内完成,同时处理所述A、B、C三个信元,
步骤(5.4).在每个所述的链表单元为64B的情况下,所述队列管理模块再耗时16个周期,结束所述信元A的写入,同时对所述信元B,在4个周期内执行对所述MRAM的写操作,修改队列的队尾指针信息,在11个周期内,对所述的RLDRAM执行写操作,写入所述信元B,同时获取所述信元D的流号信息,在该步骤(5.4)中的执行的所有操作在16个周期内完成,去处理所述A、B、C、D共4个信元,
步骤(5.5).把所述信元C的RLDRAM写入操作、所述信元D的查询当前流号所述当前队列的队尾指针的对所述MRAM的读操作,以及查询当前空闲链表的对所述SRAM的读操作、移入到下一阶段4个16周期内E、F、G、H四个信元来临时的第一个16周期内进行,以此类推。
CN2009100842780A 2009-05-20 2009-05-20 基于链表的交换网络中队列缓冲管理方法 Expired - Fee Related CN101594299B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009100842780A CN101594299B (zh) 2009-05-20 2009-05-20 基于链表的交换网络中队列缓冲管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009100842780A CN101594299B (zh) 2009-05-20 2009-05-20 基于链表的交换网络中队列缓冲管理方法

Publications (2)

Publication Number Publication Date
CN101594299A CN101594299A (zh) 2009-12-02
CN101594299B true CN101594299B (zh) 2011-06-29

Family

ID=41408753

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100842780A Expired - Fee Related CN101594299B (zh) 2009-05-20 2009-05-20 基于链表的交换网络中队列缓冲管理方法

Country Status (1)

Country Link
CN (1) CN101594299B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10083127B2 (en) 2016-08-22 2018-09-25 HGST Netherlands B.V. Self-ordering buffer

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101635682B (zh) * 2009-08-05 2011-12-07 中兴通讯股份有限公司 一种存储管理的方法和系统
CN102999434A (zh) * 2011-09-15 2013-03-27 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN102708207B (zh) * 2012-05-23 2015-06-03 深圳市同洲电子股份有限公司 一种接收处理数据的方法、装置及视频服务器
CN103516580B (zh) * 2012-06-26 2017-06-23 北京大学 一种基于消息队列实现消息接收与转发的方法及系统
EP2877920A4 (en) * 2012-07-25 2016-03-23 Hewlett Packard Development Co COMPUTER DEVICE AND GESTURE CONVERSION METHOD
CN104281539B (zh) * 2013-07-10 2019-02-26 北京旋极信息技术股份有限公司 一种缓存管理方法及装置
EP3166269B1 (en) 2014-08-07 2019-07-10 Huawei Technologies Co., Ltd. Queue management method and apparatus
CN107689923B (zh) 2016-08-04 2021-02-12 华为技术有限公司 报文处理方法及路由器
CN108462654B (zh) * 2016-12-12 2021-12-24 中国航空工业集团公司西安航空计算技术研究所 增强型gjb289a总线通信管理和调度方法
CN109933303B (zh) * 2019-02-28 2020-09-18 中国人民解放军陆军工程大学 一种多用户高速伪随机序列发生器电路及其工作方法
CN110337097B (zh) * 2019-06-27 2020-10-27 安凯(广州)微电子技术有限公司 一种蓝牙基带芯片的广告数据管理方法及装置
CN110519180B (zh) * 2019-07-17 2022-09-13 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 网卡虚拟化队列调度方法及系统
CN111259014B (zh) * 2020-02-04 2023-01-10 苏州浪潮智能科技有限公司 一种fpga的单向链表数据存储方法及系统
CN112118262B (zh) * 2020-09-21 2022-07-29 武汉中元华电科技股份有限公司 一种基于动态内存分配实现数据排序与合并的系统及方法
CN114489506B (zh) * 2022-01-21 2024-02-27 杭州海康存储科技有限公司 存储访问控制装置、方法及存储设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10083127B2 (en) 2016-08-22 2018-09-25 HGST Netherlands B.V. Self-ordering buffer

Also Published As

Publication number Publication date
CN101594299A (zh) 2009-12-02

Similar Documents

Publication Publication Date Title
CN101594299B (zh) 基于链表的交换网络中队列缓冲管理方法
CN106294234B (zh) 一种数据传输方法及装置
CN101621469B (zh) 数据报文存取控制装置和方法
US7882312B2 (en) State engine for data processor
CN102047241B (zh) 本地与全局数据共享
US8891517B2 (en) Switching device
CN101150485A (zh) 一种零拷贝缓冲区队列网络数据发送的管理方法
CN102045258A (zh) 数据缓存管理方法及装置
US9690507B2 (en) System and method for enabling high read rates to data element lists
CN104778025B (zh) 基于随机访问存储器的先入先出存储器的电路结构
CN102968390A (zh) 基于预先解码分析的配置信息缓存管理方法及系统
CN114257559B (zh) 一种数据报文的转发方法及装置
CN104615684A (zh) 一种海量数据通信并发处理方法及系统
CN109215565A (zh) 一种接收卡、数据存储调度方法及led显示控制系统
CN109977822A (zh) 数据供给方法、模型训练方法、装置、系统、设备和介质
CN101594201B (zh) 链式队列管理结构整合错误数据过滤的方法
CN103731364B (zh) 基于x86平台实现万兆大流量快速收包的方法
CN103827836B (zh) 存储数据的方法和装置
CN102118304B (zh) 一种信元交换方法和装置
CN103455367A (zh) 用于实现可重构系统中多任务调度的管理单元和方法
CN101296373A (zh) 一种基于素材交换格式的多媒体数据处理系统及方法
CN102780620A (zh) 一种网络处理器和报文处理方法
CN102833541B (zh) 用于mpeg-2视频解码的sdram控制系统
CN102207850B (zh) 一种动态可重构处理器中层次化执行配置流的方法
CN105812620B (zh) 数据转换器及其工作方法

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110629

Termination date: 20160520