Некоторое время назад я немного поигрался с новой виртуальной машиной Win2008 и обнаружил некоторые серьезные опасения.
Сервер - Dell T610. 16гиг, 4 ядра, 8 логических, 2,4 ГГц Xeon, серия 5600. ESXi 4.1.0 Гость 2008 64bit, с 2vCPU
Я тестировал производительность процессора с помощью 7Zip на файле размером 400 мегабайт. Наши требования к серверу особенно важны для однопоточной производительности, поэтому я запускаю 7Zip только с одним потоком.
7zip занимает на ВМ 4:50. Для сравнения, на недавнем 4-ядерном сервере с частотой 2 ГГц этот процесс занимает 4 часа.
Очевидно проблема здесь.
Поэтому я попытался установить привязку к процессу для процесса 7Zip.exe. На этот раз сжатие заняло всего 3:20. Обратите внимание, что установка привязки на физическом компьютере не имеет значения. (Так же быстро, включен или выключен) Как на физических, так и на виртуальных машинах, когда привязка не установлена, вы можете видеть, как процесс выполняется между всеми ядрами в Taskman)
Ирония заключается в том, что на сильно загруженной машине задачи будут выполняться быстрее, потому что с большей вероятностью они останутся на том же процессоре.
Вопрос в том, почему у Windows такая потеря процессора, а у Linux - нет?
«Таким образом, в основном для однопоточных (или ограниченных) приложений, иногда лучше установить привязку ЦП к определенному ядру или подмножеству ядер. Это позволит масштабированию частоты процессора« Турбо »включиться и поддерживаться (вместо этого перехода к различным ядрам, которые нельзя увеличить, а можно даже уменьшить).
«На данный момент ни один планировщик ОС не учитывает активную тактовую частоту отдельных ядер (afaik). Возможно, это изменится в будущем выпуске Windows, но это кажется маловероятным, по крайней мере, в течение нескольких лет».