[转] 5分钟和5字节法则

[序:关于5分钟法则,想必很多人都听说过。而5字节法则则没有那么耳熟能详了。这两个法则是Jim Gray和Franco Putzolu 在1986年的文章<< The 5 minute rule for trading memory for disc accesses and the 10 byte rule for trading memory for CPU time >>中提出的,也就是本篇译文所针对的内容。根据文章名称也可以看出,5分钟法则是用来衡量内存与磁盘的,而5字节法则则是在内存和CPU之间的权衡。在该论文发表10年后的1997年,Jim Gray和Goetz Graefe 又在<<The Five-Minute Rule Ten Years Later and Other Computer Storage Rules of Thumb>>中对该法则进行了重新的审视。

2007年,也就是该论文发表20年后,这年的1月28日,Jim Gray驾驶一艘40英尺长的船从旧金山港出海,目的是航行到附近的farallon岛,在那里撒下母亲的骨灰。出海之后,他就同朋友和亲属失去了联系。为了纪念和向大师致敬,时隔10多年后的2009年Goetz Graefe又发表了<<The Five-Minute Rule 20 Years Later (and How Falsh Memory Changes the Rules)>>。

Jim Gray,关系数据库领域大师。因在数据库和事务处理研究和实现方面的开创性贡献而获得1998年图灵奖。美国科学院、工程院两院院士,ACM和IEEE两会会士。他25岁成为加州大学伯克利分校计算机科学学院第一位博士。在IBM工作期间参与和主持了IMS、System R、SQL/DS、DB2等项目的开发。后任职于微软研究院,主要关注应用数据库技术来处理各学科的海量信息。2007年1月独自驾船出海后失踪。]

摘要

通过简单的成本收益分析可以计算出是让数据驻留在内存还是从磁盘进行访问的这两种选择之间的收支平衡点。如果某项数据访问频率足够高,那么就应该让它驻留在内存。在当前的技术条件下,“频率足够高”可以定义为大概每五分钟会被访问一次。

类似地,人们也经常需要在内存空间和CPU时间进行权衡。比如,bit级的数据可以以byte形式打包,但是需要额外的指令来将bit数据提取出来{!即可以用1byte的数据来表示8个bit级的数据,但这就需要进行提取操作。也可以用1 byte来表示1bit的数据,这样就不需要额外指令提取bit,但是增加了8倍空间}。简单的论证表明可以花费5字节的主存来节省每秒的1个指令。

5分钟法则

在心理学中,答案总是模棱两可而不那么精确。在物理学上,答案通常是超自然地。在数字计算中,答案通常是5的倍数—比如,你有几个手指,脚趾?在所有领域中,关键都是找到问题。

一个有趣的问题是:在数据在读写之前必须被移动到主存的情况下,什么时候让数据驻留在内存更划算些,什么时候让它驻留在二级存储(磁盘)中更划算些?

某些情况下,响应时间决定了数据应该存放到内存,因为磁盘访问引入了太高的延迟。这种情况比较少见。大多数情况下,让数据驻留在内存还是磁盘都只是经济上的考虑。什么情况下将数据保存在主存比从磁盘访问成本低呢?对于1980年的高端系统来说,答案如下:

五分钟法则

每五分钟就会被访问的页面应该存放到内存。

论证如下:

一个Tandem磁盘每秒可以支持15次访问,1个180MB的磁盘定价是15K$,540MB的定价是20K$。这样每秒的一次磁盘访问cost大概就是1K$。额外的用于支持磁盘访问的CPU和通道开销是1 K$/a/s。这样在一个Tandem系统中,每秒钟的一次磁盘访问成本大概是2 K$/a/s 。{!注意如何理解2K$/a/s,如果有个操作,该操作每秒需要一次磁盘访问,那么我们就认为该操作的成本是2K$/a/s。理解时应该认为该操作是持续进行地,也就是说我们的磁盘最多支持每秒15次访问,因此这样的一个每秒一次磁盘访问的操作就占据了磁盘总能力的1/15,因此它相当于用了价值1K$的磁盘设备能力,再加上占据的其他1K$资源,这个成本就是2K$。也就是说在理解成本时,应该从它们占据了多少资源上来考虑。}。

