缓存种类的介绍、工作机制和设置的建议

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

缓存种类的介绍、工作机制和设置的建议

缓存分类

缓存主要有两大类,一类是缓存,英文一般是Cache、Buffer。这类缓存是由应用程序设定和管理的,所有文件公用的缓存,BT使用这种缓存。另一类是文件缓存,英文一般是File Buffer。这类缓存是由系统设定和管理的,每个文件都有自己专用的文件缓存,EM使用这类缓存。

Cache、Buffer是由应用程序设定和管理的,它并不一定位于物理内存中。不过可以通过一个简单的测试知道它是否位于物理内存中。首先,将缓存大小设定为几M,运行一段时间,记录下程序占用的物理内存和虚拟内存大小。然后将缓存大小设定为刚才值得10倍,再运行一段时间,记录下程序占用的物理内存和虚拟内存大小。比较两次记录,看看是物理内存占用是否明显增大,明显的话,缓存位于物理内存之中。如果是虚拟内存占用明显增大,而物理内存变化不明显,那么这个应用程序的缓存并不位于物理内存之中。

File Buffer由于是系统设定和管理的,只要你的物理内存充足,一般都是位于物理内存中。又由于它是每个文件专用的,即使只设定了1M的File Buffer,你如果打开了30个文件,那么就是总共30M的File Buffer。后面介绍完原理后,你就应该知道这对绝大部分人已经足够了。

缓存工作原理

缓存(Cahce、Buffer)可以细分为读和写。读缓存(Read Buffer)作用是将文件内容预读到内存中,在读操作前检查文件是否在缓存中(术语是命中),没有命中的话,在从硬盘中读取文件。从上述工作原理可知,命中率读缓存的关键指标。

现在,我们分析命中率。命中率分顺序读取命中率和随机读取命中率。

从计算机的专业书籍中我们知道,CPU的高速缓存可以看作是物理内存的读缓存,两者的容量比一般是1:1000,然而CPU高速缓存的命中率一般不低于80%。因此我们知道,只需要很小的缓存就可以使得顺序读取的命中率很高。

而随机读取的命中率,用概率论算算就知道,1G的内容需要800M的缓存才能达到80%的命中率。需要极大的缓存才能做到较高的命中率。

在实际中,顺序读取的发生频率比随机读写要多少几个数量级,因此用更好的缓存算法提高顺序读取的命中率才是读缓存的前进方向,单纯提升缓存大小没有太大意义。

综合上面的分析我们知道,提高读缓存的效果并不需要很大的缓存,即使设置了很大的缓存,也是在浪费你的物理内存。

写缓存(Write Buffer)的作用是在写入文件之前,先将要写入的内容写到内存中,积累到一定的量以后,再写入实际文件。因此,写缓存没有命中率的说法,它的效果只和写入速度和缓存大小有关。

文件缓存(File Buffer)是由系统设置和管理的,每打开一个文件,系统会自动给那个文件分配File Buffer,一般不分读写。虽然说Windows很废品,但是它的File Buffer算法不比一般软件差,所以关键是设置多大比较好而已。但是,如果File Buffer设置过大,例如30M,你往里面写了10M的数据,系统很可能

认为缓存还很空,并不进行实际写入操作。万一在这时断电或者程序崩溃,你这10M就会丢失了。

BT缓存的大小

缓存的大小自然和读写速度相关,在这里我把普通带宽、小水管定义为2MADSL,U/D=64K/256K;高带宽、大水管定义为U/D=1M/2M

对于小水管来说,8M的写缓存(Write Buffer)需要半分钟才能填满,平均来说大概10S~15S写一次硬盘,如果这个频率你都不能接受的话,那你还是用无盘工作站好了。

至于读缓存,BT的上传是按文件块进行的(一般的种子,文件块大小是

256K/512K)。64K的上传槽(Slot)一般是4~6,上传槽速度(Slot Speed)一般不超过20K/S,一个文件块足够它传10S。因此,给每个Slot两个文件块的读缓存就差不多了,害怕命中率不够高,每个Slot四个文件块也应该够了。具体算一下,512K*6Slot*(2~4)=6~12M,也就是说6~12M的读缓存就足够了。

把读写缓存加起来,8+12=20M,对于小水管是足够多了。用UT,使用上述缓存大小设定,读缓存的命中率能达到85%+。至于200M的缓存,如BC之流,命中率可能可以提升,但是提升的很有限。而且,由于随机读取的客观存在,即使你有200M缓存,你也不可能保证命中,读硬盘的频率不会比20M缓存低多少。

对于大水管来说,想像小水管一样10~15S写一次硬盘是不可能的,而且BT下载完一个完整的文件块后,为了保证数据安全,会尽快将那个数据块写入硬盘。因此,对于大水管来说,设置10倍于下载速度的写缓存,满足3~5S写一次硬盘的要求就可以了,太大也没有意义。

大水管由于上传速度快,发生随机读取的可能性更高了,平均几秒钟就会发生一次不命中,必需读硬盘。因此,读缓存的量也不需要太多,缓存100个左右的文件块,也就是大约50M的缓存也就差不多了。

加起来大概需要70M的缓存,同样的,在这个情况下就算设置200M的缓存,读硬盘的频率也不见得低多少。

EM缓存的大小

前文已经说了,EM的缓存是针对文件的,如假设每个Slot对应一个文件,那么EM缓存大小时候合理关键看Slot Speed。

对于小水管,Slot Speed也是就是10多20K,512K的File Buffer足够它挥霍20S以上,足够了。

如果说你只下载少量文件,可能有多个Slot在写入同一文件,可能就需要1M

的File Buffer。

对于大水管,Slot Speed上百,但这并不意味着需要10M以上的File Buffer。原因有两个,一个和BT一样,由于随机读取的存在,你必须读硬盘;另一个就是File Buffer越大,文件丢失的可能性越大,而且这个可能性是指数级增长的。因此,即使是大水管,1.5M~2M的File Buffer也差不多了。可以利用优先级的管理,让EM上传不同的文件,下载的文件数量也多一点,让每个Slot对应不同的文件。

相关文档
最新文档