![VM来宾系统是否仅当VM的进程在主机上调度时才运行?](https://linux22.com/image/92161/VM%E6%9D%A5%E5%AE%BE%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%90%A6%E4%BB%85%E5%BD%93VM%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%9C%A8%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%B0%83%E5%BA%A6%E6%97%B6%E6%89%8D%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我正在准备一个在云上运行的企业软件包,但我面临着该软件包在我们当前的部署上作为实时进程运行的问题。没有人真正确定系统是否真的有必要这样做,但他们都强烈建议这样做。
然而,在云服务上运行时,我们的虚拟机将与其他十几个(也许数百个?)共享一个主机,即使我可以将进程设置为在虚拟机内实时调度,虚拟机本身仍然具有正常的优先级在主机上。那是对的吗?虚拟化软件是否与主机上的任何其他进程一样进行调度?
答案1
就主机而言,虚拟机是一个像任何其他进程一样被调度的进程。最后,每个处理器(每个核心)一次只能运行一个程序。主机的调度程序决定它是哪一个。
据我所知,云服务上通常使用的虚拟机技术都无法提供实时保证。制作具有实时保证的虚拟机绝对是可能的,但这是有代价的——其他进程获得的 CPU 时间更少。成本/收益通常与云托管的目标不符,云托管的目标是在许多竞争者之间分摊资源,以便处理器不会闲置太久。
如果您想要实时保证,这将是一项与基本云托管完全不同的服务,并且您需要付费。由于将多个实时进程放在一起往往需要整体视图以确保所有进程都按时完成,因此您很可能最终会在专用硬件上按照您想要的方式运行您的东西。
云和实时确实让我觉得这是一个奇怪的组合。只有在下载响应后,云服务上运行的任务才会完成,并且对于需要实时响应的端点与云服务之间的通信通常没有任何服务保证。实时计算通常必须保持在您控制的网络范围内,在那里您可以保证吞吐量和延迟。