Поддержка более 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)
Группа 0 содержит 2 узла NUMA по 32 логических процессора каждый. Группы 1, 2 и 3 содержат по одному узлу NUMA из 64-х логических процессоров.
Команда разработки Windows в плане поддержки высокопроизводительных вычислений опережает команду разработки CLR; пока функции для работы более чем с 64-мя процессорами доступны только в виде WinAPI (полный список можно найти здесь). Их реализация не планируется в CLR 4.0, хотя сообщество как всегда уже реализовало API для .NET. Скачать можно с Codeplex’a. У кого уже сегодня есть доступ к подобным аппаратным конфигурациям, можно присоединиться к проекту и помочь авторам с тестированием.