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

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

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

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

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

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

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

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

  1. LRU算法:淘汰上一次访问时间最早的流,替换为fN+1f_{N+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的流一定存储于缓存中。新访问的流fN+1f_{N+1}替换掉FIFO队尾的高IRR流。当FIFO队列中的高IRR流第二次访问时,替换掉IRR最高的低IRR流,后者插入FIFO队首。SLRU算法中的观察窗口(第一个LRU队列)长度固定,当流密集访问时,无法将流缓存至第二个LRU队列。LIRS算法的观察窗口(栈)可以随流量访问规律的变化而动态增减,不会错过低IRR的流。
  4. 完美LFU算法:记录所有流的访问次数,从{f1f2fN+1f_1,f_2,…,f_{N+1}}中替换访问次数最少的流。其问题在于,记录所有流的访问信息需要较大的存储空间,同时也很耗时。
  5. In-Cache算法:只记录缓存内的流的访问次数,用fN+1替换{f1f2fN+1f_1,f_2,…,f_{N+1}}中访问次数最少的流。LFU算法的问题在于,随着流量特征变化,旧的大象 流不再出现,却会一直占用缓存空间。
  6. 随机替换算法:从{f1f2fN+1f_1,f_2,…,f_{N+1}}中随机选择一条流,用fN+1f_{N+1}替换。
  7. 理想的缓存替换算法:从{f1f2fN+1f_1,f_2,…,f_{N+1}}中替换下次出现最远的流,设为fjf_j。在fN+1f_{N+1}下次到达前,其他流都会先被访问。下次出现最远的流,也是IRR最大的流。
算法 时间复杂度 空间复杂度
LRU O(1) O(N)
SLRU O(1) O(N)
LIRS O(1) O(cN)
In-Cache LFU O(1) O(N)
完美LFU O(1) O(N)
随机替换 O(1) O(N)

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