Оглавление    

16. Адаптивное квотирование


Что такое «отсек»?

Для решения этой задачи некоторые системы строят вокруг приложений виртуальные стены, называемые отсеками (
partitions), гарантирующими, что каждый отсек будет располагать строго определенным набором ресурсов. Под ресурсами в первую очередь понимается время ЦПУ, но к ним могут также относятся любые разделяемые ресурсы, такие как ОЗУ или дисковое пространство.




Рис. 16.1. Статические отсеки (partitions) гарантируют, что процессы получат те ресурсы, которые заданы разработчиком системы.


Как правило, основной задачей квотирования систем является разбиения компьютера на группу меньших компьютеров, которые взаимодействуют как можно меньше; однако такой подход весьма не гибок. Более гибкий подход предоставляет адаптивное квотирование.

Отсеки QNX Neutrino являются адаптивными:

конфигурации могут быть изменены во время функционирования;

как правлило, назначаются единовременно при начальном конфигурировании системы;

поведение отсека автоматически адаптируется к условиям исполнения. Например:

- свободное время распределяется между остальными отсеками диспетчеризации;

- файловые системы могут «выставлять счета» клиентам с помощью механизма временного перемещения потоков между отсеками.


В результате адаптивные отсеки менее ограниченные и более мощные. В дополнение к адаптивности отсеки позволяют достаточно просто моделировать принципиально различное использование процессорного времени, которое рассматривается как некоторый ресурс. Способ разделения отсеков позволяет так же тонко настраивать каждую из них.
Если адаптивные отсеки не являются виртуальными компьютерами, то что они такое?
Адаптивный отсек — это именованный набор правил. Эти правила выработаны для управления поведением глобальных ресурсов в системе. Как только процесс или поток сопоставляются с конкретным отсеком, с этого момента его действия подчиняются правилам этого отсека.

Например, адаптивное квотирование напоминает людей, принадлежащих к разным клубам. Каждый человек может вступить в несколько разных клубов. Они могут даже время от времени переходить из одного клуба в другой. Но когда они находятся в определенном клубе, они соглашаются соблюдать правила данного конкретного клуба.

Квоты отсеков обеспечивают:

защиту памяти — каждый отсек является отдельным и контролируется MMU (Memory Management Unit – модуль управления памятью);

защиту от перегрузки — каждый отсек имеет гарантированную квоту времени исполнения, назначенную разработчиком системы.

Использование нескольких отсеков позволяет исключить наличие единой точки сбоя. Например, «зациклившийся» процесс не сможет расходовать все системные ресурсы; процессы в других отсеках будут по-прежнему получать предназначенные для них разделяемые ресурсы.

В настоящее время модель процессов QNX Neutrino обеспечивает значительно большую защиту, чем многие операционные системы, включающую:

полную защиту памяти между процессами;

передачу сообщений для единого и управляемого IPC;

наследование приоритетов на основе четкой клиент-серверной модели;

детерминированную диспетчеризацию жесткого реального времени;

детализированную модель прав доступа для устройств, файлов и памяти;

лимиты памяти, файловых дескрипторов, ЦПУ и приоритетов, задаваемых для ограничения «зациклившихся» процессов с помощью POSIX-функции setrlimit().

Почему адаптивное?
Для обеспечения выполнения реального времени с гарантией от перегрузок, в QNX Neutrino применено адаптивное квотирование. Жесткое квотирование работает намного лучше в статичных системах с небольшим или не динамичным размещением программного обеспечения. В динамических системах, статичное квотирование неэффективно. Например, статичное деление времени выполнения между сегментами может расходовать процессорное время и вводить задержку:

Это может стать причиной нежелательное задержки, особенно, если приходит серия прерываний.

Примечание. Адаптивное квотирование можно установить без каких-либо изменений – или любых перекомпиляций – необходимо использовать свой программный код, даже при переустановке образа ОС.

Адаптивное квотирование задает обработку потоков – стандартную или в зависимости от назначения или деятельности. Как и статическое квотирование, адаптивное квотирование имеет выделенный запас (бюджет), который гарантирует минимальный ресурс процессора. В отличие от статического квотирования, адаптивное разделение:
Примечание. Существует лимит на количество отсеков. Для планировщика потока – максимум восемь планировщиков квотирования, т. к. для каждой операции квотирования, планировщик потока должен проверять каждое квотирование перед выбором потока, который будет запущен. Это происходит 50000 раз в секунду на 700 MHz x86 (т. е. это медленно-работающий компьютер).

Важно ограничить количество планировщиков квотирования до минимума.
Польза адаптивного квотирования
При проектировании, разработке, выполнении и отладке систем адаптивное квотирование предоставляет следующие полезные возможности:

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

