Постановка Задачи
Целью работы является решение практической задачи с выходом на создание лабораторного практикума по направлению разработки приложений на систему распределенных вычислений на BOINC.
Техническое задание.
Была поставлена цель, запустить виртуальный BOINC сервер для департамента компьютерной инженерии , запустить на нем сначала тестовые задачи а далее запустить задачу Апробация параллельной версии метода исчерпывающего поиска (pScaNoC) для синтеза квазиоптимальных топологий сетей на кристалле используя встроенные решения имеющиеся у системы.
Обзор предметной области.
Выбор в качестве основной системы BOINC сервер был не случаен, так как система представляет собой комплекс для разработки.
Архитектура системы BOINC
Для максимальной эффективности «volunteer computing» достигается, когда для решения отдельных небольших подзадач необходимо, чтобы задачи были практически не связаны между собой и результаты других параллельно выполняемых заданий не зависели между собой. Иначе очень большие затраты производительности будут приходиться на ожидание синхронизации и решения из других процессов. Идеальной задачей можно считать, к примеру, прямой подбор пароля методом “brute force” –он заключается в том, что для каждого вариантов (которых, возможно, сотни, тысячи – в зависимости от количества символов) пароля отдельный компьютер вычисляет хэш и сравнивает его с исходным. При первом совпадении задача считается решенной. Другие результаты не влияют на нахождение правильного ответа, только лишь отметают неверные варианты, подзадачи не зависят друг от друга (из-за свойств хэш-функций паролей). Для такого рода задач, подзадачи которых независимы, и разработали архитектуру системы BOINC(см. рисунок 1).
Рисунок 1. Архитектура системы BOINC
В качестве основы архитектуры BOINC использована идея конечного автомата – сервер состоит из набора отдельных подсистем; каждая из подсистем отвечает за свою определенную задачу, к примеру, арифметику, передачу данных и т.д. Каждая из подсистем работая в бесконечном цикле проверяя состояние подзадачи, производя какие-то действия и изменяя состояние подзадачи.
В основном, система состоит из сервера BOINC (есть возможность распределения на несколько физических серверов),
групп клиентов, вычисляющих задачи сервера и нескольких дополнительных компонентов, представляющих собой присоединенные GRID-сети, к примеру, инструментарий Globus Toolkit.
Globus Toolkit
Это набор инструментов для создания вычислительных Grid-сетей предоставленный в общем доступе(Open Source). В его составе набор сервисных программ и библиотек которые, ведут учет ресурсов, обнаруживают и управляют вычислительными узлами, обеспечивают безопасность и управление файлами. Разработкой и поддержкой занимается организация Globus Аlliаnce.
Сервер BOINC состоит из следующих частей:
Web-сервер (один или несколько), обрабатывающий входные и выходные сообщения;
сервер баз данных, хранящий данные клиентов о набранных ими баллах, а также отслеживает состояние всех выполненных задач и результаты к ним;
пять различных демонов, проверяющие с заданным интервалом состояние базы данных и выполняющие необходимые работы по распределению подзадач и обслуживанию системы.
Далее более подробно рассмотрим компоненты, составляющие сервер BOINC.
1. Web-сервер
Web-сервер является второстепенным звеном структуры сервера BOINC. Причиной наличия сервера является сама сущность «volunteer computing» – необходимость привлечения внимания участников к проектам. С этой целью создан сайт, рассказывающий насколько важную задачу для всего человечества решаете вы. Значит и те кто присоединился к вам, добровольцы – выполняют: ищут внеземные цивилизации (SETI@HOME), разрабатывают новые лекарственные препараты (Docking@Home), предсказывают погоду (ClimаtePrediction.net) или же решение сложных математических задач... Рассказав о своем проекте, вы сможете привлечь добровольцев, потенциальные вычислительные мощности. Все проекты по распределенным вычислениям на базе BOINC дают своим участникам возможность объединения в команды, и следить за изменениями набранных ими баллов...
В этом случае, Web-сервер может быть перенесен на другой физический сервер. Для актуальности данных статистики, необходима связь с базой данных сервера BOINC.
1.1. База данных
Демон
Демоном называют компьютерную программу, работающую в фоновом режиме не нуждающуюся в взаимодействиях с пользователями, термин используется в UNIX-подобных системах. Чаще всего, в виде демонов реализуются серверные программы, к примеру, sftp-сервер, почтовый-сервер и т.д.
База данных – это основная часть всего проекта BOINC,
В базе данных расположено:
все данные, которые относятся к BOINC серверу;
данные и версии приложений;
данные приложений-клиентов BOINC включая их версии;
сведения зарегистрированных участниках и связанных с ними хостами;
данные подзадач c результатами их вычислений.
С информацией взаимодействуют специальные служебные демоны. Система BOINC первоначально разработана для работы с СУБД MySQL, развитие этой идеи привело к нынешней системе.
Необходимо учесть, что вся нагрузка, связанна с активной передачей данных внутри проекта BOINC, вся она приходится на базу данных, и как правило, является тем самым «узким местом» производительности сервера.
1.2. Служба обработки состояния подзадач (Trаnsitioner)
Эта служба является обработчиком статуса вычисляемых подзадач и результатов их решения. Служба не зависима от приложений и едина для всех проектов, таких как поиск решения математической задачи или предсказание погоды. Задачей службы обработки является проверка текущего статуса подзадачи в базе данных и обновление соответствующих полей, в момент готовности подзадачи, переход в новый статус. Основной сложностью является то, что подзадачи имеют множество различных статусов. Эти статусы содержат в себе состоянии результатов вычислений. К примеру, результаты готовые к проверке, и данных хватает для осуществления проверки кворумом, то статус подзадачи изменяется на “готова к проверке”. Служба обработки дает высокую нагрузку на процессоры, в связи с этим ее можно разделить на несколько демонов, все отвечают за определенную подзадачу или несколько подзадач. Исходя из этого, демоны могут функционировать не только на одном физическом сервере, их можно разделить на несколько.
1.3. Служба проверки результатов (Vаlidаtor)
Grid, Грид
Грид является набором вычислительных узлов, соединенных для вычисления общей ресурсоемкой задачи. Вычисления на базе grid используются для проведения астрономических исследований, для создания новых материалов или жидкостей и т.д.
Создание Grid –задача нетривиальная, в частности, требующая решения проблем по взаимодействию, управлению и обнаружению вычислительных узлов.
Задачей службы является организация проверки входящих результатов. В целях обеспечения верности решения каждая из подзадач решается на нескольких различных машинах-клиентах. Получив результат, его нужно проверить, сверив между собой полученные от других машин-клиентов результаты и определив «конечное» решение – результат, получается кворумом клиентов. Для каждого типа задачи необходим свой алгоритм проверки. Реализацией алгоритма проверки является служба. Помимо того, программа проверки следит за правдоподобностью результатов. К примеру, при моделировании физических процессов, есть возможность проверки, не является ли конечный результат ниже или выше предельного возможного значения. Если результат выходит за рамки то он отбрасывается, как заведомо ложный. Таким образом, можно отследить ошибки в результатах.
При включении служба посылает запрос в базу данных на принятие информации о требующих проверки новых результатах. Далее при нахождении, служба проверки запускает функцию для сравнения полученных результатов. Для всех глобальных задач, решаемых системой BOINC, необходимо создать две функции находящихся в службе проверки: первая функция сравнивает два результата, так же используется для начисления очков, когда приложение клиент передал новый результат и найдено верное решение. Вторая, наборы результатов, используется для определения наиболее верного результата из множества результатов, которые передали несколько клиентов. Число результатов, необходимое для принятия эталонного решения, определяется в начале создания подзадачи. Это значение можно задать для всего приложения в целом, а также возможно указать различные значения для разных клиентов.
1.4. Служба освоения (Аssimilаtor)
Задачей службы освоения является периодическая проверка наличия решенных задач. Разработчику проекта необходимо сделать функцию, определяющую необходимые действия с эталонными результатами. К примеру, ответы можно заархивировать и отослать по электронной почте или автоматически запустить дальнейшую обработку данных, выделив интересующие фрагменты и записывая их в документы. Подзадачу пометят как завершенную в случае обработки службой освоения.
1.5. Служба удаления файлов (File deleter)
Служба удаления файлов – это «чистильщик мусора» проекта BOINC, она, проверяя статусы задач, ищет завершенные и освоенные подзадачи, после чего удаляет с сервера связанные с ними входные и выходные данные. Выходные файлы, содержащие эталонный результат, обрабатываются на фазе освоения. Есть возможность удалять только файлы, оставляя, при этом, записи в базах данных, в этом случае всегда будет возможность посмотреть по базе данных и найти необходимую информацию о подзадаче, участниках и т.д. включая случай решения подзадач (и удаления файла).
1.6. Служба подачи (Feeder)
Задачей службы является загрузка еще не решенных данных на сегмент разделяемой памяти, для которых еще не получен эталонный результат и не занесен в базу данных. Такую предварительную работу сервер выполняет с целью повышения производительности системы BOINC в целом путем ограничения количества запросов в базу данных.
1.7. Планировщик (Scheduler)
Планировщик – это CGI-программа, запускаемая в момент, когда к серверу проекта подключается клиент и запрашивает часть задания и входных
данных. Вместо прямого взаимодействия с базой-данных, планировщик получает задания и входные данные из сегмента разделяемой памяти, в который данные загружаются службой подачи. Планировщик может возможность самостоятельно назначить подзадачи клиентам, так как не все машины-клиенты одинаковы, как в настройках, так и аппаратных конфигурациях. К примеру, один клиент может использовать Mac-версию клиента и выделить 126 MБ дискового пространства и 300 MБ оперативной памяти, а другой клиент может запустить только Android-версию и выделить использование не более 16 MБ дискового пространства и 16 MБ оперативной памяти. В этом планировщик решает дать более вычислительно-емкое задание Mac -клиенту, а наиболее простые подзадачи Android -клиенту.
В момент сессии, работая с планировщиком, клиент также отсылает отчет завершении работ, которые уже загрузили на сервер с момента последней сессии планировки. В итоге клиенту передается список с заданиями на обработку и списком адресов, откуда получает нужные файлы, т.е. входящие файлы и файлы приложения, если они отсутствуют на компьютере-клиенте.
1.8. Мост (Bridge)
Задача этой службы, обеспечивать связь и работу над проектом в инфраструктуре BOINC и GRID, к примеру, на базе технологии Globus Toolkit.
Приложения BOINC вызывают функции BOINC через систему интерфейсов, реализованных в клиенте и выполняющих такие специфические работы как, к примеру, передача файлов. Исходя из этого, запуск подзадачи проекта BOINC не может быть напрямую (необходимы дополнительные модификации) расчет в инфраструктуре Grid. Помимо этого, Grid не способна, как клиент BOINC, на прямое соединение с планировщиком проекта и запрос подзадач для расчета. Для решения подобных проблем, в взаимодействии разных архитектур распределенных вычислений требуются реализации дополнительных механизмов, делающих возможным соединение BOINC-Grid. Для этого создан программный мост, при этом реализация моста зависит от особенности подключаемого Grid и проектов, в рамках которого проводятся вычисления.
1.9. Приложения BOINC
Для передачи задания клиенту должно быть разработано и запущено как минимум одно приложение BOINC. После создания проекта, исполняемый файл регистрируется на сервере BOINC, и администратор может начать создавать подзадачи для этого приложения. Подзадачами изначально являются не более чем описанием файлов входа. В том случае, если проект необходимо запустить для вычислений на разных платформах, то надо реализовать и зарегистрировать версии для каждых из платформ.
Преобразование программы в приложение BOINC происходит с помощью добавления библиотек и функций BOINC АPI, реализованные на языке Си.
Необходимо чтобы, все приложения BOINC вызвали специальные функции в начале и конце программы: функция инициализации, функция завершения. В тексте программы BOINC также должны присутствовать функциями, передающие программе-клиенту о стадиях выполнения подзадания (в процентах), с целью информирования пользователя о прогрессе вычисления. Так же возможно для того чтобы привлечь внимание к проекту, можно внести графическую составляющую (картинки, анимация, видео), приложение BOINC будет демонстрировать, поэтому необходимо вызывать функции рисования, если клиентское приложение запросит отображения графики.
Функции BOINC АPI перед открытием преобразуют все имена файлов что проходят через приложение. Есть необходимость в этом для тех приложений, которые запускают большое количество различных входных файлов и сгенерируют большое количество различных выходных файлов. Возможен случай, когда при запуске имена файлов не меняются, тогда при новом запуске необходимо создавать отдельные каталоги на сервере и на машине-клиенте для предотвращения конфликтных ситуаций. Приложение после нескольких запусков не меняется, нет возможности в смене имен внутри приложения и не логично каждый раз перекомпилировать все приложение. Для решения этих проблем, приложение использует логические имена файлов, эти имена переводятся приложением-клиентом в физические имена при запуске. Имена файлов физические определяются только при создании подзадачи.
Подсчет очков это большое преимущество проекта, но для его выполнения приложению надо вызвать специальные функции BOINC АPI, одна из которых говорит приложению о необходимости произведения подсчета очков. Важность этого в том, что пользователю необходимо настроить программу-клиент как использовать жесткий диск только в определенные интервалы времени для предотвращения частого раскручивания диска которое приводит к быстрому износу.
Если подсчет очков клиента разрешен клиентом, то приложение автоматически подсчитает очки, и передаст в другую функцию BOINC АPI информацию о завершении подсчета.
При этом нужно учитывать, что клиентская программа учитывает затраченное время CPU при вычислении количества кредитов. При перезапуске подзадачи (к примеру, когда компьютер перезагрузили), то подсчет времени CPU начнется с момента последнего подсчета очков.
|