Введение 3
Постановка задачи 5
Обзор литературы 6
Глава 1. Проектирование 10
1.1. Архитектура системы 10
1.2. Схема базы данных 11
1.3. Архитектура системы на программном уровне 12
Глава 2. Стратегии кошедулинга 15
2.1. Round-Robin стратегия 16
2.2. Стратегия выбора самого «быстрого»рабочего узла (FCN) . 17
2.3. Стратегия выбора узла с наименьшей нагрузкой (LLN) ... 18
2.4. Стратегия выбора комбинации с наибольшей скоростью (FCS) 19
Глава 3. Разработка 23
3.1. Используемые технологии 23
3.2. Модель взаимодействия между узлами 26
3.3. Формат задач 29
3.4. Оценка скорости задачи 31
3.5. Кэширование 32
3.6. Работа с базой данных 34
Глава 4. Вычислительный эксперимент 37
4.1. Характеристики вычислительной системы 37
4.2. Выбор вычислительных задач 37
4.3. Эксперимент на одном узле 39
4.4. Эксперимент на двух узлах 41
4.5. Итоги экспериментов 43
Выводы 45
Заключение 46
Список литературы 47
В современных вычислительных системах активно используется концепция высокопроизводительных вычислений (HPC) для решения комплексных задач. Преимущественно системы HPC организуются в виде кластеров из-за экономической эффективности и технологических ограничений монолитных систем.
Одним из основных вопросов в области HPC является планирование выполнения задач (scheduling). Критерии эффективности работы планировщика могут быть разнообразными; выделяются два основных направления, в которых можно оптимизировать планирование задач:
• Максимальная скорость выполнения задач, поставленных пользователями.
• Максимальная эффективность использования ресурсов системы.
Эти две цели в определенной степени противоречат друг другу: первая направлена на обеспечение качества обслуживания для конечного пользователя, а вторая — на обеспечение работоспособности системы в целом.
В большинстве HPC-систем ресурсы выделяются на уровне вычислительных узлов: для выполнения задачи ей выделяется запрашиваемое количество узлов кластера. При таком подходе никакие две задачи на одном узле одновременно не выполняются. Этот метод имеет два главных преимущества: он относительно прост в реализации и решает проблему влияния задач друг на друга на производительность. Однако такой подход не позволяет полностью использовать вычислительные возможности системы:
• Некоторые приложения зависят от определенных аппаратных компонентов, тогда как другие меньше зависят от них.
• В работе приложения могут быть фазы активных вычислений и простоя.
• Пользователи часто переоценивают необходимые ресурсы для выполнения задачи.
Кроме того, частая переоценка необходимых ресурсов пользователями приводит к нерациональному использованию системы, что снижает её эффективность и увеличивает энергопотребление, что в свою очередь повышает стоимость эксплуатации вычислительных центров.
В ответ на эти проблемы возникает стратегия кошедулинга.
Кошедулинг - это процесс планирования использования ресурсов, который позволяет двум или более задачам или процессам работать параллельно или последовательно, оптимизируя общее время выполнения, производительность системы, более эффективное использование ресурсов, поскольку задачи могут выполняться параллельно, оптимизируя распределение ресурсов и уменьшая общее время выполнения задач.
Тем не менее, кошедулинг предъявляет высокие требования к планировщику задач, который должен уметь разрешать потенциальные конфликты между задачами для достижения оптимального распределения ресурсов. Это делает важным анализ стратегий планирования, способных совместить эффективное выполнение задач с эффективным использованием системных ресурсов.
В рамках данной работы:
• Проведен анализ актуальной литературы по теме кошедулинга, который послужил основой для разработки стратегий планирования задач.
• Разработана программная реализация планировщика, которая была представлена в открытом доступе на платформе GitHub. В Readme репозитория подробно описан процесс запуска системы, обеспечивая тем самым возможность использования и дальнейшего усовершенствования данного инструмента другими исследователями и разработчиками.
• Проведен вычислительный эксперимент, в рамках которого были оценены производительные характеристики различных стратегий планирования. Важно отметить, что две из рассмотренных стратегий продемонстрировали более высокую эффективность по сравнению с базовой стратегией Round Robin.
• Произведен детальный анализ результатов вычислительных экспериментов, в рамках которого выявлены сильные и слабые стороны каждой из предложенных стратегий. На основе этого анализа были предложены конкретные улучшения и рекомендации для оптимизации работы планировщика, что может способствовать его более эффективному применению в различных вычислительных сценариях.
Таким образом, в данной работе были успешно выполнены все поставленные цели.
[1] Dynamic Co-Scheduling Driven by Main Memory Bandwidth Utilization / J. Breitbart, S.Pickartz, S. Lankes et al. // 2017 IEEE International Conference on Cluster Computing (CLUSTER) - 2017
[2] Y. Cheng, W. Chen, Z. Wang et al. Smart VM co-scheduling with the precise prediction of performance characteristics // Future Generation Computer Systems. - 2016. - Vol. 105. - P. 1016-1027.
[3] A clustering based coscheduling strategy for efficient scientific workflow execution in cloud computing - 2013.
[4] Кучумов Р. И. Планирование вычислительных задач с учетом взаимного замедления: дис. ... канд. ф.-м. наук: 1.2.2. - СПб., 2022. - 118 с.
[5] Orchestrated Co-scheduling, Resource Partitioning, and Power Capping on CPU-GPU Heterogeneous Systems via Machine Learning
[6] Clean Architecture: A Craftsman’s Guide to Software Structure and Design
[7] Э. Фримен Head First. Паттерны проектирования. Юбилейное издание. Спб.: Питер, 2018. 657 с.
[8] Р. Мартин Идеальный программист: Как стать профессионалом разработки ПО. Спб.: Питер. 2012. 224 с.
[9] Макконнелл С. Совершенный код. Мастер-класс. М.: Изд. Русская редакция, 2016. 896 с.
[10] Луковичная архитектура в компоновке backend-приложения и куда в итоге класть маперы //habr.com URL:
https://habr.com/ru/articles/672328/ дата обращения: 15.03.24
[11] What is Golang? //bestarion.com URL:
https://bestarion.com/what-is-golang/ дата обращения: 27.01.24
[12] PostgreSQL - объектно-реляционная система управления базами данных // Web-creator.ru URL:
https://web-creator.ru/articles/postgresql (дата обращения: 17.02.24).
[13] Сравнение PostgreSQL и MySQL // MCS.mail.ru URL: https://mcs.mail.ru/blog/postgresql-ili-mysql-kakaya-iz-etih-relyacionnyh- subd (дата обращения: 17.02.24).
[14] В Google провели сравнение производительности C++, Java, Go и Scala //opennet.ru URL:
https://www.opennet.ru/opennews/art.shtml?num=30784 (дата обращения: 01.02.24)
[15] Путь к HTTP/2//habr.com URL:
https://habr.com/ru/articles/308846/ (дата обращения: 03.02.24)
[16] Сравнение служб gRPC с API-интерфейсами HTTP //learn.microsoft.com URL:
https://learn.microsoft.com/ru-ru/aspnet/core/grpc/comparison?view=aspnetcore- 8.0 (дата обращения 04.02.24)
[17] Runtime options with Memory, CPUs, and GPUs //dosc.docker.com URL: https://docs.docker.com/config/containers/resourceconstraznts/ (дата обращения: 10.04.24)
[18] Modern Caching 101: What Is In-Memory Cache, When and How to Use It //gigaspaces.com URL:
https://www.gigaspaces.com/blog/in-memory-cache/ (дата обращения: 10.04.24)
[19] Volumes //docs.docker.com URL:
https://docs.docker.com/storage/volumes/ (дата обращения: 15.04.24)
[20] Official Postgres Image //hub.docker.com URL:
https://hub.docker.eom//postgres (дата обращения: 15.04.24)
[21] B-Tree Index in PostgreSQL //bedev.medium.com URL:
https://bedev.medium.com/b-tree-index-in-postgresql-c731e3dbcc09 (дата обращения: 15.04.24)
[22] NAS Parallel Benchmarks //www.nas.nasa.gov URL:
https://www.nas.nasa.gov/software/npb.html (дата обращения: 23.04.2024)