为什么我们的软件在虚拟化条件下运行得这么慢?

| 我试图弄清楚为什么我们的软件在虚拟化条件下运行时会慢得多。我见过的大多数统计信息都说,在最坏的情况下,性能损失应该只有10%,但是在Windows虚拟服务器上,性能损失可能是100-400%。我一直在尝试剖析差异,但是剖析结果对我而言并没有多大意义。这是在没有虚拟化的Vista 32位设备上进行配置时看到的内容: 这是在具有虚拟化功能的Windows 2008 64位服务器上运行的服务器: 较慢的一个在ѭ0中花费了大量的时间,在较快的一个上显示为0.0s。知道那是什么吗?另外,当我将进程附加到机器上时,只有一个线程,即“ 1”,但是当我在服务器上进行连接时,只有两个线程,即“ 2”和“ 0”。据我所知,我们编写的代码仅使用一个线程。另外,值得的是,这是一个纯控制台编写的纯控制台的应用程序,完全没有UI。 有人能为我阐明这一切吗?甚至只是有关这些
ntdll
kernel32
通话中正在做什么的信息?我也不确定与64/32位相关的差异有多少,与虚拟/非虚拟相关的差异有多少。不幸的是,我无法轻松访问其他配置来确定差异。     
已邀请:
我想我们可以将导致虚拟机性能降低的原因分为两类: 1.配置偏斜 该类别适用于与虚拟化本身无关的所有事物,但是所配置的虚拟机不如真实虚拟机好。一件真正容易的事是给虚拟机一个CPU内核,然后将其与运行于2 CPU 8核16超线程Intel Core i7怪兽上的应用程序进行比较。就您而言,至少您没有运行相同的操作系统。最可能还有其他偏差。 2.虚拟化不适合 像数据库这样的事情需要大量的锁定,因此无法很好地虚拟化,因此典型的开销可能不适用于测试用例。这不是您的确切情况,但有人告诉我MySQL的罚款是30-40%。我注意到您的列表中有一个名为... semaphore的入口点。这表明某些东西会慢慢虚拟化。 基本问题是,无法在用户模式下本机执行的构造将需要陷阱(缓慢,全部依靠自身),然后需要虚拟机管理程序仿真代码中的更多开销。     
我假设您为虚拟机提供了足够的资源,虚拟化的好处是将5个仅以10-15%CPU /内存运行的机器整合到一台将以50-75%CPU运行的机器上/ memory,这仍然会给您“突发”时间留下25-50%的开销。 个人轶事:对20台计算机进行了虚拟化,但是每台计算机都使用了尽可能多的CPU。当一台机器试图使用比单核所能提供的功率更多的功率时,这会引起问题。因此,虚拟机监控程序将单个内核虚拟化为多个内核,从而降低了性能。一旦我们将每个VM的CPU使用量控制到任何单个内核都可以使用的最大数量,性能便急剧上升。     

要回复问题请先登录注册