ARアーカイブのパフォーマンスを向上させます
-
21-09-2019 - |
質問
私たちは、最終的な実行可能ファイルにリンクする前に、静的ライブラリに組み込む自動生成されたコードの膨大な量、とのプロジェクトを持っています。私たちは(コマンドラインの長さの制限を回避するために)バッチに仕事を中断し、ライブラリを構築するために、ARを複数回呼び出す必要があり、非常に多くのファイルがありますが、GCC /ブヨ5.04aを使用し、例えばます:
[echo] Archiving codegen
[echo] Deleting old codegen archive
[ar] Using ar found in /usr/bin
[ar] Batch 1 of 7 completed in 37.871 s
[ar] Batch 2 of 7 completed in 55.796 s
[ar] Batch 3 of 7 completed in 89.709 s
[ar] Batch 4 of 7 completed in 256.894 s
[ar] Batch 5 of 7 completed in 196.704 s
[ar] Batch 6 of 7 completed in 248.334 s
[ar] Batch 7 of 7 completed in 243.759 s
[ar] Archiving took: 1129.067 s
[ar] Using ranlib found in /usr/bin
[ar] Indexing took: 247.223 s
[echo] Done with codegen
私たちは、潜在的な速度の向上を探しています。オブジェクトを追加する前に(更新のために)検索するより多くを持っていると思われるので、アーカイブの成長に合わせて、各バッチが長くかかり、長い、と思われます。これは、アーカイブを削除するだけの場所で、古いアーカイブを更新するよりも、それは速くなります理由であるように思われます。より高速のための私達の探求では、我々はarコマンドにフラグ「QCS」を使用します。 manページによると、(クイックアペンドする必要があります)、「Q」は本当に(「使用の置き換え」である)「R」の同義語で、「c」はアーカイブ(そこに何も特別な)を作成し、「S」スキップ我々は最後に再び「RANLIB」を用いてカバーしたインデックス(。
を生成します任意の便利な方法は、ビルトインツール、より速く、この操作を行うために使用して、ありますか? 「クイックアペンド」モードが働いていた場合、それはおそらく、私たちが何をしたいことが、悲しいかななります。
解決
私たちは、タイミングの問題の巨大な部分がアーカイブされているファイルの場所であることがわかりました。上記の数字は、NASデバイス上にあるオブジェクトとアーカイブファイルのためのものです。 40秒 - ローカルハードディスク(一時保存)に同じ操作を行うことは〜20までの時間を短縮します。 、すべてのファイルをコピーするローカル・アーカイブをやって、その結果をコピーするバックNASに直接アーカイブよりも時間がかかりますが、我々は、実質的にパフォーマンスを向上させる必要がある地元の一時保管に私達の全体のビルドプロセスを動かす見ている。