Конструирование производительности продукта
Отсеки так делят ресурсы, что некоторый набор программ может использовать часть ресурсов в соответствии с выделенной ему квотой. Отсек представляет собой часть ресурса и включает в себя несколько правил, которые определяют использование этого ресурса. Ресурсы включают такие базовые объекты как циклы процессора, хранилище программы или такие высокоуровневые объекты как буферы, таблицы страниц или файловые дескрипторы.

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

С точки зрения диспетчеризации потоков эта особенность позволяет разработчикам запускать серверные процессы с нулевым (или минималистичным) бюджетом. Когда сервер выполняет обработку клиентских запросов используемое им время «оплачивается» из бюджета клиентского отсека. Если бы такой особенности не было, то для сервера пришлось бы задавать некоторый бюджет безотносительно того, насколько часто этот сервер используется. Данная особенность предоставляет следующие возможности:

Нет необходимости закладывать дополнительную избыточность ресурсов при проектировании системы, что существенно снижает ее стоимость.

При включении в состав системы дополнительных компонентов нет необходимости пересматривать бюджеты таких обычных сервисов как файловые системы или серверов.

Система функционирует быстрее и лучше реагирует на пользовательские запросы.

Система гарантирует выделение времени для важных задач.

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

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

Сюда можно добавить ведение разработки продукта командой, члены которой находятся в различных географических регионах и часовых поясах. Тем не менее, после того как все эти разрозненные подсистемы будут интегрированы в общую среду исполнения все части полученной системы должны обеспечивать адекватную реакцию при всех сценариях функционирования, таких как:

обычная загрузка системы;

периоды пиковой нагрузки;

функционирование в условиях сбоев.

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

Такого рода трудности могут потребовать недели и более на идентификацию проблемы и несколько недель на корректировку приоритетов во всей системе и повторное тестирование. Если эти проблемы не будут эффективно решены, то масштабируемость продукта будет ограниченной.

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

Адаптивное квотирование использует диспетчер потоков, который позволяет архитекторам резервировать ресурсы как для чрезвычайных целей (например, система аварийного восстановления), так и для диагностических целей, а также для остальных подсистем, позволяя группам разработчиков в пределах выделенного им бюджета использовать собственные схемы приоритетов и оптимизации. Такой подход позволяет группам разработчиков независимо друг от друга разрабатывать подсистемы и легко их интегрировать. Эффект проявляется в сокращении времени вывода продукта на рынок и улучшении масштабируемости продукта.
Обеспечение безопасности
Многие системы уязвимы к DoS-атакам (Denial of Service — отказ сервиса). Например, злонамеренные пользователи могут «бомбардировать» систему запросами, обрабатываемыми некоторым процессом. При этом процесс может занять все ресурсы ЦПУ и сделать невозможным функционирование остальных компонентов системы.




Рис. 16.2. Без адаптивного квотирования DoS-атака может заблокировать выполнение других важных функций.


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

Время обнаружения проблемы достаточно велико.

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

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


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



Рис. 16.3. Квотирование позволяет избежать влияния DoS-атак на всю систему.

Применение квотирования позволяет изолировать DoS-атаку в пределах отсека. Поскольку адаптивное квотирование может выделять неиспользуемое время ЦПУ тем отсекам, которым оно требуется, отпадает необходимость отслеживать, насколько законным является увеличение затрат ресурсов для того или иного процесса.
Отладка
Адаптивное квотирование позволяет упростить отладку встроенной системы — как на этапе разработки, так и на этапе развертывания — с помощью предоставления “аварийного выхода” в данной системе.

Для этого просто создается отсек для инструментов диагностики; в случае, если эти инструменты не используется, планировщик распределяет его бюджет между остальными отсеками. Это позволяет разработчику получить доступ к средствам диагностики без ущерба для производительности. Для получения дополнительной информации см. в электронном документе «QNX Neutrino Adaptive Partitioning. User’s Guide. Testing and Debugging».
Адаптивный диспетчер
Адаптивный диспетчер является опциональным диспетчером потоков, который позволяет гарантировать выделение минимальных квот ЦПУ в процентах процессорного времени, предоставляемых группам потоков, процессов или приложений.

Назначаемая отсеку квота ЦПУ называется бюджетом.

Адаптивный диспетчер спроектирован поверх базовой архитектуры QNX Neutrino в первую очередь для решения следующих сложностей в разработке встраиваемых систем:

гарантирование минимальной квоты процессорного времени при повышенной загрузке системы;

недопущение монополизации ресурсов системы маловажными или недоверенными приложениями.


Для получения более подробной информации см. электронный документ «
QNX Neutrino Adaptive Partitioning. User’s Guide».


     Оглавление