Share via


Сокеты, ядра и Windows

С распространением многоядерных процессоров все чаще всплывают вопросы о том, сколько же процессоров или ядер поддерживает та или иная редакция Windows? И делает ли вообще Windows различия между ядрами и процессорами? А если еще включить Hyper-Threading? Меняются ли при этом правила лицензирования?

Действительно, если поискать/посмотреть на официальные ресурсы Microsoft, то ясность появляется только с последним вопросом. Согласно данной статье серверное ПО лицензируется по количеству физических процессоров, а не ядер. Иными словами, лицензия на процессор распространяется и на все ядра этого процессора, сколько бы их ни было.

С финансовой точки зрения это понятно и хорошо – не нужно покупать отдельную лицензию на каждое ядро. Но применительно к операционным системам сильно понятнее не становится. Простой пример, представим себе сервер с двумя четырехъядерными процессорами. Вопрос: «Какая минимальная редакция Windows Server 2003 сможет задействовать все восемь ядер этого сервера»? Для тех, кого подробности не интересуют, сразу отвечу: «Windows Server 2003 Web Edition». А теперь углубимся в детали.

Начнем с терминологии. Не претендуя на строгие определения, хотелось бы выделить:

- Физический процессор – чип, содержащий в себе основные компоненты (АЛУ, блок управления, кэш-память первого и второго уровня), реализующие вычислительный процесс.

- Физический процессор крепится в сокет на системной плате. Количество задействованных сокетов, таким образом, совпадает с количеством установленных физических процессоров. В данном контексте сокет и физический процессор можно рассматривать в качестве синонимов, поскольку лицензирование осуществляется именно по количеству физических процессоров.

- Ядро процессора собственно выполняет вычислительные операции. Современные процессоры могут содержать более одного ядра.

- Логический процессор – процессор, который «видит» Windows, то есть который используется планировщиком ОС для планирования и выполнения потоков. Количество логических процессоров равно сумме ядер всех установленных физических процессоров. Однако если физический процессор поддерживает технологию Hyper-Threading, и данная технология разрешена в BIOS компьютера, каждое ядро физического процессора рассматривается ОС как два логических процессора.

Также надо отметить, что дистрибутивы всех систем семейства Windows NT вплоть до Windows Vista содержали разные наборы файлов ядра ОС (ntoskrnl.exe и hal.dll) для однопроцессорных конфигураций (конфигураций, в которых ОС «видит» только один логический процессор) и для многопроцессорных. Windows Vista и Windows Server 2008 содержат только многопроцессорное ядро.

Теперь самое главное. При выборе редакции операционной системы необходимо помнить про два важных ограничения.

1. Лицензионное ограничение. Согласно лицензии, разные редакции Windows допускают одновременное использование различного числа физических процессоров (сокетов). И это лицензионное ограничение технически реализовано в соответствующем дистрибутиве.

Поясню, что означает эта фраза. Ограничение является лицензионным, потому что с точки зрения внутреннего устройства операционной системе абсолютно все равно, установлено в компьютере два процессора, четыре или восемь. При развертывании, если установщик операционной системы распознает больше одного логического процессора, он извлекает из дистрибутива и устанавливает многопроцессорное ядро Windows. И именно это ядро ОС используется во всех случаях, когда логических процессоров больше одного. Таким образом, нет отдельного четырехпроцессорного или восьмипроцессорного ядра, и с точки зрения архитектуры, редакции, скажем, Windows Server 2003 абсолютно одинаковы. Тем не менее, указанное лицензионное ограничение технически реализовано в соответствующем дистрибутиве. Это означает, что в момент развертывания установщик проверяет, соответствует ли обнаруженное количество процессоров данной редакции Windows. И если нет, вы можете увидеть сообщение вроде этого: «Windows Small Business Server 2003 supports two processors. More than two processors were detected in this computer. The server will only use two processors. However, hyperthreading by processors is supported. To continue Setup, select the I acknowledge all warnings check box». Вот здесь и возникает вопрос: «Как Windows подсчитывает количество процессоров, или иными словами, способна ли ОС различать сокеты и ядра и распознавать технологию Hyper-Threading»?

Windows Vista и Windows Server 2008 делают это «из коробки» абсолютно корректно. Я также не столкнулся с проблемами при использовании Windows XP SP2 и Windows Server 2003 (любые редакции, с или без сервисных пакетов). Тестирование проводилось на машине с двумя двухъядерными процессорами и с включенной опцией Hyper-Threading. Все системы, включая Windows XP SP2 и Windows Server 2003 Web Edition, корректно использовали доступные процессорные мощности (Task Manager отображал восемь логических процессоров). Если у вас все-таки возникают проблемы, обратите внимание на статьи 932370 и 936235 Microsoft Knowledge Base. Не удалось установить на данный компьютер лишь Windows XP Professional RTM. Но использование Service Pack 2 проблему снимает.

2. Архитектурное ограничение. На уровне ядра 32-битные версии Windows поддерживают максимум 32 логических процессора, 64-битные версии – максимум 64 логических процессора. И вот эти максимумы не обойти никакими фиксами и редакциями.

Важное следствие из этого ограничения. Если на сервере с четырьмя четырехъядерными процессорами включена опция Hyper-Threading, мы упираемся в указанный выше предел (16 ядер х 2 = 32 логических процессора). Соответственно, если в такой сервер добавляется очередной физический процессор, Hyper-Threading в BIOS надо отключить, иначе Windows «не увидит» и не сможет задействовать новый процессор.

Надеюсь, я внес ясность в этот вопрос. Или нет? :)