c - 为什么我们的软件在虚拟化下运行会慢很多?

标签 c windows profiling virtualization verysleepy

我想弄清楚为什么我们的软件在虚拟化下运行时运行速度如此之慢。我见过的大多数统计数据都表明,在最坏的情况下应该只有 10% 的性能损失,但在 Windows 虚拟服务器上,性能损失可以达到 100-400%。我一直在尝试分析差异,但分析结果对我来说意义不大。这是我在没有虚拟化的 Vista 32 位机器上进行配置时看到的内容: enter image description here

这是一个在 Windows 2008 64 位服务器上运行的虚拟化程序:enter image description here

慢的在 RtlInitializeExceptionChain 中花费了大量的时间,在快的上显示为 0.0s。知道那是做什么的吗?此外,当我连接到我的机器的进程时,只有一个线程 PulseEvent 但是当我连接到服务器时,有两个线程 GetDurationFormatExRtlInitializeExceptionChain。据我所知,我们编写的代码只使用一个线程。此外,值得一提的是,这是一个纯 C 语言编写的控制台应用程序,完全没有 UI。

任何人都可以为我阐明这些吗?甚至只是关于这些 ntdllkernel32 调用正在做什么的信息?我也不确定有多少差异与 64/32 位相关,有多少与虚拟/非虚拟相关。不幸的是,我无法轻松访问其他配置来确定差异。

最佳答案

我想我们可以将虚拟机性能较慢的原因分为两类:

1。配置偏差

此类别适用于所有与虚拟化本身无关但配置的虚拟机不如真实机器的事情。一件真正容易做的事情是只给虚拟机一个 CPU 内核,然后将其与运行在 2 CPU 8 核 16 超线程 Intel Core i7 怪物上的应用程序进行比较。就您而言,至少您没有运行相同的操作系统。很可能还有其他偏差。

2。虚拟化不合适

数据库之类的东西会进行大量锁定,虚拟化效果不佳,因此典型的开销可能不适用于测试用例。这不是您的确切情况,但我被告知 MySQL 的罚款是 30-40%。我注意到您的列表中有一个名为 ...semaphore 的入口点。这是虚拟化缓慢的迹象。

基本问题是,无法在用户模式下 native 执行的构造将需要陷阱(缓慢,完全靠它们自己),然后在管理程序仿真代码中产生更多开销。

关于c - 为什么我们的软件在虚拟化下运行会慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682055/

相关文章:

c++ - 在这里进行位移有什么意义?

python - 在 Go 中将 C 和 Python 代码串在一起?

c - 内存复制基准测试的吞吐量分析

c++ - 谁能给我解释一下这个 IOCP 图?

python - 如何从批处理文件写入 Windows 网络共享?

c - 一个函数 "remember"怎么可能是它下次使用的结果?

python - 如何在 Windows 上安装 Python 版 pango?

python - 为什么 Python 中的连接看起来越来越慢?

c++ - gcc -fprofile-arcs : how to output a file on custom RTOS

java - 无法使用 TPTP 分析远程 Java 应用程序