我试图弄清楚为什么我们的软件在虚拟化下运行时运行得这么慢。我见过的大多数统计数据都说,在最坏的情况下它应该只有 10% 的性能损失,但在 Windows 虚拟服务器上,性能损失可以是 100-400%。我一直在尝试分析差异,但分析结果对我来说没有多大意义。这是我在没有虚拟化的 Vista 32 位机器上配置文件时看到的内容:
下面是在具有虚拟化的 Windows 2008 64 位服务器上运行的一个:
慢的花费了大量的时间,RtlInitializeExceptionChain
在快的上显示为 0.0s。知道那是做什么的吗?另外,当我附加到我的机器的进程时,只有一个线程,PulseEvent
但是当我在服务器上连接时,有两个线程,GetDurationFormatEx
并且RtlInitializeExceptionChain
. 据我所知,我们编写的代码只使用一个线程。此外,值得一提的是,这是一个纯 C 语言编写的纯控制台应用程序,完全没有 UI。
任何人都可以为我阐明这一切吗?甚至只是关于其中一些ntdll
和kernel32
调用正在做什么的信息?我也不确定有多少差异与 64/32 位相关,有多少与虚拟/非虚拟相关。不幸的是,我无法轻松访问其他配置来确定差异。