Это очень хороший и актуальный вопрос. Как мы все знаем, гиперпоточное ядро не является реальным процессором / ядром. Вместо этого это виртуальный процессор / ядро (отныне я скажу ядро). Предполагается, что планировщик ЦП Windows, начиная с Windows XP, способен отличать сверхпоточные (виртуальные) ядра от реальных ядер. Тогда вы можете себе представить, что в этом совершенном мире он обращается с ними «просто правильно», и это не проблема. Вы были бы неправы.
Собственная рекомендация Microsoft по оптимизации сервера Windows 2008 BizTalk рекомендует отключить HyperThreading. Для меня это говорит о том, что обработка гиперпоточных ядер не идеальна, и иногда потоки получают временной интервал на гиперпоточном ядре и получают штраф (доля производительности реального ядра, 10% I '). Догадаюсь, а Microsoft догадается на 20-30%).
Ссылка на статью Microsoft, где предлагается отключить HyperThreading для повышения эффективности сервера: http://msdn.microsoft.com/en-us/library/cc615012(BTS.10).aspx
Это ВТОРАЯ рекомендация после обновления BIOS, поэтому они считают это важным. Они говорят:
ИЗ MICROSOFT:
" Отключить гиперпоточность на BizTalk
Серверные и SQL Server компьютеры
Это критическая гиперпоточность
выключен для BizTalk Server
компьютеры. Это настройка BIOS,
обычно встречается в процессоре
настройки настройки BIOS.
Гиперпоточность делает сервер
кажется, есть больше
процессоры / процессорные ядра, чем это
на самом деле делает; Однако гипер-резьба
Процессоры обычно обеспечивают между
20 и 30% производительности
физический процессор / процессорное ядро.
Когда BizTalk Server считает число
процессоров, чтобы настроить его
алгоритмы самонастройки;
гиперпоточные процессоры вызывают эти
корректировки должны быть перекошены, что является
вредно для общей производительности. «
Теперь они говорят, что это происходит из-за того, что они отбрасывают алгоритмы самонастройки, но затем продолжают упоминать о проблемах конкуренции (предполагая, что это большая проблема планирования, по крайней мере для меня). Прочитайте это как хотите, но я думаю, что это говорит само за себя. HyperThreading была хорошей идеей, когда работали с однопроцессорными системами, но сейчас это просто сложность, которая может снизить производительность в этом многоядерном мире.
Вместо того, чтобы полностью отключить HyperThreading, вы можете использовать такие программы, как Process Lasso (бесплатно), чтобы устанавливать сродства ЦП по умолчанию для критических процессов, чтобы их потоки никогда не выделялись виртуальным ЦП.
Итак ... Я не думаю, что кто-то действительно знает, насколько хорошо Windows CPU Scheduler обрабатывает виртуальные процессоры, но я могу с уверенностью сказать, что XP справляется с этим хуже, и с тех пор они постепенно улучшают его , но это все еще не идеально. На самом деле, он НИКОГДА не может быть идеальным, потому что ОС не знает, какие потоки лучше всего разместить на этих более медленных виртуальных ядрах. В этом может быть проблема и почему Microsoft рекомендует отключить HyperThreading в серверных средах.
Также помните, что даже БЕЗ HyperThreading, существует проблема «перегиба ядра». Если вы можете сохранить поток в одном ядре, это хорошо, так как уменьшает штрафы за изменение ядра.