大数据算法课程笔记8a:page replacement algorithm
2017-11-06 22:23
549 查看
本节课主要是介绍page replacement algorithm的相关算法,包括offline和online。
所谓page fault,即内存中不存在所需数据而引入的错误,为了解决这个错误就需要从硬盘中读取数据到内存中。所以每个page fault都对应于一次硬盘读取,耗费大量时间。读到的数据需要覆盖内存中的某些现有数据,如何选择被替代的内存中的数据就是page replacement algorithm处理的问题。
(内存和硬盘的关系和cache与内存的关系一样,都是使用类似的思想)
clairvoyant 算法的最优结果也是所有算法所能满足的最优算法,定义:Given a page arrival sequence z, OPT(z) represents the minimum number of page faults by the best clairvoyant algorithm knowing the sequence z of page arrivals.
算法简介:每次选取最晚被请求的元素进行替换。具体地,设第i次请求ri造成了一次page fault,对于cache中的每个元素cj,定义fj=argmink{rk==cj∧k>i},则选择cache中的第j=argmaxkfk个元素cj进行替换。
例子:
https://blog.henrypoon.com/blog/2014/02/02/proof-of-the-farthest-in-future-optimal-caching-algorithm/
https://cseweb.ucsd.edu/classes/wi12/cse202-a/lecture4-final.pdf
基本思想:大框架是归纳法,结合分类讨论法。
设FIF的replacement schedule为SFF,而对于任意满足请求序列的schedule S,我们需要证明#fetches(SFF)≤#fetches(S)。所谓schedule,记录了算法的所有操作,例如insert a、evict b,通常一个page fault对应于一对insert和evict。 schedule 的一个子集是reduced schedule,即lazy schedule,只有当request某元素的时候才会insert该元素。一个事实是:对于任意schedule S, 永远存在一个reduced schedule S∗,满足#fetches(S∗)≤#fetches(S)。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201711/42f5cf5ab00de9ff6c21963ee9a3ff6e)
基于以上的定义以及事实,我们开始证明FIF的最优性。明确目标以及归纳法的假设:
目标:∀S,#fetches(SFF)≤#fetches(S),即对于所有可以满足request的reduced schedule S,均满足硬盘读取数不小于SFF的读取数。
归纳法的假设:∃Sj, such that Sj makes the same decisions as SFF for requests from r1 to rj, and #fetches(Sj)≤#fetches(S).
Base Case: 令S0=S, 则有#fetches(S0)≤#fetches(S),并且S0=SFF for requests from r1 to r0 (NULL)
假设存在Sk满足 Sk makes the same decisions as SFF for requests from r1 to rk, and #fetches(Sk)≤#fetches(S).
我们从Sk构造Sk+1,使得 Sk+1 makes the same decisions as SFF for requests from r1 to rk+1, and #fetches(Sk+1)≤#fetches(S). 方法如下:
若rk+1 in cache,则Sk和SFF均不会进行任何操作(SFF基于FIF算法,Sk基于reduced),所以Sk+1=Sk
若rk+1 misses, and Sk and SFF evict the same element, 则有Sk在rk+1处的决策和SFF一致,所以Sk+1=Sk。
若rk+1 misses, and Sk and SFF evict different elements, suppose Sk evicts ci and SFF evicts cj. 即两者分别替换的不同元素,从而有两个元素ci,cj参与讨论,而对于两个元素分别有request以及evict两种可能操作。我们对rk+1之后Sk首次涉及ci,cj的操作进行分情况讨论:
Next there is a request rd to ck, and Sk evicts cj, 即Sk需要替换cj了。调换两者的删除位置,使得Sk+1在第rk+1处与SFF一样删除cj,而在rd处删除ck,同样满足请求序列,并且#fetches(Sk+1)=#fetches(Sk)≥#fetches(SFF)。
Next, there is a request rd to ci, and Sk evicts cj. 即Sk删除ci之后,在请求序列里又遇到了ci,而且这次删除了cj。我们使得Sk+1在rk+1处删除cj,而在rd处即不需要进行任何操作,同样满足请求序列,并且#fetches(Sk+1)=#fetches(Sk)−1>#fetches(SFF)
Next, there is a request rd to ci and Sk evicts c′. 即Sk删除ci之后,在请求序列里又遇到了ci,这次删除了一个非cj的元素。注意到此次构造Sk+1需要满足cj不被删除、所以我们同样使得Sk+1在第rk+1处与SFF一样删除cj,而在rd处与Sk一样删除c′,而插入cj。这样构造的Sk+1不是reduced,需要基于上诉Fact转化为reduced schedule S∗k+1,并且满足S∗k+1 makes the same decisions as SFF for requests from r1 to rk+1, and #fetches(S∗k+1)≤#fetches(Sk+1)=#fetches(Sk)≤#fetches(S).
Next, there is a request to cj, which is not possible, since fj>fi.
综上,基于归纳原则,我们证明了∃Sn, such that Sn makes the same decisions as SFF for requests from r1 to rn, 从而Sn=SFF 而且 #fetches(SFF)=#fetches(Sn)≤#fetches(S).
基于上诉结论,我们最终证明了FIF的最优性。
这里主要介绍一种最简单的在线算法,然后对其进行分析。进而讨论所有在线算法的下界。
使用Cost(A,z)OPT(z)评价算法A在给定z上的表现,进而有最差情况maxzCost(A,z)OPT(z)(competitve ratio)以及平均情况∑z∈uCost(A,z)OPT(z)。
例子:
性能分析:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201711/f731c278792ea37797136474032f18f7)
首先将请求序列分为b个区块,每个区块内最多有k个元素,并且使得b尽可能小。
那么LRU对于每个区块最多遇到k个page fault,从而整体而言最多bk个page fault。而对于最优算法,至少遇到b个page fault,因为每次跳跃区块的时候都会遇到一个前一区块从未遇过的第k+1个元素,从而引入page fault。
所以LRU的competitive ratio ≤k,其中k为cache size。
证明方法很简单,构造一个只包含k+1个元素的请求序列,每次都使得z请求cache中不存在的元素(可以实现,因为算法只基于过去信息,而且是确定性的),那么Cost(A,z)=n,而Cost(FIF,z)=n/k,进而Cost(A,z)OPT(z)=k。
1. 问题简介
这个是体系结构里面的经典问题,内存小、硬盘大,内存快、硬盘慢。所以CPU从内存中读取数据,而内存从硬盘中读取数据。那我们希望内存读取硬盘的次数尽量减少,这样可以减少程序的运行时间,而减少次数的算法主要依赖于page replacement algorithm。所谓page fault,即内存中不存在所需数据而引入的错误,为了解决这个错误就需要从硬盘中读取数据到内存中。所以每个page fault都对应于一次硬盘读取,耗费大量时间。读到的数据需要覆盖内存中的某些现有数据,如何选择被替代的内存中的数据就是page replacement algorithm处理的问题。
(内存和硬盘的关系和cache与内存的关系一样,都是使用类似的思想)
2. Clairvoyant/offline algorithm
算法可以使用未来信息,即可以知道整个请求序列。(这个要求难以在实际中满足)clairvoyant 算法的最优结果也是所有算法所能满足的最优算法,定义:Given a page arrival sequence z, OPT(z) represents the minimum number of page faults by the best clairvoyant algorithm knowing the sequence z of page arrivals.
2.1. Furthest in the future
FIF算法是一种clairvoyant 算法,并且满足Cost(FIF,z)=OPT(z),即FIF算法的结果是最优的。算法简介:每次选取最晚被请求的元素进行替换。具体地,设第i次请求ri造成了一次page fault,对于cache中的每个元素cj,定义fj=argmink{rk==cj∧k>i},则选择cache中的第j=argmaxkfk个元素cj进行替换。
例子:
request| | cache elements| | page fault| | evicted item| |
---|---|---|---|
a | -,-,- | True | - |
b | a,-,- | True | - |
c | a,b,- | True | - |
d | a,b,c | True | c |
a | a,b,d | False | |
e | a,b,d | True | d |
b | a,b,e | False | |
a | a,b,e | False | |
c | a,b,e | True | a |
e | c,b,e | False | |
d | c,b,e | True | c |
b | d,b,e | False |
2.2. FIF 最优性的证明
参考资料:https://blog.henrypoon.com/blog/2014/02/02/proof-of-the-farthest-in-future-optimal-caching-algorithm/
https://cseweb.ucsd.edu/classes/wi12/cse202-a/lecture4-final.pdf
基本思想:大框架是归纳法,结合分类讨论法。
设FIF的replacement schedule为SFF,而对于任意满足请求序列的schedule S,我们需要证明#fetches(SFF)≤#fetches(S)。所谓schedule,记录了算法的所有操作,例如insert a、evict b,通常一个page fault对应于一对insert和evict。 schedule 的一个子集是reduced schedule,即lazy schedule,只有当request某元素的时候才会insert该元素。一个事实是:对于任意schedule S, 永远存在一个reduced schedule S∗,满足#fetches(S∗)≤#fetches(S)。
基于以上的定义以及事实,我们开始证明FIF的最优性。明确目标以及归纳法的假设:
目标:∀S,#fetches(SFF)≤#fetches(S),即对于所有可以满足request的reduced schedule S,均满足硬盘读取数不小于SFF的读取数。
归纳法的假设:∃Sj, such that Sj makes the same decisions as SFF for requests from r1 to rj, and #fetches(Sj)≤#fetches(S).
Base Case: 令S0=S, 则有#fetches(S0)≤#fetches(S),并且S0=SFF for requests from r1 to r0 (NULL)
假设存在Sk满足 Sk makes the same decisions as SFF for requests from r1 to rk, and #fetches(Sk)≤#fetches(S).
我们从Sk构造Sk+1,使得 Sk+1 makes the same decisions as SFF for requests from r1 to rk+1, and #fetches(Sk+1)≤#fetches(S). 方法如下:
若rk+1 in cache,则Sk和SFF均不会进行任何操作(SFF基于FIF算法,Sk基于reduced),所以Sk+1=Sk
若rk+1 misses, and Sk and SFF evict the same element, 则有Sk在rk+1处的决策和SFF一致,所以Sk+1=Sk。
若rk+1 misses, and Sk and SFF evict different elements, suppose Sk evicts ci and SFF evicts cj. 即两者分别替换的不同元素,从而有两个元素ci,cj参与讨论,而对于两个元素分别有request以及evict两种可能操作。我们对rk+1之后Sk首次涉及ci,cj的操作进行分情况讨论:
Next there is a request rd to ck, and Sk evicts cj, 即Sk需要替换cj了。调换两者的删除位置,使得Sk+1在第rk+1处与SFF一样删除cj,而在rd处删除ck,同样满足请求序列,并且#fetches(Sk+1)=#fetches(Sk)≥#fetches(SFF)。
Next, there is a request rd to ci, and Sk evicts cj. 即Sk删除ci之后,在请求序列里又遇到了ci,而且这次删除了cj。我们使得Sk+1在rk+1处删除cj,而在rd处即不需要进行任何操作,同样满足请求序列,并且#fetches(Sk+1)=#fetches(Sk)−1>#fetches(SFF)
Next, there is a request rd to ci and Sk evicts c′. 即Sk删除ci之后,在请求序列里又遇到了ci,这次删除了一个非cj的元素。注意到此次构造Sk+1需要满足cj不被删除、所以我们同样使得Sk+1在第rk+1处与SFF一样删除cj,而在rd处与Sk一样删除c′,而插入cj。这样构造的Sk+1不是reduced,需要基于上诉Fact转化为reduced schedule S∗k+1,并且满足S∗k+1 makes the same decisions as SFF for requests from r1 to rk+1, and #fetches(S∗k+1)≤#fetches(Sk+1)=#fetches(Sk)≤#fetches(S).
Next, there is a request to cj, which is not possible, since fj>fi.
综上,基于归纳原则,我们证明了∃Sn, such that Sn makes the same decisions as SFF for requests from r1 to rn, 从而Sn=SFF 而且 #fetches(SFF)=#fetches(Sn)≤#fetches(S).
基于上诉结论,我们最终证明了FIF的最优性。
3. Non-Clairvayant/Online algorithm
在线算法只能基于过去的信息进行决策。例如经典算法中常会使用出现的时间、出现的频率、最近出现的密度等等,各种算法在平均page fault number以及使用空间、时间之间做平衡,基于不同的请求序列分布以及权衡可以得到不同的算法。这里主要介绍一种最简单的在线算法,然后对其进行分析。进而讨论所有在线算法的下界。
3.1. 评价函数 Metric
任意算法A对于给定的请求序列z的page fault数目用Cost(A,z)表示。而OPT(z)=minACost(A,z),即最优算法(包括offline algorithm)的page fault数目。使用Cost(A,z)OPT(z)评价算法A在给定z上的表现,进而有最差情况maxzCost(A,z)OPT(z)(competitve ratio)以及平均情况∑z∈uCost(A,z)OPT(z)。
3.2. least recently used algorithm (LRU)
算法简介:如名字所述,每次选择最不近使用的元素进行替换。具体地,设第i次请求ri造成了一次page fault,对于cache中的每个元素cj,定义lj=argmaxk{rk==cj∧k<i},则选择cache中的第j=argminklk个元素cj进行替换。例子:
request| | cache elements| | page fault| | evicted item| |
---|---|---|---|
a | -,-,- | True | - |
b | a,-,- | True | - |
c | a,b,- | True | - |
d | a,b,c | True | a |
a | d,b,c | True | b |
e | d,a,c | True | c |
b | d,a,e | True | d |
a | b,a,e | False | |
c | b,a,e | True | e |
e | b,a,c | True | b |
d | e,a,c | True | a |
b | e,d,c | True | c |
首先将请求序列分为b个区块,每个区块内最多有k个元素,并且使得b尽可能小。
那么LRU对于每个区块最多遇到k个page fault,从而整体而言最多bk个page fault。而对于最优算法,至少遇到b个page fault,因为每次跳跃区块的时候都会遇到一个前一区块从未遇过的第k+1个元素,从而引入page fault。
所以LRU的competitive ratio ≤k,其中k为cache size。
3.3. 所有确定性online page replacement algorithm的competitive ratio下界
Claim:对于所有determinisitic online page replacement algorithm A, ∃z,Cost(A,z)OPT(z)=k。证明方法很简单,构造一个只包含k+1个元素的请求序列,每次都使得z请求cache中不存在的元素(可以实现,因为算法只基于过去信息,而且是确定性的),那么Cost(A,z)=n,而Cost(FIF,z)=n/k,进而Cost(A,z)OPT(z)=k。
相关文章推荐
- [数据挖掘课程笔记]基于规则的分类-顺序覆盖算法(sequential covering algorithm)
- 大数据算法课程笔记5a: fixed-parameter vertex cover
- 数据结构看书笔记(二)--算法Algorithm
- 大数据算法课程笔记2:2D Convex Hull
- 大数据算法课程笔记1:寻找中值算法之随机选取,中值的中值,One Pass算法
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 【算法学习笔记】06.数据结构基础 队列与堆栈初步
- 数据挖掘笔记-情感倾向点互信息算法
- 数据结构与算法学习笔记之后进先出的“桶”
- 数据结构与算法笔记 lesson 15 递归
- 数据挖掘笔记-分类-回归算法-最小二乘法
- 大数据学习笔记之四十九 推荐算法的主要算法第二部分
- 数据挖掘十大经典算法(4) The Apriori algorithm
- 7.[数据结构和算法分析笔记]词典 Dictionary
- 【数据结构与算法】两级页表(Two-Level Page Table)
- 数据结构及算法分析——(有序向量唯一化)笔记一
- 【笔记4】用pandas实现条目数据格式的推荐算法 (基于用户的协同)
- 数据结构与算法学习笔记
- 数据结构与算法复习笔记
- 大数据算法MOOC笔记1:大数据定义、特点、应用