Поддержка более 64-х процессоров в Win7 и Win2008 R2

В обеих новых операционных системах, клиентской Windows 7 и серверной Windows Server 2008 R2, которые стали доступны подписчикам MSDN с 6-го августа, поддержка логических процессоров увеличена до 256.

Поддержка такого количества логических процессоров основано на новой концепции – группы. Группа – статический набор, объединяющий в себе до 64-х логических процессоров, рассматриваемых операционной системой как одна единица планирования. Архитектура построена по принципу NUMA (non-uniform memory access), при которой каждый процессор работает с той памятью, к которой он ближе всего физически. Более подробно про NUMA можно почитать здесь (на русском) и здесь (на английском).

Группа имеет следующие характеристики:

  • Ядро Windows во время загрузки определяет принадлежность процессора к определенной группе.
  • Каждый логический процессор принадлежит одной группе.
  • Все логические процессоры в ядре и все ядра физического процессора с наибольшей вероятностью будут объеденены в одну группу.
  • Физические процессоры, ближе всего расположеные друг к другу (физически) также объеденяются в одну группу.
  • Один поток может быть назначен только одной группе в единицу времени (и эта группа будет обязательно “привязана”, с помощью так называемого понятия thread affinity к одноку потоку).
  • Прерывание может адресовать только процессоры одной группы.
  • В архитектурах NUMA, группа может содержать процессоры из одного или нескольких узлов, но все процессоры узла назначаются на одну группу с максимальной вероятностью.

В основе групповой архитектуры лежат следующие допущения:

  • Соотвествующий код исполняется на процессорах в пределах одной группы.
  • Лучшая производительность достигается если процессоры в группе физически расположены рядом.

Такая архитектура имеет следующие преимущества:

  • Существующие драйвера и приложения, разработанные для систем, имеющих менее 64-х логических процессоров, могут исполняться на новом оборудовании без модификации кода.
  • Групповая архитектура легко расширяема для поддержки бОльшего количества процессоров в будущем.
  • Программное обеспечение может использовать доступные интерфейсы для определения связей между процессорами, что, опять же, позволяет добиться наиболее эффективного их использования.

На рисунке ниже показана гипотетическая система, с максимальным количеством логических процессоров (256) 

group

Группа 0 содержит 2 узла NUMA по 32 логических процессора каждый. Группы 1, 2 и 3 содержат по одному узлу NUMA из 64-х логических процессоров. 

Команда разработки Windows в плане поддержки высокопроизводительных вычислений опережает  команду разработки CLR; пока функции для работы более чем с 64-мя процессорами доступны только в виде WinAPI  (полный список можно найти здесь). Их реализация не планируется в CLR 4.0, хотя сообщество как всегда уже реализовало API для .NET. Скачать можно с Codeplex’a. У кого уже сегодня есть доступ к подобным аппаратным конфигурациям, можно присоединиться к проекту и помочь авторам с тестированием.