NUMA

You are currently browsing the archive for the NUMA category.

По материалпм статьи: SQL 2016 – It Just Runs Faster: Automatic Soft NUMA
30 марта 2016

Автор: Nitin Verma – Principal SQL Server Developer, Bob Dorr – Principal SQL Server Escalation Engineer

Мощности серверного оборудования растут из года в год, что обусловлено многолетним развитием технологий изготовления процессоров. Анализируя результаты наших исследований того, как работает SQL Server на современном оборудовании, и как наши клиенты достигают оптимального для себя масштабирования вычислительных ресурсов, мы выдвинули на передний план дальнейшего развития сервера баз данных необходимость улучшения возможностей секционирования обслуживания нагрузки. В настоящее время, именно основанный на секционировании дизайн является самым распространённым способом локализации обслуживания нагрузки и улучшения производительности и масштабируемости. Примером того, как SQL Server использует секционирование нагрузки является объект CMemThread.

Read the rest of this entry »

По материалам статьи: Running SQL Server on Machines with More Than 8 CPUs per NUMA Node May Need Trace Flag 8048

Данная статья относится к следующим версиям SQL Sever: 2008, 2008 R2, 2012 и 2014. Первый вариант статьи был опубликован в 2011г.

Примечание: в данной статье под количеством процессоров подразумеваются не сокеты, а представленные в системе логические процессоры. Рекомендации статьи применимы в тех случаях, когда для сервера баз данных доступно более восьми логических процессоров.

В зависимости от того, для каких нужд SQL Server использует память, дизайн ядра сервера баз данных предусматривает возможность секционирования распределения памяти. В процессе разработки SQL Server можно было выбирать схему секционирования исполнителя по процессорам, узлам или глобально. Некоторые связанные с распределением памяти функциональные модули SQL Server используют модуль распределения CMemPartitioned. Этот модуль секционирует память по процессорам или NUMA узлам, что может способствовать повышению параллелизма и производительности.

CMemPartitioned можно считать обычной «кучей» (хотя это и не HeapCreate), поскольку используется одна и та же концепция. Если при создании «кучи» вам нужны синхронизированные оценки, то вы можете указать размер по умолчанию и другие атрибуты. Обычно, когда созданию объектов памяти причастны разработчики SQL Server, они обеспечивают индикацию того, что будет задействовано что-то вроде защищённого поточного доступа, схемы секционирования и другие опции.

Разработчик инициирует создание объекта, и потом, когда происходит новое распределение, всё будет происходить по твёрдым правилам, которые иллюстрирует рисунок ниже:

Слева показан приходящий от исполнителя запрос, которому нужен объекта памяти на базе модели секционирования памяти по узлам. Это позволяет использовать объекты синхронизации (обычно типа: CMEMTHREAD или SOS_SUSPEND_QUEUE) уровня узла, и память выделяется из локальной памяти того NUMA узла, для которого назначен этот исполнитель.

Справа приходит запрос на распределение объекта памяти, для которого предписано исполнение на конкретном процессоре. Это позволяет использовать объект синхронизации уровня процессора, и выделять память, локальную для исполнителя этого процессора.

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

Read the rest of this entry »

По материалам статьи: Кун Ченг (Kun Cheng) Maximizing SQL Server Throughput with RSS Tuning

Рецензенты: Thomas Kejser, Curt Peterson, James Podgorski, Christian Martinez, Mike Ruthruff
Перевод: Александр Гладченко
Технические редакторы перевода: Алексей Халяко, Ирина Наумова

Функциональность Receive-Side Scaling (RSS) впервые появилась в Windows 2003. Это нововведение было призвано повысить возможности масштабируемости операционной системы Windows, и этим предоставить новые возможности по обслуживанию большого сетевого трафика. Такой трафик характерен для систем, где SQL Server обслуживает OLTP нагрузку. Подробное описание того, какие усовершенствования RSS получила операционная система Windows 2008, можно узнать из отчёта – Receive-Side Scaling Enhancements in Windows Server 2008 и в блоге – Scaling Heavy Network Traffic with Windows.

Read the rest of this entry »

СКАЧАТЬ ПРЕЗЕНТАЦИЮ

Посмотреть презентацию

Приглашаю вас посетить двенадцатую ежегодную конференцию Microsoft: Платформа 2011. В этом году конференция проходит 17-18 ноября в Центре международной торговли (Москва, Краснопресненская наб, 12). На конференции будет представлен мой доклад: SQL Server 2008 R2 для многопроцессорных систем в задачах построения хранилищ.

Read the rest of this entry »

Вашему вниманию предлагается обзор современных возможностей SQL Server 2008 R2 по поддержке многопроцессорных серверных архитектур. Статья относится только к платформе Windows и затрагивает только те архитектурные особенности многопроцессорных систем, которые показались автору значимыми при развёртывании приложений баз данных SQL Server.
Статья адресована опытным администраторам баз данных SQL Server, знакомым с архитектурой SQLOS и современными платформами Intel и AMD.

Оглавление

Введение
Традиционная архитектура NUMA
Особенности NUMA-like архитектур
Поддержка NUMA в операционной системе
Windows 2008 и NUMA
Windows 2008 R2 и NUMA
NUMA I/O
Hard-NUMA
SQLOS и NUMA
Soft-NUMA
Soft-NUMA для Non-NUMA
NUMA для большого числа процессоров
Привязка портов сетевых интерфейсов к процессорам
Максимальный уровень параллелизма
Выводы
Read the rest of this entry »

Сегодня получили широкое распространение многоядерные системы. Персональные компьютеры с четырьмя ядрами уже не редкость. Т.о. счастливые обладатели подобных многоядерных систем могут на практическом примере апробировать Soft-NUMA и как можно привязать к Soft-NUMA узлу порт сетевого протокола TCP/IP.
Для этого будем использовать компьютер х86 с четырьмя логическими процессорами. Процессоры в системе нумеруются с нуля до трёх. Воспользовавшись программой SQL Server Management Studio, в свойствах сервера, на закладке Processors, отключается привязка к первому процессору (CPU0) для обоих типов привязки: Affinity и I/O Affinity. Это делается для того, чтобы оставить один процессор операционной системе для привязки к нему других приложений (неравён час, прожорливость SQL Server помешает вам насладиться представленным тут примером). Как вы наверняка знаете, другие процессы можно привязывать к процессорам с помощью Диспетчера Задач Windows. Таким образом, можно снизить влияние на тестируемые процессоры нагрузки от активного во время тестирования программного окружения. Для двух следующих процессоров (CPU1 и CPU2) отменим I/O Affinity, оставив для них только привязку Affinity. Это необходимо, чтобы не совмещать обслуживание процессорами системных дисковых операций с обслуживанием сетевых запросов. И последний процессор (CPU3) мы наоборот замаскируем для Affinity и оставим ему привязку только для I/O Affinity. Этому процессору будет отведена роль обслуживания системного процесса отложенной записи. Нет особых причин, которые меня побудили включить эту настройку в систему, просто хотелось, чтобы вы пощупали и этот параметр глобальной конфигурации сервера.

Read the rest of this entry »

По состоянию на 2009 год

Эта статья – вольная интерпретация рекомендаций: Microsoft, IBM, HP, Dell, QLogic, LSI, EMC, ACER, Bull, Fujitsu, Hitachi, NEC и Unisys. Некоторые рекомендуемые настройки требуют отдельного, обстоятельного разговора, и потому не включены в эту статью, а найти эти рекомендации можно в моём блоге.

Read the rest of this entry »