Я хотел бы в полной мере понять стоимость производительности во время выполнения контейнера Docker. Я обнаружил, что ссылки на сетевое взаимодействие были на ~ 100 мкс медленнее .
Я также нашел ссылки на то, что затраты времени выполнения «незначительны» и «близки к нулю», но я хотел бы знать более точно, каковы эти затраты. В идеале я хотел бы знать, что Docker абстрагирует со стоимостью производительности и вещами, которые абстрагируются без затрат производительности. Сеть, процессор, память и т. Д.
Кроме того, если есть затраты на абстракцию, есть ли способы обойти стоимость абстракции. Например, возможно, я могу смонтировать диск напрямую или практически в Docker.
performance
docker
Люк Хёрстен
источник
источник
Ответы:
Отличная исследовательская работа IBM 2014 года « Обновленное сравнение производительности виртуальных машин и контейнеров Linux », выполненная Felter et al. обеспечивает сравнение между контейнерами из чистого металла, KVM и Docker. Общий результат: Docker практически идентичен собственной производительности и быстрее, чем KVM во всех категориях.
Исключением из этого является NAT докера - если вы используете сопоставление портов (например,
docker run -p 8080:8080
), то вы можете ожидать незначительное снижение задержки, как показано ниже. Однако теперь вы можете использовать сетевой стек хоста (например,docker run --net=host
) при запуске контейнера Docker, который будет работать идентично столбцу Native (как показано в результатах задержки Redis ниже).Они также запустили тесты на задержку на нескольких конкретных сервисах, таких как Redis. Вы можете видеть, что более 20 клиентских потоков с наибольшей задержкой идут на Docker NAT, затем на KVM, а затем на грубую связь между хостом / нативом Docker.
Просто потому, что это действительно полезная статья, вот некоторые другие цифры. Пожалуйста, загрузите его для полного доступа.
Взглянем на дисковый ввод / вывод:
Теперь посмотрим на загрузку процессора:
Теперь несколько примеров памяти (подробности читайте в статье, память может быть очень сложной):
источник
--net=host
(две черты) и-p 8080:8080
(строчная буква 'p') для NAT.Docker - это не виртуализация как таковая - это абстракция поверх поддержки ядром различных пространств имен процессов, пространств имен устройств и т. Д .; одно пространство имен по своей природе не является более дорогим или неэффективным, чем другое, поэтому то, что фактически делает Docker влияющим на производительность, зависит от того, что на самом деле находится в этих пространствах имен.
Выбор Docker с точки зрения того, как он конфигурирует пространства имен для своих контейнеров, имеет свои затраты, но все эти затраты напрямую связаны с выгодами - вы можете отказаться от них, но при этом вы также откажетесь от связанной выгоды:
И так далее. Насколько эти затраты действительно влияют на вас в вашей среде - с вашими шаблонами доступа к сети, ограничениями памяти и т. Д. - вопрос, на который сложно дать общий ответ.
источник
Вот еще несколько тестов по
Docker based memcached server
сравнениюhost native memcached server
с использованием инструмента тестирования Twemperf https://github.com/twitter/twemperf с 5000 подключений и скоростью соединения 20kЗатраты времени соединения для memcached на основе докера, кажется, согласуются с вышеупомянутым техническим документом с примерно вдвое большей скоростью.
Twemperf Docker Memcached
Twemperf Centmin Mod Memcached
Вот тесты, использующие инструмент теста Memtier
memtier_benchmark docker Memcached
memtier_benchmark Centmin Mod Memcached
источник
avg 200.5 min 0.6 max 263.2 stddev 73.85