linux - 如果程序在虚拟机上运行,​​系统执行时间会改变吗?

标签 linux operating-system runtime virtual-machine

一位 friend 请求一个可以用来查找真实系统的命令 Linux 中程序的执行时间。我回复说time 命令是一个很棒的命令。

他接着问,当你查询执行时间时,虚拟机返回的程序的执行时间(通过time)是否与系统真实执行时间相同程序?

我的直觉是说这取决于:

  1. 如果机器上有足够的资源,则返回的虚拟机时间将与程序执行的实际/挂钟时间相同。

  2. 如果系统没有足够的资源,那么虚拟机时间将与真实(系统)执行时间有很大差异。此外,VM是操作系统之上的应用程序,它有自己的调度程序。这意味着虚拟机需要调用系统调用,然后由操作系统处理,操作系统又与硬件通信,然后提供真实的(系统)执行时间。因此,在这种情况下,返回的时间可能与实际时间不同。

  3. 如果执行的程序很简单,那么虚拟机时间可能等于实际(系统)时间。

  4. 如果执行的程序不简单,那么虚拟机时间可能会有很大不同。

我的假设正确吗?

我现在想知道:如何找到/计算在虚拟机上运行的程序的实际执行时间?有什么想法吗?

最佳答案

程序的复杂性并不重要。

guest 操作系统无法看到主机。如果您在 guest 上运行“time”,则返回的“sys”值仅描述所使用的 guest 系统资源。

或者换句话来说:在典型的虚拟机设置中,您将仅将主机 CPU 资源的一部分分配给 guest 操作系统。但这就是访客可以看到的所有内容,因此,这就是“时间”命令可以报告的所有内容。由于您在启动 VM 时分配了此资源,因此 guest 无法耗尽所有主机资源。

几乎所有虚拟机都是如此:如果 guest 了解虚拟机管理程序,这将是一个主要的安全问题。

所以,是的,虚拟机与真实硬件的系统时间可能绝对不同,因为 guest 不会拥有完整的资源。您还可能会看到不同的情况,具体取决于您处理的是硬件虚拟化还是软件虚拟化。

这里有一些不错的读物(第 10.3 节到 10.5 节):

https://www.virtualbox.org/manual/ch10.html#hwvirt

关于linux - 如果程序在虚拟机上运行,​​系统执行时间会改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133570/

相关文章:

cocoa - 从 cocoa 代码中获取链接库列表

javascript - 在运行时更新常见的 AngularJS HTTP header

java - Java代码中的Activiti工作流调用

linux - ls:取消引用符号链接(symbolic link)但保留颜色

子进程的 printf 未显示在父进程的控制台中

c++ - 自动/静态内存分配

java - 使用 Java 将任何操作系统的全局输入事件映射到另一个输入事件

java - 使用 Java 打开终端窗口

linux - 汇编:为什么跳转到通过 ret 返回的标签会导致段错误?

java - java在不同硬件上的性能?