17.1.23

Знакомьтесь - SQLOS

По материалам статьи Slava Oks: SQLOS - unleashed


Если Вы изучали SQL Server 2005 Beta 1 и Beta 2 Вы могли заметить, что в каталоге bin больше нет файла ums.dll. Причина этого проста, его больше не существует. В SQL Server 2000 библиотека ums.dll обеспечивала работу SQL Server в непривилегированным режиме и неприоритетное планирование ресурсов (non-preemptive scheduling). Так что же произошло с ней в новой версии? Теперь больше не используется неприоритетное планирование? Ответом на это будет - "Нет", SQL Server 2005 по-прежнему использует такое планирование ресурсов и, как показывают многие исследования в области реляционных баз данных, для повышения производительности и обеспечения требований масштабирования, нужно и дальше развивать возможности использования неприоритетного планирования.

Примечание переводчика: В SQL Server реализована кооперативная, неприоритетная модель потоков, согласно которой они обслуживаются периодически, а также могут ожидать снятия блокировок или очереди ввода-вывода. Кооперативная многозадачность подразумевает, что каждая программа должна сама предоставлять другим программам возможность использования процессора, для чего она отслеживает в своём коде циклы передачи управления другим, активным программам. Эта модель была присуща 16-ти битным версиям Windows, современные операционные системы используют модель приоритетной многозадачности. Видимо поэтому автор в своих статьях называет используемую SQLOS модель - неприоритетной.

В SQL Server 2005 разработчики сохранили модель неприоритетного планирования, создав новую библиотеку компонент SQLOS, которую иногда называют SOS. SQLOS - это операционная система непривилегированного режима, в которой реализованы механизмы планирования приоритетов, управления памятью, контроля ресурсов, обработки исключений, обслуживания ввода-вывода, обеспечение синхронизации и функций хостинга. Имейте в виду, что для SQL Server возможности SQLOS не представляют собой ещё один уровень абстракции операционной системы, и она не подменяет ни одного из интерфейсов Windows API, ни в целях повышения мобильности ни по другим причинам. Наоборот, она служит для связи SQL Server с Windows, опираясь на возможности масштабирования и обеспечения высокой производительности операционной системы.
Целью SQLOS является организация взаимодействия со всеми необходимыми системными компонентами, поддержка новшеств SQL Server в масштабируемости и повышения производительности, а также нововведений, относящихся к управляемости сервера баз данных и к его поддержке. Она предоставляет разработчикам интерфейсы, с помощью которых можно легко задействовать возможности операционной системы и аппаратных средств. Внутренняя организация SQLOS устроена таким образом, чтобы упростить процесс разработки для платформ начального и высшего уровня.
Подсистема планирования SOS включает в себя такие компоненты, как узлы планирования, планировщики, задачи, обработчики и системные потоки. Узел планирования представляет собой уровень абстракции для процессорных групп. В поддерживающих NUMA - архитектуру системах, такой узел будет представлять один из NUMA узлов. Для SMP систем узел планирования - это один процессор.

Примечание переводчика: NUMA - архитектура (non-uniform memory access) применяется для платформы Intel и отличается от широко распространенной SMP - архитектуры многопроцессорных серверов тем, что процессоры разбиваются на группы по два или четыре процессора, и каждой такой группе - узлу предоставляется своя выделенная область памяти, доступ к которой для группы будет быстрым, в отличие от остальной памяти, доступ к которой будет медленнее. Каждый узел имеет свою шину, которая соединяет его процессоры с платформой через специализированный контроллер, обеспечивающий при необходимости когерентность кэшей узлов и переключение задач между узлами. Появление этой платформы обусловлено тем, что платформа Intel не поддерживала более 4-х процессоров, а также тем, что необходимо было решение для повышения пропускной способности системной шины, которая становиться "узким местом" в симметричных многопроцессорных системах.

Редактируя системный реестр Windows можно изменить число узлов. Программное обеспечение, умеющее это делать, разработчики называют поддерживающими NUMA - архитектуру программами. Как Вы могли догадаться, каждый такой узел представляет собой несколько планировщиков. Планировщик - это абстракция процессора. Планировщики имеют дело с задачами/процессами (tasks), которые исполняются т.н. обработчиками, которые в свою очередь оперируют системными потоками и нитями.

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

Описанию планирования SQLOS можно посвятить очень много времени, так что автор вернётся к более глубокому описанию этой темы в следующих статьях.
Механизм управления памятью SQLOS состоит из узлов памяти, клерков памяти, кэшей, пулов и объектов памяти. Узел памяти - это некая абстракция, связывающая память с узлом планирования. Узел планирования - это собственное подмножество узла памяти. Разделение понятий планирования и узлов памяти предоставляет возможность моделирования различных аппаратных конфигураций. Каждый из компонент взаимодействует со своим клерком памяти, что позволяет распределять большие блоки памяти. Для распределения памяти, клерки используют объекты памяти, хип (динамическую память). В процессе работы SQL Server создает несколько разных клерков и объектов памяти. Контролировать их вызовы можно с помощью имеющихся у SQL Server специализированных для задач диагностики и управления представлений: Dynamic Management Views (DMV). В дополнение к узлам, клеркам и объектам памяти, SQLOS использует уникальные механизмы структур кэширования и пулинга. Вся подсистема памяти стоит того, что бы ей посвятить несколько статей, и автор обещает в скором будущем предоставить их на суд читателей.
Для обеспечения контроля и адекватного распределения ресурсов, SQLOS организует несколько потоков. Кроме этого SOS предоставляет интерфейсы хостинга (Hosting API). Эти интерфейсы значительно упрощают интеграцию SQL Server и CLR. CLR взаимодействует с этими Hosting API при обращении к операционной системе, включая пулинг потоков и управление памятью.
Существует очень много информации об SQLOS, которую стоит знать. По каждому из подобных аспектов можно написать целую книгу. В следующих статьях автор собирается приступить к подробному описанию менеджера памяти SQLOS. В связи с этим, если Вы не читали его предыдущие статьи об управлении памятью в Windows, он рекомендует предварительно ознакомиться с ними, что бы Вы были подготовлены к той информации, которая будет излагаться в следующих статьях. Также, автор приглашает задавать ему любые возникшие в ходе прочтения этой статьи вопросы, и присылать ему ваши комментарии.

Комментариев нет:

Отправить комментарий