我刚买了一台 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 参数(块大小、选项等...)
- 推荐使用缓存/挂载技术来透明地绑定各层
- 必需的挂载参数
- 所需的内核选项/补丁等。