Изменения внутреннего устройства ядра Windows Server 2008 - Оптимизации NUMA

ОГЛАВЛЕНИЕ

Оптимизации NUMA

В Windows Server 2003 появились оптимизации для компьютеров NUMA в планировщике потоков и диспетчере памяти, а в Windows Server 2008 оптимизации NUMA добавлены в диспетчер операций ввода-вывода и расширены оптимизации NUMA диспетчера памяти.

Системы NUMA, как правило, являются многопроцессорными системами, в которых память обладает различной задержкой, зависящей от того, который процессор обращается к ней (см. рис. 4). Память делится на узлы, при этом задержки между процессорами и узлами могут иметь разное значение, и каждый ЦПУ считается частью того узла, к которому он имеет самый быстрый доступ.


Рис. 4 Пример системы NUMA

Системы NUMA, в особенности имеющие более восьми ЦПУ, зачастую оказываются более рентабельными и производительными, чем системы с единообразным доступом к памяти. В то время как в системах с единообразным доступом к памяти память должна быть доступна всем ЦПУ в одинаковой мере, в системе NUMA можно реализовать высокоскоростное внутреннее взаимодействие для памяти, подключенной непосредственно к ЦПУ, и более дешевое взаимодействие с большой задержкой для процессоров и памяти, удаленных друг от друга.

Для эффективного масштабирования в системе NUMA операционная система или приложение должны иметь информацию о топологии узлов, чтобы вычисления выполнялись поблизости от памяти, содержащей участвующие в вычислениях данные и код. Например, планировщик Windows назначает каждому потоку так называемый идеальный процессор, представляющий собой ЦПУ, на котором планировщик всегда пытается выполнять поток. Такой подход повышает вероятность того, что данные, помещенные потоком в кэш ЦПУ, будут доступны потоку всякий раз при его выполнении.

В планировщике Windows Server 2003 эта концепция расширена. Узел, содержащий идеальный процессор, считается идеальным узлом потока, и планировщик пытается запланировать этот поток на другом ЦПУ идеального узла, если идеальный процессор занят выполнением другого потока. Диспетчер памяти в Windows Server 2003 также поддерживает концепцию NUMA и, по мере возможности, запрашивает выделение памяти для потока в памяти узла, на котором поток выполняется.

В Windows Server 2008 диспетчер памяти делит невыгружаемые буферы памяти ядра (память, используемая ядром и драйверами устройств для хранения данных, которая постоянно находится в ОЗУ) между узлами, чтобы эти участки памяти выделялись на узле, на котором инициировано выделение памяти. Системные записи таблицы страниц (PTE) выделяются на узле, инициирующем выделение, если для выделения памяти требуется новая страница таблицы страниц для удовлетворения потребности в памяти, вместо того, чтобы делать это на любом другом узле, как это происходит в среде Windows Server 2003.

В Windows Server 2003, когда поток распределяет память, диспетчер памяти отдает предпочтение узлу, на котором в момент выделения памяти выполняется поток. Если поток сразу же планируется на не идеальный узел, все распределения, выполняемые в это время, будут осуществляться на не идеальном узле. Поэтому, когда поток, в конечном счете, выполняется на своем идеальном узле, он будет не настолько близок, как это могло бы быть, к данным или коду, хранящимся в выделенной памяти.

Для разрешения этой проблемы диспетчер памяти в Windows Server 2008 отдает предпочтение идеальному узлу потока для всех выделение памяти для потока, даже если поток выполняется поблизости от другого узла. Кроме этого, диспетчер памяти автоматически определяет задержки между процессорами и узлами, поэтому, если на идеальном узле недостаточно памяти, диспетчер переходит к проверке узла, ближайшего к идеальному. Дополнительно, если поток ссылается на код или данные, диспетчер памяти перемещает страницы в свой список ожидания идеального узла потока.

Приложения, стремящиеся управлять местонахождением своих участков выделенной памяти, теперь могут использовать новые интерфейсы API памяти NUMA, что позволяет им указывать предпочтительный узел для выделения памяти, представления сопоставления файлов и объекты сопоставления файлов. Для выделения, связанного с сопоставлением файлов, диспетчер памяти проверяет, указывает ли операция сопоставления узел, затем проверяет, указан ли узел объектом сопоставления файлов, и, наконец, если ничего не остается делать, обращается к идеальному узлу потока.

До появления системы Windows Server 2008 прерывание и соответствующий отложенный вызов процедуры (DPC) для хранения или сетевых операций ввода-вывода мог выполняться на любом ЦПУ, включая процессоры с другого узла, а не того, на котором инициирован ввод-вывод. Это могло стать причиной того, что данные, считанные или записанные операцией ввода-вывод, окажутся в памяти другого узла, а не того, на котором был получен к ним доступ.

Чтобы избежать этого, система ввода-вывода операционной системы Windows Server 2008 направляет выполнение DPC на ЦПУ того узла, где был инициирован ввод-вывод, а системы, в которые входят устройства, поддерживающие формат MSI-X шины PCI (расширение стандарта MSI), могут расширить возможности размещения выполнения операций ввода-вывода с помощью драйверов устройств, которые используют преимущества интерфейсов API операционной системы Windows Server 2008 для направления прерывания ввода-вывода на процессор, инициировавший ввод-вывод.