Почему мой решатель оптимизации работает медленнее docker? - PullRequest
2 голосов
/ 20 февраля 2020

Я очень новичок в docker и недавно написал dockerfile для контейнерного решения математической оптимизации под названием SuiteOPT. Однако при тестировании решателя оптимизации на нескольких тестовых задачах производительность в docker ниже, чем за пределами docker. Например, одна демонстрационная задача линейной программы (demoLP.py) занимает ~ 12 секунд для решения на моей машине, но в docker это занимает ~ 35 секунд. Я потратил около недели, просматривая блоги и сообщения от stackoverflow, чтобы найти решения, но независимо от того, какие изменения я делаю, время в docker всегда составляет ~ 35 секунд. У кого-нибудь есть идеи, что может происходить, или кто-то может указать мне правильное направление?

Ниже приведены ссылки на хаб docker и страницу PYPI для решателя оптимизации:

Docker хаб для SuiteOPT

Страница PYPI для SuiteOPT

Редактировать 1 : Добавление дополнительной мысли из-за комментария от @ user3666197. Хотя я не ожидал, что SuiteOPT будет работать так же хорошо в контейнере docker, я был в основном удивлен замедлением ~ 3x для этой демонстрационной задачи. Возможно, вопрос можно сформулировать следующим образом: Как определить, вызвано ли это замедление чисто тем фактом, что я выполняю интенсивный код CPU-RAM-I / O внутри контейнера docker вместо к какой-либо другой проблеме с конфигурацией моего Dockerfile?

Примечание : Цель этой контейнеризации - предоставить пользователям простой способ начать работу с ПО для оптимизации в Python. Хотя программное обеспечение для оптимизации доступно для PYPI, существует множество не python зависимостей, которые могут вызвать проблемы у людей, желающих использовать программное обеспечение, не сталкиваясь с проблемами при установке.

1 Ответ

0 голосов
/ 22 февраля 2020

Q : Как определить, вызвано ли это замедление исключительно тем фактом, что я выполняю интенсивный код CPU-RAM-I / O внутри docker контейнер вместо какой-то другой проблемы с конфигурацией моего Dockerfile?

Поле битвы:

enter image description here (Кредиты: Брендан ГРЭГГ)

Шаг 0 : сбор данных об обработке прогона на стороне хоста:


 mpstat -P ALL 1 ### 1 [s] sampled CPU counters in one terminal-session (may log to file)

 python demoLP.py  # <TheWorkloadUnderTest> expected ~ 12 [s] on bare metal system 

Шаг 1 : собрать данные о той же обработке, но внутри Docker -контейнера

плюс обзор политики установлены в --cpus and --cpu-shares ( потенциально --memory + --kernel-memory , если используется )
плюс обзор эффекты показаны в throttled_time (см. Стр. 13 )

cat /sys/fs/cgroup/cpu,cpuacct/cpu.stat
nr_periods 0
nr_throttled 0
throttled_time 0 <-------------------------------------------------[*] increasing?

, а также обзор вида рабочей нагрузки Docker -контейнеров из коробки:

cat /proc/<_PID_>/status | grep nonvolu ### in one terminal session
nonvoluntary_ctxt_switches: 6 <------------------------------------[*] increasing?

systemd-cgtop                           ### view <Tasks> <%CPU> <Memory> <In/s> <Out/s>

Шаг 2 :

Проверьте наблюдаемые показания относительно установленной абсолютной ограничения CPU policy и долей CPU policy с использованием приведенной выше блок-схемы

...