2014-12-06 14 views
6

Po raz pierwszy gram w docku na moim Macu. Użyłem boot2docker za pośrednictwem standardowego samouczka i uruchamiam monit w obrazie ubuntu.docker przyspiesza python, dlaczego?

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

Kiedy byłem w doku, zacząłem mój pierwszy eksperyment, aby sprawdzić, czy wydajność spadnie. Z wiersza poleceń użyłbym modułu python timeit, aby szybko sprawdzić niektóre podstawowe miary wydajności.

Mac Python Wyniki
$ 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 Wyniki
> 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 

Wydaje się dziwne, że ubuntu doker, że jest uruchomiony na moim Macu jest uruchomiony kod Pythona szybciej niż pytona na Mac. Czy jest jakiś powód, dla którego to może być?

Edycja

Mogę potwierdzić, że obie wersje python działają w 64-bitowym.

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

Czy oba są takie same w wersji Python 3.x? –

+0

ubuntu uruchamia '' 'Python 3.4.0''', podczas gdy mac uruchamia' '' Python 3.4.1''', jeśli cokolwiek może pomóc wyjaśnić, dlaczego Mac powinien być szybszy, nie? – cantdutchthis

+0

Czy program Python dla systemu Mac działa jako 32-bitowy plik wykonywalny, a wersja dokowalna to plik wykonywalny w wersji 64-bitowej? Widziałem również opcje kompilatora powodują znaczącą różnicę w wydajności. – casevh

Odpowiedz

0

To więcej o różnicy w systemach operacyjnych niż o wydajności Döcker. Pomiar wydajności aplikacji może być trudny.

Podsumowując, system OS X ma wiele procesów, które będą konkurować z testem, a system OS X prawdopodobnie nie nadał testowi wysokiego priorytetu.

W większości przypadków kontener powinien działać równie dobrze jak środowisko macierzyste (czasem lepsze). Ale twój test powinien sprawić, że kontener będzie działał. Docker będzie musiał dodać narzut, gdy aplikacja będzie wykonywać wywołania systemowe i uzyskiwać dostęp do operacji we/wy, więc oba powinny być uwzględnione w teście.

IBM napisał w zeszłym roku artykuł na temat kontenera Linux kontra kontra rodzimy env.

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

Powiązane problemy