一种流队列缓存空间地址回收的方法
文献发布时间:2023-06-19 11:05:16
技术领域
本发明涉及缓存空间释放技术领域,具体是一种流队列缓存空间地址回收的方法。
背景技术
在流量管理系统中,已入队存入缓存空间且长时间无法出队的流队列(拥塞流),会长时间占用缓存空间。缓存空间长时间得不到释放,使得缓存空间利用率下降,影响其他队列正常入队,进而产生非拥塞流丢包,降低系统服务质量。
目前,释放拥塞流占用缓存空间的方法有:一、监控到拥塞流,主动清空这条流。二、固定周期扫描缓存队列,扫描周期内未出队,则主动老化该队列,产生出队调度。三、提前丢弃拥塞流。
但以上种方法存在配置复杂,缓存空间回收慢,实时性不好,缓存利用率低的缺点;对于出口长时间反压、链路不可用导致的拥塞,不能自动回收拥塞流占用的缓存空间的缺点。
发明内容
本发明的目的在于提供一种流队列缓存空间地址回收的方法,在正常调度出队的基础上增加了老化出队功能,老化在缓存内存储时间最长的报文,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种流队列缓存空间地址回收的方法,
包到达入队模块后,先向空闲指针池(缓存空间地址管理)申请空闲地址,产生包入队命令;然后将包分片写入申请的缓存空间,同时维护队列链表串接关系,生成包入队描述符给队列调度模块和包老化模块。
包存储空间接收来自入队模块的写入命令,存储包;接收来自出队模块的读命令,读返回包数据。
队列调度模块按照调度策略(RR调度,SP调度),合并老化模块送过来的老化队列后,综合判断调度队列出队,同时队列调度模块响应出口反压;对于老化队列的出队,打上丢弃标记。
出队模块接收来自队列调度模块的出队队列号信息,维护队列链表,生成出队读缓存命令,读出数据,完成出队操作;将完成出队的命令地址送给存储空间地址管理模块回收,同时将没有丢弃标记的出队命令信息送给老化模块,进行出队操作。
老化模块负责对缓存中报文的地址进行排序管理,并根据缓存的深度以及报文在缓存中的时间进行丢弃与否的判断;当缓存深度超过一定阈值,或者报文在缓存中存储时间超过一定阈值后,就要对报文进行丢弃。
本发明所述的老化方法,包括时间触发老化,空间触发老化,拥塞触发老化。
作为本发明的进一步方案:报文丢弃的判断满足如下三个条件:
1、缓存深度Buffer_Depth>设定缓存阈值Threshold_Depth;
2、报文存储时间T
3、收到拥塞状态指示CNG_State。
作为本发明的进一步方案:三个条件能够通过寄存器配置选择如下丢弃策略:
(1)任何一个满足即丢弃;
(2)任两个满足即丢弃;
(3)三个全部满足即丢弃。
作为本发明的进一步方案:所述缓存深度(Sys_Depth)的维护分为系统级和用户级(User_Depth);系统级管理整个缓存的使用情况,每个报文的进入或者退出缓存都会更新系统级缓存的深度;用户级深度是统计特定用户占用的缓存量,只有该用户的报文进入或者退出缓存才会更新该用户的缓存深度计数;报文丢弃能够基于系统级和用户级的缓存深度统计进行更丰富的策略配置。
作为本发明的进一步方案:报文存储时间(T
作为本发明的再进一步方案:每个报文进入缓存时,会将此刻的系统时间T
与现有技术相比,本发明的有益效果是:
1、本发明能够快速回收拥塞流占用缓存空间,无需强制流队列清空来回收缓存空间。
2、本发明能够提高缓存利用效率,合理丢弃拥塞流包,释放拥塞流长时间占用的缓存给正常流使用,避免正常流因为没有缓存空间而断流。
附图说明
图1为一种流队列缓存空间地址回收的方法的流程图。
具体实施方式
下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
请参阅图1,一种流队列缓存空间地址回收的方法,其流程如下:
包到达入队模块后,先向空闲指针池申请空闲地址,产生包入队命令。然后将包分片写入申请的缓存空间,同时维护队列链表串接关系。生成包入队描述符给队列调度模块和包老化模块;
包存储空间接收来自入队模块的写入命令,存储包。接收来自出队模块的读命令,读返回包数据;
队列调度模块按照调度策略,合并老化模块送过来的老化队列后,综合判断调度队列出队,同时队列调度模块响应出口反压。对于老化队列的出队,打上丢弃标记;
出队模块接收来自队列调度模块的出队队列号信息,维护队列链表,生成出队读缓存命令,读出数据,完成出队操作;将完成出队的命令地址送给存储空间地址管理模块回收。同时将没有丢弃标记的出队命令信息送给老化模块,进行出队操作;
老化模块负责对缓存中报文的地址进行排序管理,并根据缓存的深度以及报文在缓存中的时间进行丢弃与否的判断;当缓存深度超过一定阈值,或者报文在缓存中存储时间超过一定阈值后,就要对报文进行丢弃。
报文丢弃的判断满足如下三个条件:
1.缓存深度Buffer_Depth>设定缓存阈值Threshold_Depth;
2.报文存储时间T
3.收到拥塞状态指示CNG_State;
上述三个条件能够通过寄存器配置选择如下丢弃策略:
1.任何一个满足即丢弃;
2.任两个满足即丢弃;
3.三个全部满足即丢弃;
缓存深度Sys_Depth的维护分为系统级和用户级User_Depth,系统级管理整个缓存的使用情况,每个报文的进入或者退出缓存都会更新系统级缓存的深度;用户级深度是统计特定用户占用的缓存量,只有该用户的报文进入或者退出缓存才会更新该用户的缓存深度计数;报文丢弃能够基于系统级和用户级的缓存深度统计进行更丰富的策略配置。
报文存储时间(T
上面对本专利的较佳实施方式作了详细说明,但是本专利并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本专利宗旨的前提下作出各种变化。
- 一种流队列缓存空间地址回收的方法
- 一种基于帧缓存队列的流视频人脸检测加速方法