从Time Unix 命令的这个答案中,我得到了关于时间如何工作的基本概念。它派生一个新进程并在该新进程中执行命令。但是,我遇到了我无法理解的行为。
我正在尝试分析lusearch,这是DaCapo 基准套件的基准。我想以不同的配置(线程数和迭代次数)启动它,忽略基准输出并使用时间来记录真实、用户和系统时间。对于绝大多数配置,我的脚本运行良好,启动基准测试并记录时间。
对于一种特定的配置(大型数据集、两个线程和十次迭代),基准测试有时不会终止(80% 的情况,几乎 100 次尝试)。这是我用来启动它的命令:
(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 如何改变基准行为。有什么具体的原因会导致这种情况吗?例如:时间是否在使用基准测试也想要使用的某些资源?启动基准测试时我做错了什么?