一位 friend 请求一个可以用来查找真实系统的命令
Linux 中程序的执行时间。我回复说time
命令是一个很棒的命令。
他接着问,当你查询执行时间时,虚拟机返回的程序的执行时间(通过time
)是否与系统真实执行时间相同程序?
我的直觉是说这取决于:
如果机器上有足够的资源,则返回的虚拟机时间将与程序执行的实际/挂钟时间相同。
如果系统没有足够的资源,那么虚拟机时间将与真实(系统)执行时间有很大差异。此外,VM是操作系统之上的应用程序,它有自己的调度程序。这意味着虚拟机需要调用系统调用,然后由操作系统处理,操作系统又与硬件通信,然后提供真实的(系统)执行时间。因此,在这种情况下,返回的时间可能与实际时间不同。
如果执行的程序很简单,那么虚拟机时间可能等于实际(系统)时间。
如果执行的程序不简单,那么虚拟机时间可能会有很大不同。
我的假设正确吗?
我现在想知道:如何找到/计算在虚拟机上运行的程序的实际执行时间?有什么想法吗?
最佳答案
程序的复杂性并不重要。
guest 操作系统无法看到主机。如果您在 guest 上运行“time”,则返回的“sys”值仅描述所使用的 guest 系统资源。
或者换句话来说:在典型的虚拟机设置中,您将仅将主机 CPU 资源的一部分分配给 guest 操作系统。但这就是访客可以看到的所有内容,因此,这就是“时间”命令可以报告的所有内容。由于您在启动 VM 时分配了此资源,因此 guest 无法耗尽所有主机资源。
几乎所有虚拟机都是如此:如果 guest 了解虚拟机管理程序,这将是一个主要的安全问题。
所以,是的,虚拟机与真实硬件的系统时间可能绝对不同,因为 guest 不会拥有完整的资源。您还可能会看到不同的情况,具体取决于您处理的是硬件虚拟化还是软件虚拟化。
这里有一些不错的读物(第 10.3 节到 10.5 节):
关于linux - 如果程序在虚拟机上运行,系统执行时间会改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133570/