磁盘缓存压缩_第1页
磁盘缓存压缩_第2页
磁盘缓存压缩_第3页
磁盘缓存压缩_第4页
磁盘缓存压缩_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0目录目录国内外研究现状磁盘架构与优化方案磁盘缓存压缩设计与实现实验结果未来展望1国内外研究现状国内外研究现状关于磁盘内部缓存磁盘内部的研究工作比较少,过去的文献大多集中于磁盘缓存对系统影响的调查。磁盘缓存的大小,读写缓存段的比例分配,缓存段的长度,读写请求的局部性,请求的频率以及访问模式都会大大影响系统的性能。关于缓存压缩目前关于缓存压缩的文献多集中于cpu cache或是memory的压缩,结果表示压缩对系统整体性能有不错的提升。关于内存的压缩相关的工作较多,所用的到算法主要有LZO,WKDM等通用无损压缩算法。CPU缓存的压缩有一些比较好的算法,如FPC,C-PACK算法。2存储器趋势存

2、储器趋势如何平衡主存与磁盘的速度鸿沟呢?3缓存方案缓存方案1. 平衡快总线与慢机械部件 2. 保存已有数据- Buffering3. 预取后续数据- Read-ahead or Prefetching4. 合并写请求- Write combing” and Write-behind.4我们的解决方案我们的解决方案Considerations:1.压缩哪类数据?2.何时压缩?3.如何实现?5设计依据设计依据“随机” 和 “已访问”很少被再次利用, 并且预取后续数据比较缓存现在数据更有价值, 因此预取的数据需要被压缩.脏数据很有可能被再次改写. 为了降低设计复杂度,我们不压缩写请求数据.只压缩预取

3、数据.6磁盘缓存压缩磁盘缓存压缩设计设计系统设计修改磁盘缓存模块,添加压缩机制所有通过磁盘缓存的数据,都必须经过压缩机制的管理。7Disksim?磁盘是复杂的精密器件,内部时序复杂且操作基本上以微秒为时间单位。大量研究进行了磁盘的软件模拟,但太多被证明是精度太差,没有太大的现实意义。因此我们一定要利用前人的成果。Disksim非常精确地模拟了这些。只有深入理解Disksim,才能对磁盘架构做细致修改。8全局模块全局模块高内聚低耦合高内聚低耦合9压缩模块:压缩率管理压缩模块:压缩率管理1011缓存模块:缓存模块:缓存缓存段布局段布局缓存段管理我们将磁盘缓存分为两个区域,分别是读区域与写区域。读区

4、域专门存放读请求所缓存的数据,并且预取后续的数据。对于写请求,只能修改写区域中的数据。12磁盘缓存磁盘缓存数据管理数据管理采用FPC算法,在每个压缩后的数据块前增加header以作头部元数据Disksim缓存格局13FPC压缩算法压缩算法逻辑简单的模块匹配压缩算法,对于一个64字节的cache line,只需要3个cpu周期来进行压缩,5个cpu周期进行解压缩。PrefixPattern EncodedData Size000Zero Run3 bits (for runs up to 8 zeros)0014-bit sign-extended4 bits010One byte sign-e

5、xtended8 bits011halfword sign-extended16 bits100halfword padded with a zero halfwordThe nonzero halfword (16 bits)101Two halfwords, each a byte sign-extendedThe two bytes (16 bits)110word consisting of repeated bytes8 bits111Uncompressed wordOriginal Word (32 bits)换算为时间将开销增加到DiskSim中。14缓存缓存段实现段实现15磁

6、盘控制器模块磁盘控制器模块16磁盘控制器模块磁盘控制器模块磁盘原有时序压缩动作与磁盘读盘片的时间并行,不增加开销。解压缩动作与总线传输时间并行,只增加部分开销。通过时序并行以最小化开销17针对SCSI协议的关键位置修改。18编码实现编码实现大量的自定义C语言程序函数以实现功能设计,如下部分函数展示:int compress_seg_init( segment* seg,int n, int r_w);int compress_seg_add( segment* seg, int blkno, int head );int compress_seg_forward_startblkno( seg

7、ment* seg, int blkno);int compress_seg_get_metadata( segment* seg, int blkno);int compress_buffer_add( segment *seg, int blkno);int compress_seg_destroy( segment *seg);int compress_seg_check( segment* seg );int compress_seg_get_endblkno( segment* seg );int compress_seg_set_outblkno(segment* seg, int

8、 blkno );int compress_seg_judge_comperssion( segment* seg);int compress_seg_set_enable( segment* seg, int flag );int compress_seg_for_write( segment* seg);int compress_seg_get_max_readahead( disk* currdisk, segment* seg, ioreq_event* curr);. . .大量辅助函数以实现工程的调试与跟踪,如下部分函数展示:void compress_debug( const c

9、har* filename,const char* function, int line);int compress_seg_print_stats( segment* seg );int compress_seg_print_all_metadata( segment *seg);int compress_print_diskreq_info( diskreq* tmpreq);int compress_seg_hit_full_check(segment* seg, ioreq_event *curr, int hittype);int compress_print_diskreq_inf

10、o_extra( diskreq* tmpreq, char* msg);int compress_print_disk_info(disk* currdisk);void compress_print_ioreq_info( ioreq_event* curr);int compress_stats_add_ioreq( ioreq_event *ioreq );void compress_stats_set_seekoverhead( ioreq_event *ioreq, double t);int compress_stats_remove_ioreq( ioreq_event *ioreq);void compress_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论