Задать вопрос
@mkone112
Начинающий питонист.

Python в запущенный в контейнере работает медленнее натива?

Python запущенный в контейнере тормозит, разница с нативом от 10% до 20%.

Нативно:
git clone https://github.com/vprelovac/python-speed.git
cd python-speed
python3 bench.py

python-speed v1.3 using python v3.10.4
string/mem: 5542.03 ms
pi calc/math: 5804.19 ms
regex: 5761.4 ms
fibonnaci/stack:  4344.92 ms
multiprocess: 2502.46 ms

total:  23955.0 ms (lower is better)


В контейнере:
docker run -it python:3.10.4 bash
git clone https://github.com/vprelovac/python-speed.git
cd python-speed
python3 bench.py

python-speed v1.3 using python v3.10.4
string/mem: 7459.51 ms
pi calc/math: 5907.84 ms
regex: 6807.83 ms
fibonnaci/stack:  4113.53 ms
multiprocess: 2714.27 ms

total:  27002.99 ms (lower is better)


Я предположил, что дело в https://github.com/moby/moby/issues/41389, но добавление флагов `--privileged` или `--security-opt seccomp:unconfined` ни к чему не привело.

Куда можно копать чтобы решить проблему?

Kubuntu 22.04 LTS , ядро 6.1.28-060128-generic

Версия libseccomp: 2.5.3-2ubuntu2

Ядро: 6.1.28-060128-generic

Патчи от meltdown/spectre отключены mitigations=off
  • Вопрос задан
  • 2060 просмотров
Подписаться 4 Простой 4 комментария
Решения вопроса 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
Разница в бинарях - Python на хостовой машине собран без отладочной информации, а тот, который в образе python:3.10.4 собран с нею.

Выходом из ситуации будет - взять базовый образ Debian и установить в него Python из штатного репозитория с помощью штатного пакетного менеджера, тогда результат теста бенчмарка на хостовой машине и в контейнере не будет отличаться.

Можно пойти дальше и собрать Python из исходников самому, но самостоятельная сборка это такое себе развлечение (хотя с помощью pyenv делать это довольно просто), а выигрыш не такой уж и значительный - устанавливать бинарные пакеты сильно проще.

PS
Никогда не используй образы Alpine - там вместо glibc суррогат под названием musl. В прочем для статически слинкованных бинарей на Go использовать можно, но тогда уж выгоднее использовать scratch
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