Энергопотребление компьютера с ОС Linux и сервисом Docker без всякой нагрузки (без загрузки контейнера)
Виртуализация даёт множество преимуществ — особенно для изоляции процессов и контроля за ресурсами. Развёртывание программ стало как никогда простым благодаря образам полной и сконфигурированной системы. Работа гипервизора для виртуальных машин означала одновременную работу двух ядер операционной системы. Поэтому появились легковесная альтернатива виртуальным машинам — контейнеры, которые сейчас быстро вытесняют виртуальные машины как наиболее оптимальный способ виртуализации.
Поскольку в контейнерах не работают одновременно два ядра операционной системы, как в виртуальных машинах, то казалось бы, что энергопотребление у них должно быть такое же, как при работе обычной операционной системы. Но это не так. Cравнительное тестирование Linux и Docker показало, что энергопотребление контейнеров Docker чуть выше.
Специалисты с кафедры информатики Университета Альберты (Канада) сравнили энергопотребление серверов со стандартными контейнерами Docker и серверов Linux на тех же задачах. Для запуска задач на тестовом сервере и для записи результатов измерений использовалась отдельная машина (test runner) Dell PowerEdge R710 такой же аппаратной конфигурации.
Аппаратная конфигурация тестового сервера Dell PowerEdge R710:
- Процессор: 2 шестиядерных Intel Xeon X5670 на тактовой частоте 2,93 ГГц
- Оперативная память: 72 ГБ ECC DDR3
- Сеть: Gigabit Ethernet
- Накопитель: жёсткий диск 146 ГБ SAS на 15000 оборотах
- Энергопитание: 870 Вт (120 В, 12A на 60 Гц)
Версии программного обеспечения на тестовом сервере:
Программное обеспечение | Версия | Образ Docker |
---|---|---|
Дистрибутив | Ubuntu Server 16.04.1 LTS | |
Ядро | Linux 4.4.0 | |
Docker | 1.12.1 | |
Apache | 2.4.10 | php:5.6-apache |
PHP | 5.6.24 | php:5.6-apache |
MySQL | 5.7.15 | mysql:5.7.15 |
WordPress | 4.6.0 | wordpress:4.6-apache |
Redis | 3.2.3 | redis:3.2.3 |
PostgreSQL | 9.5.4 | postgres:9.5.4 |
Потребление энергии замерял ваттметр. Это наиболее объективный тест, потому что так измеряется полное потребление системы — и процессор, и память, и сеть, и даже оверхед на блок питания. Ваттметр выдаёт среднее значение каждую секунду (RMS). Как показала практика, подобной точности достаточно для корректных измерений. Запись данных осуществляла модифицированная версия программы yyongpil’s wattsup.
Для начала в качестве «базового» уровня измерили энергопотребление компьютера с ОС Linux и сервисом Docker без всякой нагрузки (без загрузки контейнера). Во время каждого теста сервер работал без нагрузки в течение 10 минут, а тест повторяли 40 раз. Результаты показаны на самой первой диаграмме в статье. Повышенное энергопотребление вызвано работой фонового процесса dockerd. Этот сервер, написанный на языке программирования Go, периодически просыпается, даже если нет ни одного запущенного контейнера. Исследование показало, что он вызывает различные функции на Go для сборки мусора и шедулинга (runtime.findrunnable,
runtime.scanobject, runtime.heapBitsForObject, runtime.greyobject).
Затем исследователи последовательно запустили под Linux и в контейнере три задачи Redis, WordPress и PostgreSQL — и обработали результаты различными статистическими методами. В графическом виде результаты нагляднее всего показаны как скрипичные графики и карты плотности. Скрипичные графики хорошо иллюстрируют статистические распределение показателей. Например, так выглядит график для Linux и Docker без нагрузки.
А вот скрипичный график для теста с WordPress.
И карта плотности для него же, которая тоже показывает распределение нагрузки и энергопотребления по времени.
Как видим, в случае задачи WordPress разница в энергопотреблении тоже велика. В этом тесте был сгенерирован блог с помощью WP Example Content Plugin 1.3, а потом симулировалась HTTP-нагрузка на него с помощью Tsung 1.6.0.
Для нагрузки PostgreSQL разница в энергопотреблении не такая заметная, а вот в случае Redis ситуация усугубляется тем, что в контейнере Docker тесту потребовалось больше времени для выполнения.
Скрипичный график для Redis.
Карта плотности для него же.
Работа всех тестов заняла в общей сложности 2 суток и 20 часов, но зато исследователям удалось собрать исчерпывающую и объективную статистику. Оказалось, что простой запуск фонового процесса dockerd без выполнения задач увеличивает энергопотребление на 2 ватта. Далее, в случае Redis и WordPress увеличение энергопотребления во многом связано со снижением производительности. Поскольку работа выполняется в контейнере, она выполняется большее время, что ведёт к увеличению общего энергопотребления.
Исследователи подчёркивают, что при использовании контейнеров следует учитывать увеличенный расход энергии. Но при этом следует помнить о большой экономии на сопровождении и поддержки контейнеров, по сравнению с обычными установками ПО на сервере. Выгоды от удобства и экономии времени могут сильно перевешивать потери на энергопотреблении, тем более эти потери не такие уж катастрофические, а можно сказать, минимальные.
Научная работа опубликована 2 мая 2017 года на сайте препринтов arXiv.org (arXiv:1705.01176).
Автор: Анатолий Ализар