RPi3 vs DragonBoard z perspektywy Pythona

RPi3 vs DragonBoard z perspektywy Pythona

Python jest idealnym językiem do tworzenia prostych projektów PoC. Nie będziemy omawiać pełnej listy jego zalet, ale najbardziej niesamowite jest to, że Python jest wieloplatformowy. To bardzo przydatna funkcja w przypadku wbudowanych aplikacji systemowych. Nie musimy czekać aż kompilator przetworzy pliki binarne, nie ma potrzeby wdrażania aplikacji na płycie. I ten sam kod działa na PC oraz sprzęcie opartym o Linux, jak Raspberry Pi.

Niestety to podejście ma swoje ograniczenia. Nie możemy używać go w projektach związanych z hardwarem – desktop PC nie posiada SP. Oczywiście należy także pamiętać o tym, że komputery oparte o architekturę ARM są powolne w porównaniu do PC. W niektórych przypadkach algorytm doskonale działający na desktopie będzie więc działał słabiej na systemie wbudowanym.

Wydajność była kluczowa w jednym z naszych ostatnich projektów (obejrzyj demo Amazon Alexa Virtual Device tutaj). Użyliśmy Dragonboard 410 c jako jednej z naszych docelowych platform. Byliśmy pozytywnie zaskoczeni wydajnością płyty. Nawet bez pogłębionej analizy porównawczej zauważyliśmy przewagę przy instalowaniu pakietów systemowych, odpalaniu aplikacji i w przypadku całkowitej wydajności w porównaniu do Raspberry Pi 3. Spójrzmy na specyfikację.

Płyta Raspberry Pi 3 DragonBoard 410c
CPU BCM2837,
Quad-core ARMA53(v8) 1.2GHz
Snapdragon 410E,
Quad-core ARMA53(v8) 1.2GHz
Pamięć 1GB 1GB

Wygląda porównywalnie i nie wyjaśnia przewagi wydajnościowej DragonBoard. Przeprowadziliśmy więc analizę porównawczą, by sprawdzić, czy naprawdę jest szybsza.

Zdecydowaliśmy, że sprawdzimy wydajność Python 3 na tych płytach, ponieważ była to dla nas najistotniejsza wersja systemu. Użyliśmy Python Performance Benchmark Suite (http://pyperformance.readthedocs.io/) , który znany jest z tego, ze koncentruje się na rzeczywistych analizach, nie syntetycznym porównaniu z użyciem całych aplikacji tam, gdzie to możliwe.

Użyliśmy naszego ulubionego systemu operacyjnego Ubuntu Core 16 (https://www.ubuntu.com/core). Co najważniejsze wspierał on obie płyty, które zdecydowaliśmy się przetestować. Zainstalowaliśmy Ubuntu Core na karcie SD i użyliśmy „klasycznego” środowiska by przeprowadzić test.

Pyperformance instalujemy za pomocą następującej komendy:

pip3 install pyperformance

Odpaliliśmy go z użyciem:

echo pyperformance run –python=python3 -o result.json | nohup sudo classic &

Użyliśmy tej podchwytliwej komendy po to, by test mógł działać w tle bez aktywnego połączenia ssh, ponieważ trwa to dłużej I chcielismy uniknąc problemów związanych z utraconym połączeniem ssh (test zatrzymałby się).

Wyniki widoczne są na grafice poniżej:

Wyniki są zaskakujące. DragonBorad jest dwa razy szybszy niż szybszy(!) Raspberry Pi 3! Teraz rozumiemy, dlaczego zaobserwowaliśmy wzrost wydajności. Oczywiście oficjalne jądro używa architektury armhf (v7), która jest 32-bitowa, podczas gdy DragonBorad posiada jądro amr64(v8), które jest 64-bitowe. Skoro Python używa arytmetyki 64-bitowej w wielu przypadkach, prawdopodobnie wyjaśnia to różnicę.

By potwierdzić tę różnicę z użyciem natywnego kodu odpaliliśmy test ‘sysbench’. Sysbench zawiera wiele testów, które chcieliśmy przeprowadzić (cpu, memory, thread, mutex). Takie testy są bardziej syntetyczne, ale porównajmy kalkulację mocy płyt. Wyniki wyglądają następująco:

Test Raspberry Pi3 DragonBoard 410c
cpu
sysbench –test=cpu run
318.1229s 12.6500s
memory
sysbench –test=memory –memory-total-size=2G run
7.5322s 3.0507s
threads
sysbench –test=threads run
23.1469s 9.1600s
mutex
sysbench –test=mutex run
0.0283s 0.0141s

Z analizy CPU wynika, że Raspberry Pi 3 jest 25 razy szybsze. Dzieje się tak dlatego, ze test CPU używa 64-bitowych kalkulacji. I to scenariusz, w któeym 64-bitowy system operacyjny ma naprawdę ogromną przewagę. Inne testy są mniej więcej 2 razy szybsze, podobnie jak pybenchmark. Nawet test wątków nie powinien być zaburzony przez 64-bitowy rdzeń.

Oczywiście zawsze istnieją możliwości rozwoju projektu z użyciem C lub czystego Assemblera dla osiągnięcia większej wydajności. Ale zazwyczaj rozwój jest droższy niż cena sprzętu. Użycie narzędzi takich jak Python jest zdecydowanie tańsze i bardziej efektywne oraz pozwala na rozwinięcie lepszego jakościowo produktu i szybsze dostarczenie go na rynek. Spadek wydajności spowodowany przez Python możemy łatwo obejść wykorzystując lepszy sprzęt. Mamy nadzieję, że Raspberry Pi będzie oficjalnie działać na systemie 64-bitowym. Na teraz to DragonBoard 410c jest idealnym wyborem w kontekście rozwoju aplikacji opartych o Python.