11

设想:

我用于开发的机器有 32Gb 的 DDR3 RAM、i7 3770、SSD。该项目很大,Scala 在增量编译期间大部分时间编译速度很快,但有时单个更改会导致重新编译数百个文件,然后需要一些时间来编译所有文件,并且 jrebel 需要一些好时间重新加载所有更改的文件。

问题:

将所有内容放在 RAMFS (Mac) 上会使编译和 jrebel 重新加载显着更快吗?

我的计划是将与项目直接相关的所有内容放在 RAMFS 分区中(.ivy、项目源、.sbt,甚至可能复制 JDK 等)。我会创建一个脚本来在启动时或手动执行所有这些操作,这不是问题。此外,我会设置文件同步任务,因此在操作系统失败的情况下丢失更改不会成为问题。

更新:

  1. 日志说 java 和 scala 源代码中约有 400 个是在清理后编译的。
  2. 在核心模块中更改一个文件后,它会在 50 秒内重新编译 130 个文件。
  3. jrebel 在 #1 之后需要 72 秒重新加载,在 #2 之后需要 50 秒
  4. 添加 -Drebel.check_class_hash=true 使 jrebel 在 #2 之后立即重新加载。

我对这些结果非常满意,但仍然对如何使 scala 编译更快感兴趣,因为在需要 170 秒的编译过程中,cpu 使用率最多只有 70%,只需大约 5 秒,编译期间的总体 cpu 使用率是 20%。

更新:

将 JVM、源代码、.ivy2 和 .sbt 文件夹放在 RAMDISK 上后,我注意到仅编译时间略有改进:从 132 秒到 122 秒(清理后)。所以,不值得麻烦。

笔记:

这不包括依赖解析,因为我使用这种方法来避免在清理后丢失依赖解析。

4

3 回答 3

2

您可以尝试设置一个 VM 参数-Drebel.check_class_hash=true,它将在重新加载类之前检查校验和。

于 2012-11-26T22:28:12.077 回答
2

我不知道在 Mac 上你可以期待什么加速,但我已经看到 Linux 编译 Scala 编译器本身的加速,这足以鼓励尝试。我的报告(警告:非常特定于 Linux)在那里

于 2013-07-04T14:41:24.077 回答
1

如果您在 Linux 或 OSX 上工作,RAM 磁盘通常没有什么意义。无论如何,那些操作系统会缓存文件。

https://unix.stackexchange.com/a/66402/141286

于 2016-09-02T16:40:23.690 回答