Time Unixコマンドに関するこの回答から、時間がどのように機能するかについての基本的なアイデアが得られます。新しいプロセスをフォークし、その新しいプロセスでコマンドを実行します。ただし、理解できない動作に遭遇しました。
DaCapo ベンチマーク スイートのベンチマークであるlusearchのプロファイルを作成しようとしています。さまざまな構成 (スレッド数と反復回数) で起動し、ベンチマーク出力を無視して、時間を使用して実際のユーザー時間とシステム時間を記録したいと考えています。ほとんどの構成で、私のスクリプトは問題なく動作し、ベンチマークを起動して時間を記録します。
1 つの特定の構成 (大規模なデータセット、2 つのスレッド、10 回の反復) では、ベンチマークが終了しないことがあります (約 100 の暫定的なケースのうち 80%)。これは私がそれを起動するために使用しているコマンドです:
(time -p java -jar DaCapo.jar lusearch -s large -t 2 -i 10
>/dev/null 2>/dev/null) 2>&1 | awk '{print $2 $4 $6}' > timed &
ただし、時間を前に追加しないと、ベンチマークは 100% の時間で終了します (約 100 の暫定的なものでも):
(java -jar DaCapo.jar lusearch -s large -t 2 -i 10 >/dev/null 2>/dev/null)
この動作は、このベンチマーク (およびこの構成) でのみ発生しますが、他のベンチマークをプロファイリングするか、別の数のスレッドまたは別の数の反復を使用すると、同じことが起こっていることがわかりません。私の推測では、それはベンチマークに干渉する何かが行われていることに関係していると思います。
fork+exec がベンチマークの動作をどのように変更できるかわかりません。これを引き起こす可能性のある特定のものはありますか?たとえば、ベンチマークも使用したいリソースを使用している時間はありますか? ベンチマークの起動中に何か問題がありますか?