Энергопотребление компьютера с ОС 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)


  1. dmitriylyalyuev
    06.05.2017 17:29
    +2

    Ну, блин, офигеть. Открыли, внезапно, что дополнительный процесс отъедает больше питания…
    Ну и оверхед на обработку неймспейсов и изоляции дает свое…


    Мне интересно, они вообще перед тем, как проводить эту работу, читали вообще, что такое доккер и как оно работает?


    1. ZyXI
      06.05.2017 18:45
      +2

      Так интересно не «сожрёт ли docker ресурсы», а «сколько ресурсов сожрёт docker». Только графики они рисовали не с нуля, и в тексте как?то избегают заявлений вроде «docker повысил потребление на X%». У меня в итоге создалось впечатление, что «приложения внутри docker работают дольше, а энергопотребление в единицу времени при нагрузке особо не увеличивается». Предполагаю в их тестах нужно было просто подкрутить планировщик.


    1. Envek
      07.05.2017 10:40

      оверхед на обработку неймспейсов и изоляции

      В современных Linux-системах он есть и без Docker'а. Systemd тот же активно использует те же самые механизмы. Ну и в принципе они включены по умолчанию.


      Потери производительности/энергии могут быть на виртуальной сети и монтировании ФС в контейнеры (volumes).


      В остальном не должно быть никакой разницы между исполнением процесса в основной ОС и исполнением процесса в контейнере. Или я не прав?


      1. dmitriylyalyuev
        08.05.2017 12:03

        Именно так.


  1. zuborg
    06.05.2017 17:31
    +4

    Тянет на Игнобелевсвую премию, ей богу.
    Контейнеризация дает оверхед, который требует дополнительной энергии, и, к тому же, уменьшает пиковую производительность системы.


    1. Punk_UnDeaD
      07.05.2017 23:06

      Ха, я тут в чатике одном иногда напоминаю, что более толстый стек съедает производительность.
      А мне в ответ — да ты чо, серверов докупи.


  1. wOvAN
    06.05.2017 17:46
    +4

    Я думаю, сравнивать уместно с традиционной виртуализацией ОС поверх гипервизора, поскольку Докер отчасти заменяет данный подход.


    1. ZyXI
      06.05.2017 18:50
      +2

      Зависит от того, для чего используется. Людей из Travis CI (и вообще тех, кому нужна именно «песочница») заинтересовал бы ваш вариант (у них как раз два варианта запуска тестов: в docker контейнере и в полноценной виртуальной машине), тех, кто использует docker только для облегчения развёртки сервисов — то, что есть сейчас.


  1. Denai
    06.05.2017 21:10
    +8

    Люблю графики, начинающиеся не с нуля


    1. LynXzp
      07.05.2017 00:28
      +1

      Главное что оси подписаны. Но разница не особо большая, кроме как на первой картинке, а у нее другая беда — не понятно на сколько черная точка «чернее» серой. Где легенда?


  1. rPman
    06.05.2017 21:51
    +2

    Прочитал статью тут, бегло пролистал оригинал, не могу понять, в ватах то где информация? везде кореляции, вероятностные величины, какие то опосредованные данные… что такое 'скрипичный график'?

    Я правильно интерпретирую графики? docket съедает порядка 8% энергии? или нужно сравнивать 870ват на машину и 2 вата на docker — 0.2%?


    1. hdfan2
      07.05.2017 06:30
      +3

      что такое 'скрипичный график'?

      Тоже заинтересовался. Это т.н. violine plot, который отображает распределение плотности вероятности. Грубо говоря (если я правильно понял), туда, где толще, больше точек попало. Черта посередине — медиана данных. Более информативный вариант «ящика с усами».


  1. shuron
    08.05.2017 02:12

    Оффигеть увеличеная плотность процессов на железе ведет к большему потребленю энергии? ;) Дык радоваться надо ;)


  1. equand
    08.05.2017 12:34

    Мне вот это нравится больше:
    http://ivoras.sharanet.org/blog/tree/2009-10-20.the-night-of-1000-jails.html
    Интересно сколько ЦПУ будет есть докер при 1000 запущенных пустых контейнеров?


  1. bosom
    09.05.2017 20:56

    Есть капитан-очевидность, летенант-ясен ..., а как назвать генерала?


    1. malefix
      12.05.2017 09:41

      Генерал Фэйлор же. Надейтесь, что он не читает ваши файлы