Серверные операционные системы

advertisement
Серверные операционные системы.
Преподаватель: Пучкова Д.М.
План:
1.
2.
3.
4.
Основные определения.
Три подхода организации операционной системы.
Дизайн операционной системы.
Cheetah: быстрый HTTP-сервер.
П.1. Основные определения.
Сервер – модуль, который постоянно ожидает прихода от сети запросов от клиентов и,
приняв запрос, пытается его выполнить, возможно, с участием локальной ОС; один сервер
может выполнять запросы сразу нескольких клиентов. Сервер и рабочая станция могут
иметь одинаковую аппаратную конфигурацию, так как различаются лишь по участию в
своей работе человека. Некоторые сервисные задачи могут выполняться на рабочей станции
параллельно с работой пользователя. Такую рабочую станцию условно называют
невыделенным сервером.
Специализация серверного оборудования идет несколькими путями, выбор того, в каком
направлении идти, каждый производитель определяет для себя сам. Большинство
специализаций удорожают оборудование.
Серверные операционные системы являются множествами абстракций и приложениями,
поддерживающими специализированные серверные приложения. В данной лекции мы
рассмотрим прототипы серверных операционных систем с поддержкой прямой
специализации, прямого доступа от устройства к устройству, организация событий и
динамически компилируемые ILP (Integrated Layer Processing).
Хорошая серверная операционная система должна обеспечивать:
- инструменты и программный пакет по умолчанию серверных абстракций или приложений
(например, сетевой протокол, база данных и т.д.) для поддержки модульной конструкции
серверных приложений;
- возможность замены или отказа от программного пакета по умолчанию, основанную на
характеристиках, специфичных для конкретного приложения;
- установления области действия приложений (включая узкоспециализированные сервера и
обычные приложения) таким образом, чтобы повысить эффективность работы системы.
В идеале, операционная система должна быть прозрачна для легкой модульной
конструкции серверов (например, HTTP, FTP, NFS и т.д.), которые обеспечивают работу
оборудования (в частности, сетевого или дисков), не требуя привязки к конкретной машине.
К несчастью, статус кво далек от идеала.
П.2. Три подхода организации операционной системы.
В настоящее время существует три подхода к организации работы сервера. Первым
подходом является размещение сервера во главе операционной системы. Этот подход может
упростить конструкцию серверных приложений, однако серьезно осложняет их работу,
вынуждая использовать чрезмерно общие абстракции операционной системы. Эти
абстракции зачастую обеспечивают напорядок более низкую работоспособность
простейших операциях), нежели может быть предоставленную оборудованием. Далее,
абстракции являются программами высокого уровня и предотвращают сервер
использования информации, свойственной доменам. Согласно данному подходу,
достижения высокой производительности необходимо очень мощное оборудование.
(на
эти
от
для
Вторым подходом является изобретение операционной системы, специально разработанной
для конфигурации односерверной системы. С этой точки зрения, операционная система
специально разрабатывается под отдельный сервер, увеличивая внедряемую часть. Более
того, так как такой подход не мультиплексирует ресурсы различных серверов, он требует,
чтобы каждый сервер устанавливался на отдельной машине, несмотря на то, что серверы
работают в импульсном режиме, и их сигналы могли бы быть мультиплексированы. Таким
образом, второй метод так же требует много затрат и плохо утилизирует ресурсы, что также
отражается на производительности системы.
Третьим методом была бы оптимизация системы таким образом, чтобы одновременно были
бы достигнуты и специализация и поведение системы модульной конструкции и
внутрипрограммная защита операционной системы обычного типа.
Идеальная операционная системы включает в себя:
- программный пакет по умолчанию различных абстракций, полезных для создания
серверных приложений, внедренных таким образом, что они могут быть параметризованы и
комбинированы специализированными прикладными методами.
- поддержку прямого, защищенного доступа к оборудованию, позволяющего серверному
приложению полностью заменить любую из установленных по умолчанию абстракций в
случае, если ни одна из них не соответствует задаче этого приложения.
- поддержку прямого доступа дисковой системы к сетевому модулю (и наоборот),
происходящая без задержек, доступ к файловой системе и сетевым ресурсам и резервным
копиям баз данных.
- поддержку организации событий серверных приложений, позволяющую избегать
управления нитями и проблем контроля параллелизма, непременно возникающих в задачах
с нитями.
- компилируемую, динамически интегрируемую обработку данных по слоям или циклам
(ILP) для улучшения работы сетевых приложений.
Далее обсуждение темы будет происходить следующим образом. Во-первых, мы покажем,
что операционная система серверного типа является лучшим путем обеспечения высокой
производительности серверных приложений. Во-вторых, идентифицируем техники дизайна
для серверных операционных систем и обсудим, каким образом их можно применить к
модульной структуре. В третьих, опишем образец серверной операционной системы и его
использование для разработки HTTP сервера высокой производительности. Измерения
данного сервера показывают, что он способен поддержать высокий уровень клиентской
активности и в то же время не жертвуя внутрипрограммной защитой.
П.3. Дизайн операционной системы.
Многими авторами-разработчиками операционных систем было показано, что
специализированные абстракции и их внедрение в приложения способны существенно
увеличить производительность системы. Поскольку производительность является
критическим фактором для серверных приложений, современные операционные системы
ориентированны именно на специализацию. Более того, вследствие того, что за основу
часто взята расширяемая ОС, многочисленные приложения могут успешно сосуществовать
в системе, даже если некоторые из них управляются иным образом.
Для уменьшения доли программного обеспечения, операционная система-образец
обеспечивает многообразие абстракций, совместных с серверными приложениями высокой
производительности, включая файловую систему, распределенную по дискам, дисковую
кэш-память, допускающую политики замещения и удаления данных, а также внедрение
сетевого протокола (TCP/IP), позволяющее специализированный контроль сообщений. Для
поддержки произвольной специализации, операционная система-образец также позволяет
серверным приложениям использовать свой собственный менеджер ресурсов абстракций
вместо приложений, используемых по умолчанию.
Прямой доступ к оборудованию.
Основной задачей большинства серверов является передача данных от подсистемы,
хранящей данные, в сеть (и наоборот). Таким образом, критично, что такой поток данных
будет как можно более направленный. В теории, необходимо уменьшить влияние
программного обеспечения таким образом, что этот поток ограничен только пропускной
возможностью более медленного устройства.
Операционная
серверная
система-образец
позволяет
серверным
приложениям
беспрепятственно интегрировать потоки данных, полученных от оборудования. Например,
одной весьма полезной абстракцией является сочетание дисковой и сетевой кэш-памяти,
позволяющее дубликацию и копирование данных. Более того, более эффективной стала
передача данных с устройства на устройство, позволяя посредством программ обработки
прерываний, написанных под сетевые приложения, инициализировать активность дисковой
системы (и наоборот). К примеру, программа обработки прерываний для ввода/вывода
устройства позволяет инициировать передачу сетевого сигнала сразу же после того, как
завершится чтение данных с диска.
Организация событий.
По своей природе, серверные приложения реактивные и, в первую очередь, отвечают на
запросы клиентов и только потом реализуют собственную последовательность действий.
Каждый клиентский запрос изначально включает в себя несколько последовательных
событий ввода/вывода (например, прибытие сетевого пакета, завершение запроса к диску и
т.д.) с небольшим объемом вычислений (относительно времени задержки сигналов
ввода/вывода). Для приемлемой работы необходимо обслуживать многочисленные
клиентские запросы в реальном времени для того, чтобы использовать параллелизм
системы ввода/вывода. Многие серверные приложения используют отдельную нить или
процесс на каждый запрос и согласованную блокировку ввода/вывода для этой реализации.
К сожалению, такой подход способен существенно увеличить сложность и снизить
продуктивность работы вследствие создания/разрушения нитей, переключения между
процессами, запросов к данным и блокировки.
Другим подходом является использование неблокирующего устройства ввода/вывода и
обычной абстракцией с применением циклических событий (обеспеченной серверной
операционной системой) таким образом, что серверное приложение может просто состоять
из набора программ обработки, которые реагируют на внешние запросы посредством
инициализации дополнительных событий ввода/вывода (например, дисковых запросов или
сетевых обработок). При помощи такой организации событий, серверное приложение
способно поддержать тот же самый уровень параллелизма, но без проблем, описанных
выше. Оперативная система-образец поддерживает неблокируемую версию файловой
системы и абстракции сетевых протоколов для поддержки программной обработки
событий.
Для того, чтобы сделать такую организацию событий более эффективной, система-образец
позволяет активным серверным приложениям создавать и устанавливать модульные коды
(называемые ASH – application-specific safe handlers), исполняемые сразу же во время
возникновения соответствующего прерывания. Таким образом, например, когда прибывает
очередной пакет, возникает прерывание (в дополнении к коду ядра, обрабатывающему
прерывание). Такая программа-обработчик способна обновлять состояние сервера
приложений или инициализировать сетевые и дисковые запросы, как указано выше. Если
это необходимо, серверу приложений посылается сигнал о прерывании. Несмотря на то, что
ASH усложняют работу системы вследствие внедрения дополнительных нитей контроля
(требующих некоторой блокировки), они позволяют обрабатывать простые события с
минимальными затратами, увеличивая производительность системы.
Динамические, компилируемые ILP.
Одной важной, хорошо известной технологией для улучшения работы сетевого
оборудования является интегрированный послойный анализ (ILP), в котором
многочисленные действия протоколов (например, контроль суммы и байтовый обмен)
выражаются функцией с минимальными потерями, обеспечивающей хорошую
проходимость каналов. В частности, комбинируя действия протокола одной функцией, ILP
способен уменьшить влияние поведения системной памяти на работу сети.
К несчастью, достижение оптимального ILP является нетривиальной задачей, которую
необходимо переадресовывать каждый раз, когда изменяется последовательность действий
в протоколе. Таким образом, так как высокоэффективное сетевое программное обеспечение
необходимо для многих серверных приложений, система-образец поддерживает компилятор
для ILP. В частности, программа-приложение должна специфицировать любое действие над
данными и последовательность действий. Компилятор ILP способен автоматически
осуществлять интеграцию, которая, в большинстве случаев способна создавать приложения.
Спецификация протокола в дальнейшем упрощается посредством обеспечения библиотек
общей манипуляции данных необходимыми средствами для действия над протоколами.
Механизм компилируемых ILP также поддерживает динамическую интеграцию. Одним из
примеров использования динамически компилируемого ILP являются Ethernet карточки,
которые используют другие правила передачи данных из буфера и в буфер. Со статическим
ILP, все комбинации различных правил и оставшаяся часть интегрируемого протокола
может быть сконструирована и подлинкована. С динамическим ILP, соответствующая
комбинация может быть сконструирована во время исполнения задачи.
П.4. Cheetah: быстрый HTTP-сервер.
Данный пункт описывает Cheetah, быстрый HTTP-сервер, сконструированный при помощи
описанной операционной системы-образца. Развитие Cheetah происходило в несколько
ступеней, что мы полагаем за основу при составлении узкоспециализированных серверных
приложений. Мы начали рассмотрение с простого, неспециализированного внедрения
(фактически разработанного под ОС Sun), с подлинкованными библиотеками экзоядерной
системы с интерфейсом POSIX. Затем основные компоненты (TCP/IP и файловая система)
были заменены на компоненты серверной операционной системы. В конечном итоге, были
добавлены специализации, прогрессивно улучшающие поведение Cheetah. Несмотря на то,
что Cheetah не применяет ILP или ASH, эксперимент показывает, что данный сервер имеет
преимущества над популярными HTTP-серверами.
Обзор.
Большинство внедрений Cheetah состоит в конфигурации и совместного использования
TCP/IP и системных библиотек файлов, обеспеченных серверной операционной системой.
Каждый текущий HTTP запрос представлен своей структурой данных, которая включает в
себя статус запроса, контрольный блок протокола TCP (PCB), заголовок TCP/IP и
различные состояния запроса. Cheetah выполняет одиночную нить контроля, которая после
инициализации повторяет бесконечный цикл опроса сетевых и дисковых событий
(посредством вызова соответствующих функций библиотек) и обслуживания их
(посредством специальных функций HTTP, таких как парсировка запросов и
неблокирующие функции библиотек). Когда обрабатываемый HTTP запрос достигает
точки, что он должен ждать некоторого внешнего сигнала, его критическое состояние
сохраняется в структуре запроса, возвращая контроль основному циклу событий.
Специализация TCP/IP.
Хотя внедрение библиотеки TCP/IP поддерживает короткоживущие соединения,
обладающие высокой производительностью (например, посредством минимизации влияния
соединений в состоянии ожидания), и это характеризует HTTP-сервер, Cheetah пытается
ещё больше уменьшить затраты на соединение. К примеру, он сохраняет накопитель
предынициализованных структур HTTP-запросов (включая PCB) для того, чтобы избежать
необходимости перераспределения ресурсов во время выполнения приложения. Кроме того,
Cheetah использует память, содержащую HTTP-сообщение-запрос, когда он прибывает,
избегая перераспределения памяти и копирования данных во многих случаях.
Так как веб-страницы занимают немного памяти, важно уменьшить количество сетевых
пакетов для ответа на HTTP-запрос. В частности, предварительное внедрение будет
посылать в отдельных пакетах заголовок HTTP, данные запроса и флаг FIN. Cheetah
использует рассеивающе-собирающую библиотеку TCP/IP со спецификацией FIN для
разбиения этой информации по минимально возможному числу пакетов (максимальный
сегмент памяти, выделенный под эти пакеты, обсуждается между клиентом и сервером).
Cheetah также использует рассчитанные суммы TCP/IP при посылании содержания вебстраницы. Эти контрольные суммы сохраняются на диске в соответствующем файле и
рассчитываются системой только, когда файл модифицируется. Так как с большинством веб
страниц, как правило, устанавливается соединение без их модификации, этот подход
убирает вычисление контрольной суммы из критической области.
Специализация файловой системы.
Так же как с ранее рассчитанными контрольными суммами, Cheetah также рассчитывает
заголовок отклика каждого файла и хранит его вместе с файлом. За исключением даты,
которая отдельно вычисляется и приписывается Cheetah в последний момент, ни один из
заголовков GET или HEAD запроса HTTP не изменяется, пока не модифицируется файл.
Для запросов GET, модифицированных IF-MODIFIED-SINCE MIME заголовком,
изменяется только значение возвращаемого кода и кусок сообщения, если условие false.
Расчет отклика уменьшает затраты, избегая емкие обращения времени и сравнение строк
(для определения MIME-типов). Он также позволяет предварительно
контрольную сумму заголовка HTTP.
рассчитать
Гипертекстовые ссылки HTML страниц могут быть использованы во время использования
диска и обращения к кэш-памяти для улучшения производительности. Улучшение
производительности может быть достигнуто, поскольку большинство браузеров
моментально выделяют память под изображения, когда они подгружают веб-страницу в
память и читают их как один модуль.
Литература.
1. M. Frans Kaashoek, Dawson R. Engler, Gregory R. Ganger, and Deborah A. Wallach,
Server Operating Systems, M.I.T. Laboratory for Computer Science, 1996.
2. Серверная операционная система и комплект серверных приложений для
общеобразовательных учреждений на базе свободного программного обеспечения
«ВС Школьный Сервер» Руководство администратора, 2008.
3. www.wikipedia.com
Download