我可以为了性能而牺牲持久性吗?

我可以为了性能而牺牲持久性吗?

我正在尝试优化我的自动编译设置。如果构建失败,它无论如何都会从头开始重新启动,因此在断电时丢失整个文件子树(工作目录)是可以接受的,但文件系统无论如何都应该恢复到一致状态,因此日志应该足以删除文件,但仅此而已。

是否存在一个文件系统允许我指定“丢失这些数据是可以接受的”以提高性能?

到目前为止我最接近的结果是tmpfs和大量的交换空间,但这似乎是一种粗鲁的黑客攻击,并且不允许我保持一致的数据。

答案1

这是 Linux,几乎可以肯定存在您可以调整的新文件系统或调优参数。首先不要这样做。

从操作上来说,更简单的方法是对文件系统类型进行标准化,为临时目录提供足够快但可能无冗余的存储,如果不符合要求则重新审视性能。

首先,定义可衡量的用户可见性能要求。例如,构建在 15 分钟内完成。超过这些指标将导致过早优化。


一致性数据在崩溃时是一个重大的限制。

非持久性 DRAM 上的 tmpfs 无法承受断电。完全丢失的一致性听起来不像您想要的。

对于持久文件系统来说,这也不是小事。文件系统可能会通过妥协来提高性能:首先保持文件系统一致性,其次是数据内容。此外,并非应用程序级别的每个写入都会立即刷新到永久存储中。好的数据库系统会花费大量额外的精力来提高恢复的可能性,fsync() 自己的日志等等。

但是这种崩溃恢复约束不是必需的,因为构建过程可以在失败时重新启动。一种将工作目录视为临时空间的实现:

  • 获取高 IOPS 块设备。不必是存储阵列、复制或备份,单个本地 SSD 即可。
  • 使用您熟悉的文件系统,您可以获得支持。xfs 或 ext4 很常见。这包含您的工作目录。
  • 每次运行时,销毁内容并替换为新的输入。
  • 成功运行会将输出复制到永久存储。主机崩溃或重启会恢复一致的文件系统,以防下次运行前出现问题。

继续监控,并调查性能是否不令人满意。请记住,存储远非性能问题中唯一可能的限制因素。

相关内容