Задать вопрос
@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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы