gem5中缓存替换算法主要代码分析
零零散散记录看缓存替换算法源代码时,看到的一些能够和平时理论对应上,并能够加以解释的部分源代码。
我的虚拟机上面有两个.ssh文件夹,第一个在/home/malizhen/.ssh目录,用于本机和虚拟机之间的通信,在VSCode中实现本地主机远程登录虚拟机,见搭建与配置下的【VSCode:Remote-SSH配置】博文记录。为方便后期管理,将gem5/nvmain项目部署到码云上,而git项目也基于ssh的原理,就有了我的第二个ssh在/root/.ssh目录,也就是很多博客中说的~/.ssh目录。
在阅读nvmain源码的过程中,发现nvmain里面自带有FlipNWrite的实现方法,只是默认的编码方式并不是FlipNWrite而是default。这是我试着自己修改nvmain代码的第一步,在config配置文件中设置编码方式,这样有一个好处,不用去修改源码,不需要重新编译,方式为根据config文件语法直接设置:DataEncoder FlipNWrite。运行测试命令:
本文的参考内容来自于MEMORY SYSTEMS Cache,DRAM,Disk这本书,作者为BRUCE JACOB,SPENCER W.NG,DAVID T.WANG。(链接)
Compression Architecture for Bit-write Reduction in Non-volatile Memory Technologies(原文链接)。本文提出了一个基于压缩的架构,实现位写减少。位写减少有很多的好处,包括降低写延迟、降低动态功耗、提高耐受力。提出一个集成进NVM模块的架构,包括(i)一个频繁模式压缩-解压引擎;(ii)和一个比较器协同工作实现减少位写;(iii)一个投机取巧的磨损均衡方案,通过减少部分cell位反复写,平衡分布写,提高内存的耐受力。
Frequent Pattern Compression: A Significance-Based Compression Scheme for L2 Caches( 原文链接)。随着处理器和内存速度之间差距的扩大,内存系统设计人员可能会发现缓存压缩有利于增加缓存容量和减少片外带宽。大多数硬件压缩算法都属于基于字典的类别,这依赖于构建字典并使用其条目对重复数据值进行编码,在压缩大数据块和文件时非常有效。然而,cache line通常为32-256 bytes,每行字典的开销很大,这限制了这种算法的可压缩性,并增加了解压缩延迟。对于这样的短行,基于重要性的压缩可以考虑。