发明内容
传统的网络内容存储技术,使用单层存储模型,且未充分利用DRAM芯片中访问旧行的速率远远大于访问新行的速率这一特性,导致网络内容存储设备的传送待机时间长、吞吐量低、存储转发速率慢。
为解决上述技术问题,本发明采用下述技术方案:
一种用于智慧协同网络的网络组件内容存储方法,该方法的步骤包括
建立由静态随机存储器SRAM和动态随机存储器DRAM组成的双层存储模型,以SRAM作为DRAM的缓存;
在智慧协同网络中的服务标识中加入内容总大小TOTAL_SIZE字段,用于表示服务内容的总大小;
根据所述TOTAL_SIZE字段预分配一端连续的储存空间,用于存储服务内容的其他数据包;
把整个DRAM主存作为一个哈希桶,即一个固定大小的、没有链表的哈希表,优化内容索引方法,从而去掉存储在SRAM中95%~98%的内容索引表;
将同一内容的不同数据包存储在存储空间的连续位置,使同一内容的数据包具有空间局部性,提高储存模块处理请求的速率。
优选的,所述DRAM中的每个内容块中都存有与内容相关的一些信息,该信息元为元信息,所述元信息包括服务标识信息。
优选的,在DRAM内容更新时,新的内容块可以替换旧的内容块。
优选的,该方法的步骤进一步包括当遇到超出DRAM中固定块大小的内容时,其超出部分保存在循环log的剩余块中;每个块的所述元信息中包含了内容log地址,哈希值是i的对应第i个DRAM块。
优选的,所述索引表项包括缓存内容在DRAM中的基地址、DRAM单元标志位、在SRAM中的基地址、SRAM单元标志位和一个循环log地址。
优选的,该方法的步骤进一步包括若SRAM缓存丢失,则从DRAM中一次传输SRAM块大小的数据到SRAM。
一种用于智慧协同网络的网络组件内容存储模块,该装置包括静态随机存储器SRAM和动态随机存储器DRAM,所述SRAM作为DRAM的缓存,并去掉储存在SRAM中的95%~98%的内容索引表。
优选的,所述存储模块进一步包括循环模块,用于当遇到超出DRAM中固定块大小的内容时,保存其超出部分。
优选的,所述SRAM缓存与DRAM主存之间地址相关联的方式可以为直接映射、全相连或组相联。
本发明的有益效果如下:
本发明所述技术方案与现有技术相比,本发明采用网络内容的局部性特点设计存储模块的两层模型,使用SRAM作为存储模块中DRAM的高速缓存。这里使用的网络内容的局部性包括时间局部性与空间局部性两部分。网络内容的时间局部性是指在较短的时间段内,同一或相关网络内容将频繁被访问。网络内容的空间局部性是指同一网络内容的数据包将被存储在网络设备连续的存储区域中,SRAM缓存与DRAM主存直接交互数据以SRAM块为单位进行,块的大小与存储区域的大小根据网络流量特点设计。
具体实施方式
为了更清楚地说明本发明,下面结合优选实施例和附图对本发明做进一步的说明。附图中相似的部件以相同的附图标记进行表示。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本发明的保护范围。
本发明公开了一种网络组件内容存储方法和存储模块。如图2所示,为本发明实施例所使用的网络组件模型框图,实施例在此模型基础上设计,网络组件由四部分组成:
1)转发控制器:负责查表存储转发网络数据;
2)请求表:保存服务标识与端口号关联关系,即未得到服务的请求服务标识与请求端口关系对;
3)转发表:记录服务标识前缀与一个或多个端口的关系;
4)存储模块:保存流经网络组件的可保存的数据内容。
如图3所示,为本发明所建立的存储模块的示意图,本发明采用两层存储结构,使用SRAM作为存储模块中DRAM的高速缓存。
现有网络设备中的内容存储都是一层结构,由于存储芯片技术一直没有跟上转发芯片技术的发展,设计者为了能满足高速转发网络设备的需求,往往需要使用大量更快的存储芯片,但如表1所示快速的存储芯片价格高昂,这也导致了支持内容存储的网络设备高昂的制作成本。本发明在网络组件的存储模块中设计出两层存储结构模型,目的是解决现有技术中的不足,使转发速率与制作成本达到权衡,从而实现提高内容存储的读写速率。
在DRAM芯片的访问过程中有个重要的特性,如表1所示,访问DRAM旧行的时间远远大于访问新行的时间。本发明利用这一特性,将存储模块设计为两层存储模型:一方面开辟连续的存储空间来存储同一内容的数据包;另一方面是网络流的时间局部性,使得缓存在SRAM的内容能够被多次引用。正是这点使两层存储模型能够在网络设备中取得成功。
如图4所示,为现有技术中智慧协同网络的服务标识组成结构图,本发明为了构建存储内容空间局部性,如图5所示,在服务标识中加入TOTAL_SIZE字段,表示的是服务内容的总大小。当服务内容的数据包到来的时候,存储模块根据TOTAL_SIZE字段预分配一段连续的存储空间,用于存储服务内容的其他数据包,从而让同一内容的其他数据包可以存储在一段连续的存储空间里面,便于逐行读写。
如图6所示,为网络组件存储模块DRAM主存储器的一种组织方式。为了进一步减少昂贵的SRAM的使用,本发明先尝试去掉存储在SRAM的内容索引表,把整个DRAM主存看做一个哈希桶,即一个固定大小的、没有链表的哈希表。同一内容保存在DRAM的固定大小的块中,通过对内容服务标识的哈希,得到这个服务内容的块地址偏移量,从而得到其在DRAM主存中存储位置。DRAM每一个内容块中都存有与内容相关的一些信息,称为元信息,为了防止哈希冲突导致的错误判断,元信息包含服务标识信息,同时新的内容块可以替换旧的内容块。因为有些内容大小可能大于DRAM中固定大小的块的大小,本发明引入循环log,这个循环log保存了超出块大小的内容的剩 余部分。同时每个块的元信息中也包含了内容log地址信息,哈希值是i的对应第i个DRAM块,剩余块在循环log里面。本发明的一种思想,即把整个DRAM存储空间看做哈希桶,哈希桶的索引就是地址,通过内容名字的哈希得到,但这样做也会增加命中丢失的时延,为了权衡两者,我们依然选择在SRAM中加入少量内容索引。保留SRAM中内容索引表的数量需要根据实际应用决定,本方法的索引使用量有现有技术中商用的缓存策略少20-50倍。
上述这种方式虽然减少SRAM的使用,但是它导致每次请求都要访问DRAM进行查询,即使DRAM中没有相关内容,存储内容之前也必须访问一次,从而大大增加了查询与存储内容的时间,因此在存储模块模型设计中使用一种更为折中的方案,即仍然使用少量的索引表在SRAM中,从而在进一步节省SRAM大小的同时,又能不影响存储模块处理请求的速率。
如图7所示,为DRAM内容在SRAM中的一个索引表项格式。每一个索引表项都包含了缓存内容在DRAM中的基地址、DRAM单元标志位,在SRAM中的基地址、SRAM单元标志位与一个循环log地址。循环log表项用于存储大于8个单元内容的剩余部分的下一个索引项。在这里DRAM,SRAM的最小单元被设为1500字节,同时DRAM中一个块有8个基本单元,考虑到SRAM缓存比较小,SRAM缓存中一个块只有4个基本单元,所以索引表项中分别就有8位与4位的单元标志位。单元标志位用于标识相应的单元是否为空,标志位为0表示相应的单元为空,没有数据,为1表示有数据。当SRAM缓存丢失时,从DRAM中一次传输SRAM块大小的数据到SRAM。
SRAM缓存与DRAM主存之间地址相关联的方式有很多种,如直接映射、全相联、组相联等。每个DRAM主存单元地址对应一个确定的SRAM地址,称为直接映射;主存中的一个基本单元可以放在SRAM中的任何位置的单元中,这种机制叫做全相联;介于直接映射和全相联之间的设计叫做组相联。在本实施例中,我们使用直接映射。
为说明存储模块的数据操作,下面说明本实施例中网络组件处理数据包的流程,如下:
1)服务请求包
服务请求包从某个端口进来时,此处为了方便理解,假设服务请求包从端口1进入,网络组件首先检测所请求的内容是否保存在存储模块中,如果请求的内容在存储模块中,则直接将请求的内容数据通过端口1发送出去。如果不在存储模块中,则查找请求表判断这个内容是否正在被请求:
①若正在被请求,且请求端口相同,则丢弃服务请求包,请求包不做任何变化。若请求端口不同,则在请求的相应表项中追加请求的端口号,更新请求时间,然后丢弃服务器请求包;
②若没有被请求过,则添加相应请求表项到请求表,并查找转发表,将服务请求包通过一个或多个转发端口转发出去。
2)数据包
数据包从某个端口进入网络组件,网络组件的转发控制器首先查找请求表,判断数据包的服务是否被请求:
①若没有被请求,则直接丢弃数据包;
②若是被请求的服务数据,则将数据保存到存储模块,同时根据请求表将数据转发到一个或多个转发端口。当被请求的服务内容全部转发完成时,转发控制器删除相应的请求表项。
如图8所示,为网络组件存储模块的查询模型,本实施例使用了两个队列:FFD,FFS,对内容请求信息进行排队。若服务请求包请求的内容只存储在DRAM中,则对应的请求信息进入FFD队列;若服务请求包请求的内容存储在SRAM缓存中,则对应的请求信息进入FFS。当内容只存储在DRAM中,而不存在SRAM,称为SRAM缓存丢失。当SRAM缓存丢失时,相应内容将逐行按SRAM块大小从DRAM中传输到SRAM中。传输完成之后置位相应索引表项的SRAM单元标志位,同时请求信息出FFD队列,入FFS队列。为了提高转发速率,转发控制器只转发请求消息在FFS中排队的相应请求内容,即转发控制器只转发在SRAM中缓存的内容。这样做同时也消除了网络组件中转发控制器的待机等待,使得转发控制器可以利用原来的待机等待时间去做端口转发事务。
关于存储模块的插入,删除等操作。当数据包到达网络组件的存储模块时,首先写入SRAM中,同时添加内容索引表项。写入SRAM中的内容只有当其要被新内容替换的时候,才会被写入DRAM主存中,同时更新相应的表项。使用这种惰性插入主存的方法能最大限度的节省转发控制器的插入待机时间。删除存储模块中的内容时,只需将索引表项的标志位置零,而不用对SRAM缓存或DRAM主存进行擦除,当新内容写入时直接覆盖标志位为零的存储单元即可。
下面通过具体的实用数据来进一步说明两层内容存储模型的优势。
参照表1,表2中的数据,SRAM的访问时间(SRAM access Time,ST)为0.45ns,SRAM的数据位宽(SRAM Data Width,SDW)为64比特,8字节;DRAM访问新行的时间(DRAM access New row Time,DNT)为40ns,DRAM访问旧行的时间(DRAM access Old row Time,DOT)为1.25ns,DRAM的数据位宽(DRAM Data Width,DDW)为64比特,8字节。假设DRAM芯片的行大小(Row Size,RS)为2KB,SRAM缓存的块大小(SRAM Block Size,SBS)为4KB,DRAM主存的块大小(DRAM Block Size,DBS)为8KB。
请求内容在SRAM缓存则称为SRAM缓存命中。请求内容不在SRAM缓存中,但在DRAM主存中,则称为SRAM缓存丢失。SRAM请求命中率HIT_RATE,表示SRAM缓存命中占SRAM缓存命中次数与SRAM缓存丢失次数之和的百分比,SRAM缓存丢失率MISS_RATE的计算方法与HIT_RATE相仿。存储模块内容丢失代价MISS_TIME,即内容丢失时,内容从DRAM主存中按SRAM块的大小(内容小于一个SRAM块按内容大小算)传输到SRAM中,传输一个字节所需要的平均时间。因为DRAM主存按块连续存储,因此其丢失代价主要由访问DRAM新行时间、访问DRAM旧行时间、查找索引表时间及读取SRAM时间组成。这个丢失代价可由公式1计算,其中┌X┐表示取不小于X的最小整数。
MISS_TIME=(┌SBS/RS┐*DNT+┌SBS/DWS┐*DOT)/SBS+HIT_TIME (1)
公式1中,HIT_TIME为SRAM缓存命中代价,即内容在SRAM缓存中传输一个字节到网络组件转发控制器所需的时间,考虑查找索引表的时间,HIT_TIME计算如公式2所示。
HIT_TIME=(2*ST)/SDW (2)
衡量一个存储模块是否高速的一个重要指标就是其平均读写时间,在两层内容存储模型中,存储模块的平均读写时间AVG_TIME可由公式3计算得出。
AVG_TIME=MISS_RATE*MISS_TIME+HIT_RATE*HIT_TIME (3)
命中率与丢失率之和为1,则公式3又可表示为
AVG_TIME=MISS_TIME-(MISS_TIME-HIT_TIME)*HIT_RATE (4)
将公式1、2及相关参数代入公式4,得到此两层模型的平均读写时间AVG_TIME如公式5所示。
AVG_TIME=(0.289-0.176*HIT_RATE)ns (5)
又HIT_RATE取值在0到1之间,所以AVG_TIME取值在0.113到0.289之间,换算成速率,则此两层存储模块的读写速率在28Gbps到70Gbps之间。 由于网络数据存在很强的时间局部性,通过模拟实验,使用DRAM主存0.05%大小的SRAM做高速缓存,HIT_RATE通常能达到50%,此时两层存储模块的平均读写速率为40Gbps。对比现有技术中的单层内容存储模型,使用SRAM做索引,DRAM做唯一存储器,易算出单层内容存储模型的理想读写速率为1.6Gbps。可见,使用两层内容存储模型的读写速率比单层存储模型快25倍。
综上所述,本发明所述技术方案利用网络内容的局部性特点设计存储模块的两层模型,使用SRAM作为存储模块中DRAM的高速缓存。这里使用的网络内容的局部性包括时间局部性与空间局部性两部分。网络内容的时间局部性是指在较短的时间段内,同一或相关网络内容将频繁被访问。网络内容的空间局部性是指同一网络内容的数据包将被存储在网络设备连续的存储区域中,SRAM缓存与DRAM主存直接交互数据以SRAM块为单位进行,块的大小与存储区域的大小根据网络流量特点设计。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定,对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。