Я пытаюсь выяснить, почему наше программное обеспечение работает намного медленнее, чем при виртуализации.Большинство статистических данных, которые я видел, говорят, что в худшем случае это всего лишь 10% снижения производительности, но на виртуальном сервере Windows снижение производительности может составлять 100-400%.Я пытался профилировать различия, но результаты профиля не имеют большого смысла для меня.Вот то, что я вижу, когда я создаю профиль на своем 32-разрядном компьютере Vista без виртуализации:
А вот один запуск на 64-разрядном сервере Windows 2008 с виртуализацией:
Медленный тратит очень много времени в RtlInitializeExceptionChain
, который показывает как 0,0 с на быстром.Есть идеи, что это делает?Кроме того, когда я присоединяю к процессу мою машину, существует только один поток, PulseEvent
, однако, когда я подключаюсь к серверу, появляются два потока, GetDurationFormatEx
и RtlInitializeExceptionChain
.Насколько я знаю, код, в котором мы написали, использует только один поток.Кроме того, чего бы это ни стоило, это только консольное приложение, написанное на чистом C и вообще без пользовательского интерфейса.
Кто-нибудь может пролить свет на что-нибудь из этого для меня?Даже просто информация о том, что делают некоторые из этих вызовов ntdll
и kernel32
?Я также не уверен, сколько различий связано с 64/32-битными и сколько виртуальных / не виртуальных.К сожалению, у меня нет легкого доступа к другим конфигурациям, чтобы определить разницу.