大家。我坚持以下问题。
我正在研究一种混合存储系统,它使用ssd作为硬盘的缓存层。为此,应将从硬盘读取的数据写入ssd以增强对该数据的后续读取。由于Linux缓存从页面缓存中的磁盘读取的数据,因此可以延迟向ssd写入数据;但是,可以释放缓存数据的页面,并且不建议访问释放的页面。这是一个问题:我有“struct page”指针指向要写入ssd的页面。有没有办法确定指针所代表的页面是否有效(通过有效我的意思是缓存的页面可以安全地写入ssd?如果通过指针访问一个释放的页面会发生什么?是的数据是释放的页面与释放前的页面相同吗?
答案 0 :(得分:0)
您使用的是cleancache模块吗?您应该只从中获取有效页面,并且在您的回调函数完成之前它应该保持有效。
答案 1 :(得分:0)
这不是一个cleancache / frontswap重新实现吗? (https://www.kernel.org/doc/Documentation/vm/cleancache.txt)。
现有的cleancache代码的好处是它只在它释放页面之前调用你的代码,所以在页面驻留在RAM之前,当RAM中没有剩余空间时,内核会调用你的代码来支持它在tmem(瞬态记忆)。
搜索我还发现了一个似乎正是如此的现有项目:http://bcache.evilpiepirate.org/:
Bcache是Linux内核块层缓存。它允许一个或多个快速 基于闪存的固态硬盘(SSD)等磁盘驱动器充当 缓存一个或多个较慢的硬盘驱动器。
Linux内核的Bcache补丁允许用户使用SSD进行缓存 其他块设备。它类似于ZFS的L2Arc,但也是Bcache 写回缓存(除了只通过缓存写),它是 文件系统不可知。它被设计为以最少的开启 努力,并在没有任何设置配置的情况下正常工作。通过 默认情况下,它不会缓存顺序IO,只是随机读写 固态硬盘擅长。它适用于台式机,服务器, 高端存储阵列,甚至可能是嵌入式存储阵列。
答案 2 :(得分:0)
您要实现的目标如下: