Linux 中分层磁盘缓存的最佳可用技术

Linux 中分层磁盘缓存的最佳可用技术

我刚买了一台 6 核 Phenom,内存为 16G。我主要用它进行编译和视频编码(偶尔也用于网络/数据库)。我发现所有活动都受到磁盘限制,我无法让所有 6 个核心都得到支持。我买了一个 SSD raid 放在 HDD 和 tmpfs 之间。

我想设置一个“分层”文件系统,其中读取缓存在 tmpfs 上,但写入安全地通过 SSD。我希望最近未在 SSD 上读取的文件(或块)随后使用压缩 FS 或块层写回到 HDD。

因此基本上读作: - 检查 tmpfs - 检查 SSD - 检查 HD

并写入: - 直接写入 SSD(为了安全),然后写入 tmpfs(为了速度)

并定期或当空间不足时: - 将最不常访问的文件下移一层。

我看过一些感兴趣的项目。CacheFS、cachefsd 和 bcache 看起来非常接近,但我无法确定哪个更实用。bcache 似乎有点冒险(早期采用),cachefs 似乎与特定的网络文件系统相关。

有“联合”项目 unionfs 和 aufs 让你可以在彼此之上挂载文件系统(通常是 USB 设备通过 DVD 挂载),但是两者都以补丁的形式分发,而且我感觉这种“透明”挂载将成为内核功能,而不是 FS。

我知道内核有一个内置的磁盘缓存,但它似乎不能很好地用于编译。当我将源文件移动到 tmpfs 时,速度提高了 20 倍。我认为这是因为标准缓冲区专用于特定进程,而编译在构建过程中会创建和销毁数千个进程(只是猜测)。看来我真的希望预先缓存这些文件。

我读到过 tmpfs 可以使用虚拟内存。那么在 SSD 上创建一个带有交换的大型 tmpfs 是否可行?

我不需要从生成的分层文件系统启动。如果需要,我可以从其他地方加载 grub、内核和 initrd。

这就是背景。我猜这个问题有几个部分:

  • 为 SSD 和压缩 HDD 推荐的 FS 和/或块层。
  • 推荐的 mkfs 参数(块大小、选项等...)
  • 推荐使用缓存/挂载技术来透明地绑定各层
  • 必需的挂载参数
  • 所需的内核选项/补丁等。

答案1

目前还没有任何生产水平可以做到这一点。

以下是我会考虑的两个选择:

  • 缓存是一个内核补丁,用于将 SSD 用作随机读写缓存。它可以与任何文件系统一起使用。
  • 昆仑信息科技为 Linux 推出了 natvie ZFS 2 的封闭测试版。正式发布日期原定于 2010 年 12 月初,但被推迟到 1 月 5 日,随后又推迟到 1 月 14 日。

我在 Linux 上没有使用过这两个选项。不过我在 OpenSolaris 和 FreeBSD 上用过 ZFS。

相关内容