Введение 3
Постановка задачи 6
Обзор литературы 7
Глава 1. Формализация журнала 10
Глава 2. Модель актеров 15
Глава 3. Модель вычислительных ядер 21
3.1. Определения 21
3.1.1. Программа-пример 23
3.2. Правила разбиения 24
3.2.1. Разбиение программы-примера 26
3.3. Иерархия вычислительных ядер 28
Глава 4. Имплементация вычислительных ядер 33
4.1. Ведение журнала 35
4.2. Вычислительный сервер, управляющий задачи 39
4.3. Работа модели 40
4.4. Тестирование 44
Выводы 46
Заключение 48
Список литературы
Современные проблемы вычислений на кластерах
Сегодня никого не удивить существованием больших суперкомпьютеров, составляющих основу для ЦОДов. Свои собственные вычислительные системы (кластера) есть у лабораторий, университетов, небольших частных компаний. Их повседневное использование и обслуживание — предмет интереса широкого круга людей. Мой же интерес к теме HPC (high performance computing, высокопроизводительные вычисления) формировался все последние годы. Мне, правда, не интересен сам факт существования подобных вычислительных систем - мне интересны проблемы, с которыми сталкиваются их пользователи. Проблемы высокопроизводительных вычислений можно грубо разделить на три группы:
• В первую можно отнести проблемы производительности оборудования. Сюда входят всевозможные алгоритмы оптимизации и практики использования графических ускорителей при вычислениях, производительность сети (локальная/распределенная), производительность центральных процессоров, взаимодействие между устройствами по шине обмена данными, производительность подсистемы оперативной памяти и т.д.
• Вторая группа содержит проблемы надежности. Надежность в данном контексте стоит понимать как свойство аппаратуры и ПО, которое позволяет выполнить задачу вне зависимости от характера и степени внешнего или внутреннего противодействия. К негативным воздействиям относятся аппаратные ошибки и сбои, логические ошибки программной реализации и т.д.
• В третью группу можно отнести проблемы алгоритмического характера, которые можно описать следующим вопросом: как наилучшим образом реализовать задачу в виде программы для ЭВМ, задействовав при этом вычислительный ресурс максимально эффективно?
В среде computer science проблемы первой и третьей группы намного популярнее проблем второй группы. Например, запросы в Google Scholar “cluster computation performance” и “cluster computation reliability” дают результаты в 1300000 и 513000 ответов соответственно. Почему такая большая разница в количестве ответов? Скорее всего потому, что прямая и явная выгода от прироста производительности очевидна всем, а повышение надежности будет иметь вес только в определенном круге задач. Так, если задача рассчитывается быстрее, то в выигрыше все: и тот, кто считает и те, кто предоставляет ресурсы. Но что касается повышения надежности?
Степень надежности процесса вычислений исторически принято связывать с надежностью оборудования. С одной стороны, это логично: если техника работает штатно, то внутренним программным процессам не угрожают фатальные ошибки. Здесь стоит уточнить, что программные фатальные ошибки, например, некорректный доступ к общей памяти, остаются на совести тех, кто целенаправленно их добивается. Сегодня существует достаточно уровней программных разграничений, чтобы исполняемый код не привел к непредсказуемым последствиям.
Но вернемся к технике. Для обеспечения аппаратной надёжности за последние 50 лет разработано достаточное количество методик. В общем, они сводятся к резервированию ресурсов и замещению процессов, подвергнутых сбою. Так, если выходит из строя один жесткий диск, то проще будет перенаправить потоки данных на резервный, ведь таких резервных дисков еще N штук. Тоже — с целыми вычислительными узлами.
Подобные методы резервирования ресурсов оправданы, если стоит цель сохранить статические данные. Здесь под статическими данными я понимаю такие массивы информации, скорость изменения которых не требует их постоянного хранения в оперативной памяти, или такие, которые настолько велики, что могут обработаться только частями, при этом операций чтения с диска много больше операций записи на диск. Потеря таких данных в случае аварии будет худшим из сценариев, потому что эти данные — предмет вычислений. Что же до самого процесса расчета, то его начинают заново. С момента, когда требуется полный перезапуск задачи, начинается мое исследование.
Перезапуск задачи всегда влечет за собой потери. Прежде всего это временные потери, которые в худшем случае составляют полное время выполнения задачи до поломки. Если расчет идет на множестве узлов и сам алгоритм решения задачи реализован с помощью технологий обмена сообщениями, такими как MPI/OpenMP, то вероятность перезапуска всей задачи значительна, потому значительное негативное влияние имеет выход из строя любого узла по любой причине. Временные потери при повторном вычислении ранее рассчитанных, но прерванных операций, приводят к неэффективному использованию кластера в целом. Так, уменьшается показатель эффективности “задача/час”, повышается энергопотребление и т.д. Какие существуют способы этого избежать?
В ходе выполнения квалификационной работы были получены следующие результаты:
1. Разработан новый алгоритм запуска вычислительных задач в кластерных средах с восстановлением, на основе алгоритма без восстановления.
2. Пошагово, на примере, описан процесс использования нового алгоритма для получения программной реализации.
3. Оценена эффективность работы алгоритма в соответствии с целевым критерием.
4. Проведена верификация полученного алгоритма на предмет восстановления прерванных вычислений.
5. Разработана программная среда выполнения алгоритма запуска задач.
1. Bala A., Chana I. Fault tolerance-challenges, techniques and implemen¬tation in cloud computing // IJCSI International Journal of Computer Science Issues. 2012. Vol. 9, no. 1. P. 1694-0814.
2. Sindrilaru E., Costan A., Cristea V. Fault tolerance and recovery in grid workflow management systems // Complex, Intelligent and Software In¬tensive Systems (CISIS), 2010 International Conference on / IEEE. 2010. P. 475-480.
3. Nayeem G. M., Alam M. J. Analysis of Different Software Fault Tolerance Techniques. 2006.
4. Armbrust M., Fox A., Griffith R. et al. A view of cloud computing // Communications of the ACM. 2010. Vol. 53, no. 4. P. 50-58.
5. Meyer H., Rexachs D., Luque E. RADIC: A FaultTolerant Middleware with Automatic Management of Spare Nodes* // Proceedings of the Internation¬al Conference on Parallel and Distributed Processing Techniques and Ap¬plications (PDPTA) / The Steering Committee of The World Congress in Computer Science, Computer Engineering and Applied Computing (World¬Comp). 2012. P. 1.
6. Agha G. A. Actors: A model of concurrent computation in distributed systems.: Tech. rep.: DTIC Document, 1985.
7. Baker H., Hewitt C. Laws for communicating parallel processes. 1977.
8. Tasharofi S., Dinges P., Johnson R. E. Why do scala developers mix the actor model with other concurrency models? // ECOOP 2013-Object-Ori- ented Programming. Springer, 2013. P. 302-326.
9. Haller P. On the integration of the actor model in mainstream technologies: the scala perspective // Proceedings of the 2nd edition on Programming systems, languages and applications based on actors, agents, and decentral-
ized control abstractions / ACM. 2012. P. 1-6.
10. Karmani R. K., Shali A., Agha G. Actor frameworks for the JVM platform: a comparative analysis // Proceedings of the 7th International Conference on Principles and Practice of Programming in Java / ACM. 2009. P. 11-20.
11. Gankevich I., Tipikin Y., Gaiduchok V. Subordination: Cluster manage¬ment without distributed consensus // International Conference on High Performance Computing & Simulation (HPCS) / IEEE. 2015. P. 639-642.
12. Hargrove P. H., Duell J. C. Berkeley lab checkpoint/restart (blcr) for linux clusters // Journal of Physics: Conference Series / IOP Publishing. Vol. 46. 2006. P. 494.
13. Haller P., Odersky M. Scala actors: Unifying thread-based and event-based programming // Theoretical Computer Science. 2009. Vol. 410, no. 2. P. 202-220.
14. Orbit.https://github.com/orbit/orbit.
15. Armstrong J. Making reliable distributed systems in the presence of soft¬ware errors: Ph. D. thesis / The Royal Institute of Technology Stockholm, Sweden. 2003.
16. Bisseling R. H., McColl W. F. Scientific computing on bulk synchronous parallel architectures. 2001.