11

シナリオ:

私が開発に使用するマシンには、32Gb の DDR3 RAM、i7 3770、SSD が搭載されています。プロジェクトは大規模で、ほとんどの場合、インクリメンタル コンパイル中に Scala は高速にコンパイルされますが、1 つの変更が数百のファイルの再コンパイルにつながる場合があり、すべてをコンパイルするのに時間がかかり、jrebel がすべての変更されたファイルをリロードするのに時間がかかります。

質問:

RAMFS (Mac) にすべてを配置すると、コンパイルと jrebel のリロードが大幅に高速化されますか?

私の計画は、プロジェクトに直接関連するすべてのものを RAMFS パーティション (.ivy、プロジェクト ソース、.sbt、さらには JDK のコピーなど) に配置することでした。起動時または手動ですべてを実行するスクリプトを作成しますが、それは問題になりません。また、ファイル同期タスクをセットアップするので、OS に障害が発生した場合でも変更が失われる心配はありません。

アップデート:

  1. ログによると、java および scala ソースのうち約 400 がクリーン後にコンパイルされます。
  2. コア モジュールのファイルを変更した後、50 秒で 130 個のファイルを再コンパイルします。
  3. jrebel のリロードには #1 の後は 72 秒、#2 の後は 50 秒かかります
  4. -Drebel.check_class_hash=true を追加すると、#2 の後に jrebel が瞬時にリロードされます。

私はこれらの結果に非常に満足していますが、170 秒かかるコンパイル プロセスで約 5 秒間だけ CPU 使用率が最大 70% になり、コンパイル中の全体的な CPU 使用率が 20% になるため、scala コンパイルをさらに高速化する方法にまだ関心があります。

アップデート:

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 ディスクの意味はほとんどありません。とにかく、それらのOSはファイルをキャッシュします。

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

于 2016-09-02T16:40:23.690 に答える