Остаётся вопрос о практическом подсчёте PWS и статистике page fault'ов. С этим нам поможет виртуальная файловая система /proc, которая содержит информацию о процессах системы. Особый интерес представляет файл /proc/meminfo c общей информацией об использовании памяти и файл /proc/[pid]/statm. Эта информация нам и даёт нам резидентные страницы памяти (т.е. страницы, находящиеся в pws) (см. Приложение).
Соответственные замеры памяти для контейнеров дают нам
Так же была определена статистика страничных исключений
Заключение
В современной IT индустрии важнейшее место занимают так называемые облачные вычисления, то есть те, в которых основная часть бизнес-логики реализуется на стороне сервера. Как следствие, имеет место значительная загруженность облачных серверов, которую экономически нецелесообразно решать простым наращиванием мощностей.
Одним из наиболее действенных решений является переход от реального железа к виртуальному. Такой подход позволяет эффективно перераспределять вычислительные мощности и "на лету" изменять архитектуру системы. В ходе исследования были изучены разнообразные технологии виртуализации, их преимущества и недостатки, а так же применение на практике.
Анализ большинства "честных" методов виртуализации показал их избыточность. Мы полагаем, что методы эмуляции и паравиртуализации влекут большие накладные расходы, которых можно было бы избежать. Было продемонстрировано, что значительная часть ресурсов отдана под виртуализацию аппаратного обеспечения.
В качестве альтернативы мы предлагаем использовать сравнительно молодую технологию контейнерной виртуализации. Были рассмотрены её особенности и способы реализации в системе GNU/Linux на основе механизма ядра cgroups.
Как уже выло отмечено, преимуществом виртуализации серверов является возможность лёгкого изменения их архитектуры за счёт перемещения виртуальных машин. В работе было теоретически обосновано, что контейнеры позволяют более гибко реализовывать это преимущество путём механизма миграции.
Было проделано основательное изучение работы основной памяти ЭВМ, как на аппаратном уровне, так и на уровне ядра операционной системы. Были выведены метрики загруженности кластера, главной из которых является рабочие множества процессов.
Под рабочим множеством надо понимать минимальный набор активно используемых страниц памяти данного процесса. В работе предъявлено формальное определение и способы измерения этой величины.
На основе проведённого теоретического и практического анализа были предложены способы оценки загрузки контейнерного сервера и его балансировки. В перспективе планируется внедрение этих идей в промышленные приложения и технологии Open Source.
Список публикаций автора
1. Петров Д.И., Тихомиров П.О. Разработка прототипа программно-аппаратной системы быстрого реагирования автоматизированного сбора и публикации информации от разнообразных датчиков в Internet и децентрализованных сетей ZigBee для последующего резервирования данных // Труд 54-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. Т. 2. 2011. С. 68.
2. Петров Д.И. Обеспечение масштабируемости и отказоустойчивости программной системы хранения данных на сверхбольших объёмах данных // Труды 55-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2. С. 130-131.
3. Петров Д.И. Распределённое управление ресурсами высокопроизводительных систем // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2013. Т. 2. С. 160.
Список литературы
1. Э. Танненбаум. Современные операционные системы. 3-е изд.// Спб.: Питер, 2010. - 1120 с.
2. В.Е. Карпов, К.А. Коньков. Основы операционных систем. Курс лекций. Учебное пособие. 2-е изд.// М.: ИНТУИТ.РУ, 2011. - 536 с.
3. VMWare, Inc. «Software and Hardware Techniques for x86 Virtualization», 2009
4. «Virtualization», Wikipedia: The Free Encyclopedia
5. Петров Д.И. Распределённое управление ресурсами высокопроизводительных систем // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2013. Т. 2. С. 160.
6. Нил Макалистер. Виртуализация серверов // InfoWorld, 2007
7. Advanced Micro Devices, Inc. «AMD-VTM Nested Paging», July, 2008
8. Intel®, «Intel® 64 and IA-32 Architectures Software Developer's Manual»
9. «Буфер ассоциативной трансляции», Wikipedia: The Free Encyclopedia
10. “Virtualize Your IT Infrastructure”. VMWare. 2011.
11. М. Тим Джонс, «Виртуальный Linux. Обзор методов виртуализации, архитектур и реализаций», 2007
12. Петров Д.И. Обеспечение масштабируемости и отказоустойчивости программной системы хранения данных на сверхбольших объёмах данных // Труды 55-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2. С. 130-131.
13. Tatu Yl onen, «Shadow Paging Is Feasible», 1994
14. «CPU Cache», Wikipedia: The Free Encyclopedia
15. «Parallels Virtuozzo Containers» http://www.parallels.com/ru/products/pvc/
16. Тихомиров П.О. Live-миграция приложений в CRIU // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика. 2012. Т. 2.
17. Плотник Н.С. Динамическое планирование ресурсов // Труды 56-й научной конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе». Управление и прикладная математика.
#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);
}