2014-12-06 2 views
6

Итак, я впервые играю с докером на своем mac. Я использовал boot2docker через стандартный учебник, и я запускаю приглашение в изображении ubuntu.Доккер ускоряет питон, почему?

docker pull ubuntu 
docker run -i -t ubuntu /bin/bash 

Когда я был в докере, я начал свой первый эксперимент, чтобы увидеть, будет ли производительность снижаться. Из командной строки я бы использовал модуль python timeit, чтобы быстро проверить некоторые основные показатели производительности.

Mac Python Результаты
$ python3.4 -m timeit '"-".join(str(n) for n in range(100))' 
10000 loops, best of 3: 37.7 usec per loop 
$ python3.4 -m timeit '"-".join([str(n) for n in range(100)])' 
10000 loops, best of 3: 34.2 usec per loop 
$ python3.4 -m timeit '"-".join(map(str, range(100)))' 
10000 loops, best of 3: 26.2 usec per loop 
Docker Python Результаты
> python3 -m timeit '"-".join(str(n) for n in range(100))' 
10000 loops, best of 3: 30 usec per loop 
> python3 -m timeit '"-".join([str(n) for n in range(100)])' 
10000 loops, best of 3: 26.9 usec per loop 
> python3 -m timeit '"-".join(map(str, range(100)))' 
10000 loops, best of 3: 20.2 usec per loop 

Это кажется странным, что Докер убунту, который работает поверх моего макинтош, на самом деле работает код питона быстрее питона на макинтош. Есть ли причина, почему это может быть?

Редактирование

Я могу подтвердить, что обе версии python работают в 64 бит.

Mac Python
python3 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)' 
7fffffffffffffff True 
Ubuntu Python
python3.4 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)' 
7fffffffffffffff True 
+0

ли они оба то же Python 3.x версии? –

+0

ubuntu запускает '' 'Python 3.4.0''', в то время как mac запускает' '' Python 3.4.1''', если что-то, что может помочь объяснить, почему Mac должен быть быстрее, нет? – cantdutchthis

+0

Является ли Mac Python запущенным как 32-разрядный исполняемый файл и версия докеры 64-битным исполняемым файлом? Я также видел, что параметры компилятора существенно влияют на производительность. – casevh

ответ

0

Это больше о разнице в операционных системах, чем о производительности Докер. Измерение производительности приложений может быть сложным.

Суть в том, что OS X имеет большое количество процессов, которые будут конкурировать с вашим тестом, и OS X скорее всего не даст вашему тесту высокий приоритет.

В большинстве случаев контейнер должен работать так же, как и родная среда (иногда лучше). Но ваш тест должен заставить контейнер работать. Докере необходимо будет добавить накладные расходы, когда ваше приложение выполняет системные вызовы и получает доступ к I/O, поэтому эти оба должны быть включены в ваш тест.

В прошлом году IBM написала статью о выпуске Linux Container против Native env.

http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf

Смежные вопросы