【预取简介】[Prefetching Introduction] - 知乎
在研读预取方向的论文,发现这篇总结不错,记录下来,留用!
缓存替换的解释,记录下来,自用
这篇文章总结的更好:
鹅厂微创新Golang缓存组件TCache介绍 - Powered by MinDoc
退火算法的理解:模拟退火算法学习笔记 - 知乎
behavior-based prefetcher 是一种预取器的算法,它并不是单一的预取器,而是一类预取器的代称。在这个类别中,有几种常见的 Behavior-based prefetcher,其中包括:
-
Stride prefetcher:Stride prefetcher 基于步幅(stride)的概念来预测数据访问模式。它记录程序连续访问内存地址之间的步幅,然后通过预测下一个访问地址的步幅来进行预取。
-
Markov prefetcher:Markov prefetcher 基于马尔可夫链(Markov chain)模型来预测数据访问模式。它通过分析程序访问历史的状态序列来建模,然后预测下一个访问状态以及对应的数据。
-
Stream buffer prefetcher:Stream buffer prefetcher 运用了数据流的概念来进行预测。它通过跟踪程序中的数据流,预测下一个可能被访问的数据,并提前加载到缓存中.
behavior-based prefetcher, learn-based prefetcher
文件系统和存储系统之间存在语义差距是因为它们在数据存储和检索的抽象级别上有所不同。
文件系统是操作系统提供的一种抽象层,用于管理计算机上的文件和目录。它提供了文件的创建、删除、重命名等基本操作,并通过文件路径来组织和访问文件。文件系统以文件和目录的层次结构来组织数据,通过文件名来标识和引用数据。
而存储系统是用于存储和访问数据的底层系统,通常由硬盘、固态硬盘(SSD)、云存储等组成。存储系统负责将数据保存在物理存储介质上,并提供读写操作来访问这些数据。存储系统关注的是数据块的存储和读写,不关心数据的语义和结构。
因此,文件系统和存储系统的语义差距体现在以下几个方面:
-
数据组织方式:文件系统以文件和目录的层次结构组织数据,而存储系统以块的形式存储数据,没有类似的层次结构。
-
访问粒度:文件系统以文件为单位进行访问,而存储系统以数据块为单位进行访问。文件系统可以一次读取或写入整个文件,而存储系统只能以块为单位进行数据读写。
-
数据一致性:文件系统通过文件的元数据(如时间戳、权限等)来维护文件的一致性,而存储系统只负责数据的存储和读写,并不负责数据的元数据管理。
由于文件系统和存储系统的这些差异,开发者在设计和实现存储应用程序时需要考虑并适应两者之间的语义差距,确保数据的正确性和一致性。例如,文件系统缓存和存储系统缓存的一致性、文件系统的事务性操作等都需要特别注意。
一些著名的作品被分为两类: 1)基于行为的作品和2)基于学习的预取器。具体来说,基于行为的预取器旨在通过考虑数据访问行为(如LBA上的空间局部性)来决定待预取的数据,而基于学习的预取器采用机器学习算法来预测和预取数据。
ssd模拟器文档:Flash Translation Layer — SimpleSSD 2.0.12 documentation
ssdsim:https://github.com/huaicheng/ssdsim
https://github.com/jiangyu718/ssdsim
这个貌似还多点
ssd终于跑起来了,相当于实现了一个ssd版本的helloworld!
```CMakeLists.txt
cmake_minimum_required(VERSION 3.0) project(SSD) set(CMAKE_C_STANDARD 11) set(SOURCE_FILES ssd.c avlTree.c flash.c initialize.c pagemap.c) add_executable(ssd ${SOURCE_FILES})
```
然后可以直接跑了