Энергопотребление компьютера с ОС 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).
Комментарии (16)
zuborg
06.05.2017 17:31+4Тянет на Игнобелевсвую премию, ей богу.
Контейнеризация дает оверхед, который требует дополнительной энергии, и, к тому же, уменьшает пиковую производительность системы.Punk_UnDeaD
07.05.2017 23:06Ха, я тут в чатике одном иногда напоминаю, что более толстый стек съедает производительность.
А мне в ответ — да ты чо, серверов докупи.
wOvAN
06.05.2017 17:46+4Я думаю, сравнивать уместно с традиционной виртуализацией ОС поверх гипервизора, поскольку Докер отчасти заменяет данный подход.
ZyXI
06.05.2017 18:50+2Зависит от того, для чего используется. Людей из Travis CI (и вообще тех, кому нужна именно «песочница») заинтересовал бы ваш вариант (у них как раз два варианта запуска тестов: в docker контейнере и в полноценной виртуальной машине), тех, кто использует docker только для облегчения развёртки сервисов — то, что есть сейчас.
rPman
06.05.2017 21:51+2Прочитал статью тут, бегло пролистал оригинал, не могу понять, в ватах то где информация? везде кореляции, вероятностные величины, какие то опосредованные данные… что такое 'скрипичный график'?
Я правильно интерпретирую графики? docket съедает порядка 8% энергии? или нужно сравнивать 870ват на машину и 2 вата на docker — 0.2%?hdfan2
07.05.2017 06:30+3что такое 'скрипичный график'?
Тоже заинтересовался. Это т.н. violine plot, который отображает распределение плотности вероятности. Грубо говоря (если я правильно понял), туда, где толще, больше точек попало. Черта посередине — медиана данных. Более информативный вариант «ящика с усами».
shuron
08.05.2017 02:12Оффигеть увеличеная плотность процессов на железе ведет к большему потребленю энергии? ;) Дык радоваться надо ;)
equand
08.05.2017 12:34Мне вот это нравится больше:
http://ivoras.sharanet.org/blog/tree/2009-10-20.the-night-of-1000-jails.html
Интересно сколько ЦПУ будет есть докер при 1000 запущенных пустых контейнеров?
dmitriylyalyuev
Ну, блин, офигеть. Открыли, внезапно, что дополнительный процесс отъедает больше питания…
Ну и оверхед на обработку неймспейсов и изоляции дает свое…
Мне интересно, они вообще перед тем, как проводить эту работу, читали вообще, что такое доккер и как оно работает?
ZyXI
Так интересно не «сожрёт ли docker ресурсы», а «сколько ресурсов сожрёт docker». Только графики они рисовали не с нуля, и в тексте как?то избегают заявлений вроде «docker повысил потребление на X%». У меня в итоге создалось впечатление, что «приложения внутри docker работают дольше, а энергопотребление в единицу времени при нагрузке особо не увеличивается». Предполагаю в их тестах нужно было просто подкрутить планировщик.
Envek
В современных Linux-системах он есть и без Docker'а. Systemd тот же активно использует те же самые механизмы. Ну и в принципе они включены по умолчанию.
Потери производительности/энергии могут быть на виртуальной сети и монтировании ФС в контейнеры (volumes).
В остальном не должно быть никакой разницы между исполнением процесса в основной ОС и исполнением процесса в контейнере. Или я не прав?
dmitriylyalyuev
Именно так.