1MB的Tandem主存花费5K$,这样1KB就是5$。

如果在主存中保存1KB的记录可以节省一次磁盘访问,那么就相当于以5$的成本节省了价值2K$的磁盘访问,这是很划算的。如果能够节省0.1次磁盘访问,那么也节省了200$,依然是很划算的。算下去的话,就可以得到一个平衡点,即每2000/5~400秒一次访问{!如果某记录每400秒才访问一次,我们将它保存到内存,这就相当于每秒节省了1/400的磁盘访问,而(1/400)*2000$=5$,此时,节省的磁盘访问成本刚好等于使用的内存成本}。

因此,如果一个1KB的记录至少每400秒就会被访问一次,那么它就应该存放到内存中。400秒大概就是5分钟,五分钟法则的名称就是由此而来。

对于更小的记录,这个平衡点会更长一点(对于100字节的记录来说就是1小时),对于更大的记录来说,这个平衡点会更短一点(对于4K字节的记录来说就是2分钟)。

在某个特定点,记录大小会超过磁盘传输大小。比如,一个100K程序的缺页错误会产生25次4K大小的磁盘读操作。因此在这个传输大小(在Tandem系统中就是4KB)上,就必须针对传输大小使用该法则(在Tandem系统情况下就是2分钟)。

更形式化的推导和描述如下:

令:

RI:对于数据的两次访问之间间隔的时间区间,以秒为单位

M$:一字节主存的成本($/byte)

A$:每秒的一次磁盘的成本($/a/s)

B:存储的记录/数据大小,以字节为单位

Bmax:最大的磁盘传输大小,以字节为单位

那么,假设B<Bmax,那么将数据保存在内存能够节省的成本等于:

A$/RI – M$*B

{!首先A$的单位是$/(a/s),RI代表两次访问的间隔,那么1/RI就代表了每秒的磁盘访问次数,单位是a/s。这样单纯从单位上看,A$/RI就是$/(a/s)*(a/s)所以最终得到的单位就是$。M$*B就是($/byte)*byte所以最终单位也是$。}

令该表达式等于0,得到的就是平衡点。由此得到此时RI的值:

RI=A$/(M$*B)

将Tandem的参数(A$=2000,M$=5/1000)代入就得到:RI=400,000/B seconds

The 5 Minute Rule and the 5 Byte Rule(译) - 星星 - 银河里的星星

从图中可以看到,5分钟法则只是适用于图中曲线的一部分区域:在B大于1K时。因此内存越廉价,5分钟法则就越有适用性。在上一年里,磁盘和内存价格都降低了30%左右。这样,上面这些结论没有什么改变。未来内存将会比磁盘和处理器有更多的提升,因此5分钟法则将能够适用于所有的block sizes。

5分钟法则看起来也可以应用到IBM系统(Tandem系统与IBM 30XX系列相比各组件价格都要高些,大概与IBM 43xx系列相当)和小型计算机(各组件都要便宜些)中。

5分钟法则不能应用于个人计算机有两个原因。首先,人们不能像在workstations上那样自由为PC增加或减少磁盘。通常,人们只有两个选择:0个或1个磁盘。第二,对于PC的情况,内存和磁盘的成本差异概念是不同的—一块硬盘的价格基本上等于1MB主内。

下面展示了5分钟法则的一个实际应用。客户想将他的整个的500MB数据库保存在主存。下面的论证表明他应该采用一个混合的磁盘-内存(hybrid disc-memory)设计方案。

应用的事务都是很简单的。几乎所有的事务都是访问一条记录,同时需要保证平均1秒钟的响应时间。每个事务会消耗80ms的CPU和30ms的磁盘时间。该应用可达到每秒600个事务的峰值负载。

在纯主存(all-in-main-memory)设计方案中,系统大概需要60个TXP处理器,每个具有10MB主存。两个用于存储数据库,索引和程序的磁盘映像。在正常操作情况下磁盘是空闲的,因为系统是驻留在内存中的。平均事务响应时间是150ms。

