一位朋友要求提供一个可用于查找真实系统的命令
Linux中程序的执行时间。我回复说time
命令很棒。
然后他问,当您查询执行时间时,虚拟机返回的程序执行时间(通过time
),与程序的实际系统执行时间相同?
我的直觉是说取决于:
如果机器上有足够的资源,则返回的VM时间将与程序执行的实际/挂钟时间相同。
如果系统没有足够的资源,则VM时间将与实际(系统)执行时间大不相同。此外,VM是OS之上的应用程序,它具有自己的调度程序。这意味着VM需要调用系统调用,然后由OS处理,然后OS与硬件通信,然后提供实际(系统)执行时间。因此,在这种情况下,返回的时间可能与实时不同。
如果执行的程序很简单,则VM时间可能等于实际(系统)时间。
如果执行的程序不简单,则VM时间可能会有很大不同。
我的假设是否正确?
我现在想知道: 你怎么能找到/计算在虚拟机上运行的程序的实际执行时间?有什么想法吗?
答案 0 :(得分:1)
该计划的复杂性并不重要。
来宾操作系统无法看到主机。如果你跑'时间'对客人来说,' sys'返回的值仅描述 guest 系统资源。
或者重新说明:在典型的虚拟机设置中,您只会将部分主机CPU资源分配给来宾操作系统。但是,所有客人都可以看到,因此,所有的时间和时间都是如此。命令可以报告。由于您在启动VM时已分配此内容,因此guest虚拟机无法耗尽所有主机资源。
几乎所有虚拟机都是如此:如果访客知道虚拟机管理程序,那将是一个重大的安全问题。
所以是的,虚拟机与真实硬件的系统时间完全不同,因为客户不会拥有完整的资源。根据您是否正在处理硬件或软件虚拟化,您还可以看到可变性。
这里有一些好的阅读(第10.3至10.5节):