我最初以超级用户的身份询问过这个问题,但我发现这更像是一个服务器主题。
我刚买了一台 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 上使用带有 l2arc 和 zil 的 ZFS,并在物理 HDD 驱动器上使用 zfs 压缩和重复数据删除。
这就是背景。我猜这个问题有几个部分:
* Recommended FS and/or block layer for the SSD and compressed HDD.
* Recommended mkfs parameters (block size, options etc...)
* Recommended cache/mount technology to bind the layers transparently
* Required mount parameters
* Required kernel options / patches, etc..
答案1
编译:除了二进制文件之外,将其他文件写入磁盘有什么意义?完全使用 tmpfs 进行此操作,然后将编译后的内容移动到磁盘。
视频编码:我建议使用 rsync(在传输部分文件差异的模式下)在编码到磁盘期间传输文件。例如,在完成一个视频后终止的后台循环中。编码本身也可以在 tmpfs 中进行。
顺便问一下:你使用什么发行版?SuSE 和 RedHat 都带有 /dev/shm 安装(默认:使用 tmpfs 占用一半的 RAM)。