面向网络流量的缓存替换算法比较与分析

       这篇文章是用MarkDown文本编辑器写的,第一次尝试这种写法,刚开始写还很变扭。之所以用它,因为这段时间看论文,写博客的时候需要输入数学公式,原先使用的文本编辑器不能很好的表示出来,每次都是我先用word输入好,转换为ptf再截图贴上来的,很繁琐。当然这个我用着还是有些不顺手,写博客过程中遇到些问题到现在还没解决,比如我创个表格,如何使之居中的问题。好了,接下来是正文。

摘要: 通过分析网络流量的新近度与频度特征,为基于最近最少使用(LeastRecentlyUsed,LRU)和最近最不常使用(LeastFrequentlyUsed,LFU)的缓存替换算法给出实际依据。对仿真环境和实际系统的实验结果表明,类LRU算法较LFU算法更适用于网络流量,而缓存空间较大时 ,随机替换算法较LRU算法更适用于多核环境。 背景: 在流缓存模型中,进入转发设备的报文首先匹配流缓存,若缓存命中,则按照缓存的转发信息直接转发报文,若缓存未命中,则进入转发表进行匹配,并插入新的缓存。如图一所示:

图一

       令缓存查询时间为 t 1 t_1 t1,缓存缺失时间包括转发表查询时间和缓存更新时间,分别为 t 2 t_2 t2和为 t 3 t_3 t3,其他处理时间为 t 0 t_0 t0,缓存命中率为 p p p,则报文平均处理时间为: t = t 1 + ( 1 − p ) ( t 2 + t 3 ) + t 0 t = t_1 + (1 - p)(t_2 + t_3) + t_0 t=t1+(1p)(t2+t3)+t0

       为了提高为提高报文转发性能,除了减少缓存查询时间和缓存更新时间,更多的研究集中于提高缓存命中率,一方面以规则缓存代替报文首部缓存,以提高缓存空间利用率,另一方面采用适合网络流量特征的缓存替换方法。

       常用的缓存替换方法有两种,类LRU算法和类LFU算法。类LRU算法的核心假设是"如果流被访问的次数越多,那么将来被访问的几率也更高",即流的访问具有较高的频度(frequency)。

       本文主要比较了六种不同的算法,分别如下:

  1. LRU算法:淘汰上一次访问时间最早的流,替换为 f N + 1 f_{N+1} fN+1。LRU算法的问题在于,流量较小的流会挤占流量大的流的缓存空间。
  2. SLRU算法:将缓存划分为2个LRU队列,第一个LRU队列作为观察窗口,窗口内出现2次以上的流进入第二个LRU队列。第二个LRU队列中被替换的流作为新的流插入第一个LRU队列。与LRU算法相比,SLRU算法减少了只包含1个报文的流对其他流的缓存空间的挤占。SLRU算法的问题在于,观察窗口大小固定, 而流量特征会随时间变化。
  3. LIRS算法:LIRS算法定义了IRR(Inter-ReferenceRecency)的概念:同一条流连续2次访问期间,访问过的不重复的流的数量。该算法将流按照IRR大小分为低IRR和高IRR,按照固定比例共用缓存空间。使用FIFO队列缓存高IRR流,使用栈作为观察窗口记录流的IIR相对大小,低IRR的流一定存储于缓存中。新访问的流 f N + 1 f_{N+1} fN+1替换掉FIFO队尾的高IRR流。当FIFO队列中的高IRR流第二次访问时,替换掉IRR最高的低IRR流,后者插入FIFO队首。SLRU算法中的观察窗口(第一个LRU队列)长度固定,当流密集访问时,无法将流缓存至第二个LRU队列。LIRS算法的观察窗口(栈)可以随流量访问规律的变化而动态增减,不会错过低IRR的流。
  4. 完美LFU算法:记录所有流的访问次数,从{ f 1 , f 2 , … , f N + 1 f_1,f_2,…,f_{N+1} f1f2fN+1}中替换访问次数最少的流。其问题在于,记录所有流的访问信息需要较大的存储空间,同时也很耗时。
  5. In-Cache算法:只记录缓存内的流的访问次数,用fN+1替换{ f 1 , f 2 , … , f N + 1 f_1,f_2,…,f_{N+1} f1f2fN+1}中访问次数最少的流。LFU算法的问题在于,随着流量特征变化,旧的大象 流不再出现,却会一直占用缓存空间。
  6. 随机替换算法:从{ f 1 , f 2 , … , f N + 1 f_1,f_2,…,f_{N+1} f1f2fN+1}中随机选择一条流,用 f N + 1 f_{N+1} fN+1替换。
  7. 理想的缓存替换算法:从{ f 1 , f 2 , … , f N + 1 f_1,f_2,…,f_{N+1} f1f2fN+1}中替换下次出现最远的流,设为 f j f_j fj。在 f N + 1 f_{N+1} fN+1下次到达前,其他流都会先被访问。下次出现最远的流,也是IRR最大的流。
算法时间复杂度空间复杂度
LRUO(1)O(N)
SLRUO(1)O(N)
LIRSO(1)O(cN)
In-Cache LFUO(1)O(N)
完美LFUO(1)O(N)
随机替换O(1)O(N)

       文章通过仿真环境和实际系统对各个算法进行了分析,结果表明,当缓存空间有限时,应优先考虑缓存命中率较高的类LRU算法。在多核环境下,若缓存空间充足,应优先考虑多核扩展性良好的随机替换算法。鉴于缓存替换算法对报文处理应用性能提升起到的关键作用,今后将在比较已有算法性能的基础上,研究性能更优的面向网络流量的缓存替换算法。由于我看这篇文章的目的是了解缓存的基本算法,所以看了前半部分和结论我的目的已经达到,所以理论分析是实验过程我没有细看,大家感兴趣可以看看。
参考:[1]曹作伟,陈晓,倪宏.面向网络流量的缓存替换算法比较与分析[J].计算机与现代化,2019(08):50-56.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值