MvG*_*MvG 5 linux cache ssd lvm bcache
我正在寻找利用 SSD 来加速我的系统的方法。在“ Linux 相当于 ReadyBoost?”(以及为我触发的研究)我了解了bcache、dm-cache和EnhanceIO。所有这三个似乎都能够在 SSD 上缓存读取数据。
但是,除非我遗漏了什么,否则所有三个似乎都在第一次读取时将文件/块/范围/任何内容存储在缓存中。大型顺序读取可能是一个例外,但除此之外,似乎每次读取缓存未命中都会导致某些内容被缓存。我希望缓存能够缓存我经常使用的那些读取。我担心搜索我的所有 maildir 文件的正文或某个大目录中的递归 grep 可能会驱逐我经常阅读的大部分内容。
有没有什么技术可以缓存经常读取的文件,而不是最近读取的文件?建立某种形式的活动集或诸如此类的东西?我想自适应替换可能是一个描述我所追求的术语。
缺少这一点,我想知道将 LVM 用作底层并在其上构建多个支持 bcache 的设备是否有意义。这个想法是,例如邮件读取不会驱逐缓存/usr之类的。每个挂载的文件系统都会有自己的固定大小的缓存,或者根本没有。有没有人有在 lvm 之上使用 bcache 的经验?是否有理由反对这种方法?
也欢迎任何其他建议。但是请注意,我正在寻找可以在 Linux 上用于生产的东西。我觉得 ZFS 及其 L2ARC 功能不属于该类别(目前),尽管如果您确信相反,欢迎您提出这一点。使用 LVM 的原因是我希望能够根据需要调整为各种文件系统分配的空间大小,使用静态分区很痛苦。因此,提议的解决方案也应该提供这种灵活性。
编辑 1:一些说明。
我主要关心的是启动时间。我想看到用于每次启动的所有文件都可以在该 SSD 上轻松访问。而且我宁愿不必担心保持 SSD 同步,例如在软件包升级之后(这在我的 Gentoo 测试中经常发生)。如果我在启动期间不使用的常用数据也最终出现在缓存中,那是一个额外的好处。我目前的工作项目例如将是一个不错的候选人。但我猜我每天使用的文件中有 90% 会在按下电源按钮后的前 5 分钟内使用。这个目标的一个结果是在启动后擦除缓存的方法,就像 ZFS L2ARC 显然所做的那样,不是一个可行的解决方案。
金发姑娘的回答将焦点从缓存插入转移到缓存驱逐。但这并没有改变问题的根本性质。除非缓存跟踪某个项目的使用频率或频率,否则内容可能仍会过早地从缓存中退出。特别是因为我希望这些文件从启动到关闭一直驻留在 RAM 缓存中,因此每次启动时它们只会从磁盘读取一次。我为 bcache 和 dm-cache 找到的缓存驱逐策略,即 LRU 和 FIFO,都会优先驱逐那些启动时文件,而不是在同一工作日读取的其他文件。因此我的担忧。
小智 4
据我最好的理解,dm-cache可以满足您的要求。我找不到这个的明确来源,但作者在这里解释说他应该将其称为 dm-hotspot,因为它试图找到“热点”,即高活动区域并且仅缓存这些区域。
在输出中dmsetup status您会发现两个变量,即read_promote_adjustment和write_promote_adjustment。该cache-policies文件解释说
mq 策略在内部决定晋升阈值。如果不在缓存中的块的命中计数高于此阈值,则它将被提升到缓存中。
所以通过调整read_promote_adjustment,你就可以确定频繁write_promote_adjustment读/写的数据到底是什么意思,一旦读/写的次数超过这个阈值,该块就会被“提升”到,即存储到缓存中。
请记住,此(预缓存)元数据通常保存在内存中,并且仅在缓存设备挂起时才写入磁盘/SSD。
| 归档时间: |
|
| 查看次数: |
2994 次 |
| 最近记录: |