在纯磁盘(all-on-disc)设计方案中,系统使用大概60个TXP处理器,每个具有2MB主存{!与之前的10MB相比,节省了大概600-120=480MB主存和2.4M$(480000*5)}。但是,使用了具有40个磁盘锭(20个映像卷)的磁盘(比主存设计方案多花了0.9M$)。在80%的CPU和50%的磁盘使用率情况下,我们估计平均响应时间是300ms,在1秒钟的限制之内。这样这个基于磁盘的解决方案相比主存方案便宜了1.5M$。

5分钟法则可以用来确定一个最优的磁盘-内存权衡方案。根据80-20法则,80%的访问集中在20%的数据上,进一步地80%中又会有80% 落到20%中的20%。这样64%的访问将会落到4%的数据库数据中。如果将这4%的数据库数据保存在主存的磁盘cache中就可以节省all-on-disc中64%的磁盘访问。这样只需要保留7个映像磁盘卷就可以了,每个保存90MB每秒15 次io请求。该设计节省了26个磁盘臂—390K$。额外的内存(24MB)花费120K$。这样相比纯磁盘(all-on-disc)设计又节省了270K$。

可以将应用程序数据库访问内容与该逻辑结合来计算最优的磁盘cache大小和最优的磁盘臂数目。

5分钟法则还可以应用于虚拟内存管理中。如果一个虚存页(通常是4KB大小)每两分钟就会被引用到,那么它就应该驻留在内存中。一个CLOCK(轮转)虚拟内存算法在峰值负载情况下应该至少每分钟能循环一次,或者应该尽力检测出那些hot页面(使用一个2分钟的历史窗口信息),并对这些hot页面特殊处理。

5字节法则

另一个有趣的问题是:什么时候应该用内存去换CPU?或者什么时候应该用CPU去换内存?在进行代码优化时经常会碰到这个问题,比如可以通过循环展开来节省运行的指令数,或者在数据结构设计中,可以通过掩码移位等操作对数据进行pack来减少数据大小。

这里面的逻辑非常类似于5分钟法则。对于给定价格的内存(比如5K$/MB)和给定开销的单MIP(比如50K$/MIP)。这意味着5字节的开销大概是0.005$,类似地,每秒的单指令开销大概是0.005$。这样5字节的开销就大概等价于每秒的单指令操作。就得出如下法则:

5字节法则

可以花费5字节主存来节省1 instruction per second。

5字节方式可以按如下方式应用:

1.      I:新的设计可以节省的指令数

F:指令序列被执行的频率

这样I和F的乘积就代表了指令上的节省。如果设计方案增加了指令数,它就是一个负数值。因此这就代表了变更的MIP节省量。

2.      S:新设计所节省的字节空间

3.      根据5字节法则,将S除以5就可以从字节转换为MIPS。这样MIP节省量就是S/5

4.      现在对比设计方案,总的节省量就是

I*F-S/5

如果它是一个大的正数,那么就表明新方案节省了很多开销。

比如,假设有如下指令序列:

LOAD BYTE

MASK FLAG

BRANCH NONZERO

假设该指令序列每秒会被调用1000次。

如果FLAG是以字节进行存储的,那么就可以避免mask步骤,这样每秒可以节省1000个指令。根据5字节法则,它就可以转换为5000字节存储。在FLAG以字节进行存储的情况下,将会使用8倍的存储。如果处理器中有100个这样的处理过程,那么这大概需要90个额外的字节空间。因此我们已经节省了5000字节,这样算下来,仍然有4910个字节。非常划算的买卖—50倍的投资回报率。

在non-RISC机器上,平均指令开销是6个micro-clocks,MASK指令大概只有2个micro-clocks。这种情况下,考虑节省的指令数时就需要考虑MASK本身的micro-clocks。也就是说再上面的例子中,去掉MASK操作只是节省了2/6个指令。这样实际的投资回报率就是(50*(2/6)),大概是18倍,仍然很划算。

转自:http://duanple.blog.163.com/blog/static/70971767201182422254593/

posted @ 2011-10-08 11:48  napoleon_liu  阅读(1184)  评论(0编辑  收藏  举报