Балансировка нагрузки высокопроизводительного кластера (1187395), страница 4
Текст из файла (страница 4)
Ниже приведён график загруженности процессора при данном алгоритме. Пики соответствуют окончанию второй фазы процесса распределения ресурсов.
Метод оценки Process working set (PWS)
Данный метод основан на следующих эмпирических соображениях. Для вычислительного узла требуется ввести метрику его загруженности. При достижении её критического значения приминается решение о миграции одного или более контейнеров на менее загруженный узел (куда именно решается алгоритмом «Упаковка рюкзака»).
В качестве такой метрики можно было бы выбрать загрузку оперативной памяти, но тут возникают сложности с собственно определением «загруженности» (см. ниже). Поэтому стоит использовать более пригодный для экспериментального определения параметр. На эту роль подходит загруженность своп-файла (swap-rate). Действительно, его высокое значение говорит о высокой частоте page fault’ов и, соответственно, необходимости частого обращения к диску. Практика показывает, что при занятости файла подкачки на 40% наблюдается сильное падение в производительности. Это значение было выбрано в качестве порогового.
После принятия решения о миграции встаёт задача определения контейнера, который необходимо отгрузить на другой кластер. Следовательно, потребуется ещё одна метрики для определения самого «тяжеловесного» контейнера.
Как мы выяснили в главе «Аппаратно-независимая оптимизация виртуальной памяти», процессы имеют склонность удерживать в физической памяти некий минимальный набор страниц, к которым идёт самое частое обращение (модель рабочего множества процесса). PWS хорошо оценивает долю памяти, занимаемую процессом. Мы можем ввести величину рабочего множества контейнера (CWS) как сумму рабочих множеств его процессов c учётом общей памяти. Такая величина уже будет оценивать вес контейнера на кластере. При необходимости миграции будут отгружаться контейнеры с самым высоким CWS.
Остаётся вопрос о практическом подсчёте PWS и статистике page fault’ов. С этим нам поможет виртуальная файловая система /proc, которая содержит информацию о процессах системы. Особый интерес представляет файл /proc/meminfo c общей информацией об использовании памяти и файл /proc/[pid]/statm. Эта информация нам и даёт нам резидентные страницы памяти (т.е. страницы, находящиеся в pws) (см. Приложение).
Соответственные замеры памяти для контейнеров дают нам
Так же была определена статистика страничных исключений
Заключение
В современной IT индустрии важнейшее место занимают так называемые облачные вычисления, то есть те, в которых основная часть бизнес-логики реализуется на стороне сервера. Как следствие, имеет место значительная загруженность облачных серверов, которую экономически нецелесообразно решать простым наращиванием мощностей.
Одним из наиболее действенных решений является переход от реального железа к виртуальному. Такой подход позволяет эффективно перераспределять вычислительные мощности и "на лету" изменять архитектуру системы. В ходе исследования были изучены разнообразные технологии виртуализации, их преимущества и недостатки, а так же применение на практике.
Анализ большинства "честных" методов виртуализации показал их избыточность. Мы полагаем, что методы эмуляции и паравиртуализации влекут большие накладные расходы, которых можно было бы избежать. Было продемонстрировано, что значительная часть ресурсов отдана под виртуализацию аппаратного обеспечения.
В качестве альтернативы мы предлагаем использовать сравнительно молодую технологию контейнерной виртуализации. Были рассмотрены её особенности и способы реализации в системе GNU/Linux на основе механизма ядра cgroups.
Как уже выло отмечено, преимуществом виртуализации серверов является возможность лёгкого изменения их архитектуры за счёт перемещения виртуальных машин. В работе было теоретически обосновано, что контейнеры позволяют более гибко реализовывать это преимущество путём механизма миграции.
Было проделано основательное изучение работы основной памяти ЭВМ, как на аппаратном уровне, так и на уровне ядра операционной системы. Были выведены метрики загруженности кластера, главной из которых является рабочие множества процессов.
Под рабочим множеством надо понимать минимальный набор активно используемых страниц памяти данного процесса. В работе предъявлено формальное определение и способы измерения этой величины.
На основе проведённого теоретического и практического анализа были предложены способы оценки загрузки контейнерного сервера и его балансировки. В перспективе планируется внедрение этих идей в промышленные приложения и технологии Open Source.
Список публикаций автора
-
Петров Д.И., Тихомиров П.О. Разработка прототипа программно-аппаратной системы быстрого реагирования автоматизированного сбора и публикации информации от разнообразных датчиков в Internet и децентрализованных сетей ZigBee для последующего резервирования данных // Труд 54-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. Т. 2. 2011. С. 68.
-
Петров Д.И. Обеспечение масштабируемости и отказоустойчивости программной системы хранения данных на сверхбольших объёмах данных // Труды 55-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2. С. 130-131.
-
Петров Д.И. Распределённое управление ресурсами высокопроизводительных систем // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2013. Т. 2. С. 160.
Список литературы
-
Э. Танненбаум. Современные операционные системы. 3-е изд.// Спб.: Питер, 2010. – 1120 с.
-
В.Е. Карпов, К.А. Коньков. Основы операционных систем. Курс лекций. Учебное пособие. 2-е изд.// М.: ИНТУИТ.РУ, 2011. – 536 с.
-
VMWare, Inc. «Software and Hardware Techniques for x86 Virtualization», 2009
-
«Virtualization», Wikipedia: The Free Encyclopedia
-
Петров Д.И. Распределённое управление ресурсами высокопроизводительных систем // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2013. Т. 2. С. 160.
-
Нил Макалистер. Виртуализация серверов // InfoWorld, 2007
-
Advanced Micro Devices, Inc. «AMD-VTM Nested Paging», July, 2008
-
Intel®, «Intel® 64 and IA-32 Architectures Software Developer’s Manual»
-
«Буфер ассоциативной трансляции», Wikipedia: The Free Encyclopedia
-
“Virtualize Your IT Infrastructure”. VMWare. 2011.
-
М. Тим Джонс, «Виртуальный Linux. Обзор методов виртуализации, архитектур и реализаций», 2007
-
Петров Д.И. Обеспечение масштабируемости и отказоустойчивости программной системы хранения данных на сверхбольших объёмах данных // Труды 55-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2. С. 130-131.
-
Tatu Yl onen, «Shadow Paging Is Feasible», 1994
-
«CPU Cache», Wikipedia: The Free Encyclopedia
-
«Parallels Virtuozzo Containers» http://www.parallels.com/ru/products/pvc/
-
Тихомиров П.О. Live-миграция приложений в CRIU // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2.
-
Плотник Н.С. Динамическое планирование ресурсов // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика.
Приложение. Вычисление PWS
#include <unistd.h>
#include <sys/resource.h>
#include <stdio.h>
/**
* Returns the peak (maximum so far) resident set size (physical
* memory use) measured in bytes
*/
size_t getPeakRSS( )
{
struct rusage rusage;
getrusage( RUSAGE_SELF, &rusage );
}
/**
* Returns the current resident set size (physical memory use) measured
* in bytes, or zero if the value cannot be determined on this OS.
*/
size_t getCurrentRSS( )
{ long rss = 0L;
FILE* fp = NULL;
if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL )
return (size_t)0L; /* Can't open? */
if ( fscanf( fp, "%*s%ld", &rss ) != 1 )
{
fclose( fp );
return (size_t)0L; /* Can't read? */
}
fclose( fp );
return (size_t)rss * (size_t)sysconf( _SC_PAGESIZE);
}
46