消除重复执行同一程序的运行时间变化

时间:2012-07-08 23:40:29

标签: performance virtual-machine

我正在尝试设计一个在线编程竞赛评委,我需要确保的一件事是,当编译相同的代码时(假设要求), 给定相同的输入,每次完成时,程序执行的时间应该完全相同。

目前,我正在使用一个简单的python脚本 有2个线程,其中一个调用阻塞系统调用,开始执行测试代码,另一个跟踪时间并发送一个kill信号给 限制到期后的子进程。顺便说一下,出于安全性和方便性(设置适当的chroot),我在虚拟机内执行此操作 方式太复杂,风险更大。)

但是,在相同条件下(即,当我恢复快照时),我仍然会在两侧大约50ms的范围内获得执行所需的时间变化。由于这可以防止设置严格的时间限制,无论如何都要消除这种变化吗?

1 个答案:

答案 0 :(得分:2)

我不是那个领域的专家,但我认为你不能做到这一点。即使您在VM中恢复快照,“外部”机器的状态也会大不相同。你有两个运行的操作系统,每个操作系统都有多个进程可能会在某些时候竞争资源。如果它是一个网站或具有互联网连接的PC,您可能会遇到不同数量的连接(或请求),这将使进程开始运行并消耗请求等...如果某些应用程序尝试访问硬盘,物理磁盘的初始位置对寻道时间等很重要......

如果你想要一个“确定性”限制,你可能想检查一下你是否可以计算某个过程执行了多少指令,或类似的东西。

无论如何,我参与了几个编程内容,据我所知,他们并不关心50毫秒的差异...如果你做了一个正确的算法,你可以真正进入时间大利润。所以我建议你和它一起生活,并把它包含在规则中。