Pierwsze podejście do ODROID-XU3
ODROID-XU3 to obecnie najmocniejszy model oferowany przez koreańską firmę Hardkernel. Uzbrojony jest w 8 rdzeniowy procesor Exynos5422 z czterema rdzeniami Cortex A15 oraz dodatkowymi czterema Cortex A7. W przypadku rdzeni A15 zastosowano taktowanie zegarem 2GHz, natomiast A7 taktowane są zegarem 1.4GHz. Najciekawszą jednak technologią (oprócz big.LITTLE) jest tutaj HMP (Heterogeneous Multi-Processing), która umożliwia wykorzystywanie wszystkich ośmiu rdzeni w dowolnej konfiguracji, zwiększając wydajność systemu nawet o 20%. Nie ma tutaj więc sztywnego przydziału rdzeni na mniej lub bardziej wymagające zadania.
Hardkernel wypuścił również odchudzoną wersję ODRDOID-XU3 Lite, która posiada wolniejsze zegary taktowania 1.8GHz dla rdzeni A15 oraz 1.3GHz dla rdzeni A7. Została również pozbawiona portu DisplayPort i układów mierzączych pobór energii przez kluczowe podsystemy, takie jak procesor, pamięć i GPU.
Ubuntu 14.04.1 bez większych problemów
Na chwilę obecną jest dostępna dystrybucja Ubuntu 14.04.1 z jądrem 3.10.61. Nie zauważyłem żadnych większych problemów w jego działaniu. Bez obaw możemy dokonać aktualizacji systemu, nie martwiąc się o losy kolejnego restartu.
Wraz z Ubuntu 14.04.1, dostajemy dwa specjalne narzędzia: EnergyMonitor, który pozwala nam obserwować i mierzyć zapotrzebowanie na moc poszczególnych układów oraz ODROID Utility, za pomocą którego w łatwy sposób pobierzemy nowszą wersję jądra i ustawimy niektóre opcje.
Kilka testów na początek
W przypadku kompresji i dekompresji pliku BZIP oraz kompresji pliku WAV do MP3, ODROID-XU3 wypada odrobinę gorzej niż NVIDIA Jetson TK1. Różnice są praktycznie niezauważalne.
Sytuacja zmienią się w przypadku pomiaru prędkości nośnika eMMC. Prędkość odczytu ODROID-XU3 oscyluje w granicach 96MB/s, a w przypadku Jetsona wartość ta wynosi 79MB/s. Tak spora różnica wynika z zastosowanego nośnika eMMC, gdzie Hardkernel zastosował kości pamięci w wersji 5.0, natomiast NVIDIA w wersji 4.41.
Sytuacja odwraca się jednak przy Timing cached reads, gdzie Jetson pokazuje przewagę w zastosowanej pamięci DDR3L taktowanej zegarem 933MHz:
Zobaczmy zatem, jak wypadną wyniki testu OpenSSL Speed AES. Najpierw dla jednego rdzenia, a potem wszystkich dostępnych:
Niestety nawet dostępność HMP w ODROID-XU3, nie pozwoliło przegonić wyników jakie osiągnął Jetson TK1. Na koniec zobaczmy wyniki programu sysbench:
OpenGL / OpenGL ES 3.0 ?
Na tym polu ciężko porównać wyniki, ponieważ Jetson TK1 ma problem z programem glmark2-es2, a z kolei ODROID-XU3 nie obsługuje OpenGL. Wyniki zatem będą prawie na pewno nie do porównania. Ale, co tam.
Standardowo nie uda się uzyskać dobrych wyników, ponieważ sterowniki nie pozwalają przekroczyć 70 fps, uzyskując tym samym ogólny wynik 65 punktów.
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 63 FrameTime: 15.873 ms
[build] use-vbo=true: FPS: 72 FrameTime: 13.889 ms
[texture] texture-filter=nearest: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=linear: FPS: 71 FrameTime: 14.085 ms
[texture] texture-filter=mipmap: FPS: 71 FrameTime: 14.085 ms
[shading] shading=gouraud: FPS: 71 FrameTime: 14.085 ms
[shading] shading=blinn-phong-inf: FPS: 71 FrameTime: 14.085 ms
[shading] shading=phong: FPS: 71 FrameTime: 14.085 ms
[bump] bump-render=high-poly: FPS: 70 FrameTime: 14.286 ms
[bump] bump-render=normals: FPS: 72 FrameTime: 13.889 ms
[bump] bump-render=height: FPS: 72 FrameTime: 13.889 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 71 FrameTime: 14.085 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 71 FrameTime: 14.085 ms
[pulsar] light=false:quads=5:texture=false: FPS: 71 FrameTime: 14.085 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 62 FrameTime: 16.129 ms
[desktop] effect=shadow:windows=4: FPS: 67 FrameTime: 14.925 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 34 FrameTime: 29.412 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 42 FrameTime: 23.810 ms
[ideas] speed=duration: FPS: 55 FrameTime: 18.182 ms
[jellyfish] <default>: FPS: 71 FrameTime: 14.085 ms
[terrain] <default>: FPS: 30 FrameTime: 33.333 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 71 FrameTime: 14.085 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 70 FrameTime: 14.286 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 71 FrameTime: 14.085 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 72 FrameTime: 13.889 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 70 FrameTime: 14.286 ms
=======================================================
glmark2 Score: 65
=======================================================
Dopiero pomiar w trybie --off-screen daje miarodajne rezultaty:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-T628
GL_VERSION: OpenGL ES 3.0
=======================================================
[build] use-vbo=false: FPS: 796 FrameTime: 1.256 ms
[build] use-vbo=true: FPS: 926 FrameTime: 1.080 ms
[texture] texture-filter=nearest: FPS: 1009 FrameTime: 0.991 ms
[texture] texture-filter=linear: FPS: 1002 FrameTime: 0.998 ms
[texture] texture-filter=mipmap: FPS: 1018 FrameTime: 0.982 ms
[shading] shading=gouraud: FPS: 720 FrameTime: 1.389 ms
[shading] shading=blinn-phong-inf: FPS: 748 FrameTime: 1.337 ms
[shading] shading=phong: FPS: 675 FrameTime: 1.481 ms
[bump] bump-render=high-poly: FPS: 408 FrameTime: 2.451 ms
[bump] bump-render=normals: FPS: 1077 FrameTime: 0.929 ms
[bump] bump-render=height: FPS: 1001 FrameTime: 0.999 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 767 FrameTime: 1.304 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 261 FrameTime: 3.831 ms
[pulsar] light=false:quads=5:texture=false: FPS: 965 FrameTime: 1.036 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 180 FrameTime: 5.556 ms
[desktop] effect=shadow:windows=4: FPS: 400 FrameTime: 2.500 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 132 FrameTime: 7.576 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 128 FrameTime: 7.812 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 162 FrameTime: 6.173 ms
[ideas] speed=duration: FPS: 229 FrameTime: 4.367 ms
[jellyfish] <default>: FPS: 532 FrameTime: 1.880 ms
[terrain] <default>: FPS: 33 FrameTime: 30.303 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 940 FrameTime: 1.064 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 733 FrameTime: 1.364 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 919 FrameTime: 1.088 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 882 FrameTime: 1.134 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 676 FrameTime: 1.479 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 881 FrameTime: 1.135 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 882 FrameTime: 1.134 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 780 FrameTime: 1.282 ms
=======================================================
glmark2 Score: 662
=======================================================
glmark2 dla OpenGL ES 3.0 zwrócił ogólny wynik 662 punktów. Jak wspomniałem wcześniej, uruchomienie glmark2-es2 na Jetson TK1 kończy się wywrotką programu, ale doskonale za to działa glmark2 dla OpenGL. Zobaczmy jak wyniki będą wyglądać tutaj, po ustawieniu wszystkich rdzeni w tryb performance:
=======================================================
glmark2 2012.08
=======================================================
OpenGL Information
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: GK20A/NullRM/AXI
GL_VERSION: 4.4.0 NVIDIA 21.1
=======================================================
[build] use-vbo=false: FPS: 1739 FrameTime: 0.575 ms
[build] use-vbo=true: FPS: 3660 FrameTime: 0.273 ms
[texture] texture-filter=nearest: FPS: 2436 FrameTime: 0.411 ms
[texture] texture-filter=linear: FPS: 2459 FrameTime: 0.407 ms
[texture] texture-filter=mipmap: FPS: 2538 FrameTime: 0.394 ms
[shading] shading=gouraud: FPS: 1830 FrameTime: 0.546 ms
[shading] shading=blinn-phong-inf: FPS: 1790 FrameTime: 0.559 ms
[shading] shading=phong: FPS: 1764 FrameTime: 0.567 ms
[bump] bump-render=high-poly: FPS: 1595 FrameTime: 0.627 ms
[bump] bump-render=normals: FPS: 3215 FrameTime: 0.311 ms
[bump] bump-render=height: FPS: 3063 FrameTime: 0.326 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 520 FrameTime: 1.923 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 201 FrameTime: 4.975 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1954 FrameTime: 0.512 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 223 FrameTime: 4.484 ms
[desktop] effect=shadow:windows=4: FPS: 409 FrameTime: 2.445 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 322 FrameTime: 3.106 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 299 FrameTime: 3.344 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 449 FrameTime: 2.227 ms
[ideas] speed=duration: FPS: 1106 FrameTime: 0.904 ms
[jellyfish] <default>: FPS: 466 FrameTime: 2.146 ms
[terrain] <default>: FPS: 49 FrameTime: 20.408 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 2166 FrameTime: 0.462 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1839 FrameTime: 0.544 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 2167 FrameTime: 0.461 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 2010 FrameTime: 0.498 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1719 FrameTime: 0.582 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 2012 FrameTime: 0.497 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2010 FrameTime: 0.498 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1941 FrameTime: 0.515 ms
=======================================================
glmark2 Score: 1598
=======================================================
Wynik 1598 (!!) punktów robi wrażenie. Nie zapominajmy jednak, że układ graficzny zastosowany w Jetson TK1 to zupełnie inna bajka.
Wróćmy jednak do nośnika eMMC
Z reguły nie potrafię się przekonać do pomiarów programem hdparm. Dlatego sprawdziłem to jeszcze raz, bardziej naturalną metodą. Oczywiście wiemy już, że zastosowane pamięci eMMC 5.0 w ODROID XU3 przełożą się na lepsze wyniki.
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 12.1435 s, 67.5 MB/s
real 0m13.767s
user 0m0.100s
sys 0m6.300s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 6.6226 s, 124 MB/s
real 0m6.635s
user 0m0.055s
sys 0m2.200s
Oraz dla Jetson TK1:
time sh -c "dd if=/dev/zero of=/home/file bs=4k count=200000 && sync"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 17.9846 s, 45.5 MB/s
real 0m19.686s
user 0m0.216s
sys 0m6.588s
sync ; sh -c 'echo 3 > /proc/sys/vm/drop_caches'
time sh -c "dd if=/home/file of=/dev/zero bs=4k count=200000"
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 10.2501 s, 79.9 MB/s
real 0m10.352s
user 0m0.125s
sys 0m2.101s
Prędkości odczytu 124MB/s vs. 79MB/s oraz zapisu 67MB/s vs.45 MB/s. Widać tutaj doskonale różnicę pomiędzy eMMC 5.0 i eMMC 4.41.
W przypadku Jetsona nie jest to jednak kluczowy problem, ponieważ możemy podłączyć dysk twardy bezpośrednio pod kontroler SATA, gdzie dla dysku HDD uzyskujemy wynik 88 MB/s podczas zapisu oraz 107 MB/s podczas odczytu. Oczwiście podłączenie dysku SSD to już inna historia :)
Podsumowanie
ODROID-XU3 nabyłem głównie pod kątem HTPC do pokoju dziennego, aby zastąpił wysłużonego już ODROID-X2. Pomimo tego, że Linux działa tutaj zaskakująco dobrze, to na chwilę obecną nie uraczymy niestety XBMC / Kodi z obsługą akceleracji sprzętowej. Tutaj zdecydowanie lepiej sprawdzi się Jetson TK1 z pełną obsługą OpenGL, który poradzi sobie nawet z bitrate 120Mbps oraz materiałem 4K. Za jakiś czas pewnie się to zmieni, ale póki co ODROID-y zawsze pozostaną dla mnie sprzętem szytym pod Androida - chyba, że myślimy o zastosowaniach serwerowych... no dobra, mini-serwerowych :)
Jak wypadnie Android na ODROID-XU3? O tym dowiecie się z kolejnego odcinka.
Wpisy na podobny temat
- 25 Jul 2014 » Jetson TK1 i drobne testy wydajnościowe Hardware
- 05 Aug 2013 » Nowy ODROID-XU z procesorem Exynos5 Octa Hardware
- 08 Sep 2013 » ODROID-X2 zamiast tradycyjnego komputera? Hardware Dystrybucje Android
Komentarze
Od jakiegoś czasu bawię się już XU3 i wydaje mi się, że jest to niemal doskonała platforma na HTPC i nie tylko. Możesz mi napisać, czy u ciebie pod Linux entylator regulatnie załącza się na parę sekund przy praktycznie braku obciążenia, czy może u mnie jest jakiś problem z osadzeniem radiatora?
Pozdrawiam
Tomasz (www.jarlath.net)
Kurczę... nie zwróciłem uwagi :) a właśnie wgrywam andka. Sprawdzę to jutro :)
Mam w pracy XU3.
Po aktualizacji "wkładki" z internetu znika skalowanie częstotliwości zegara procesora. Ze wszystkich polityk (w tym poprzednio używanej \'ondemand\') została tylko na stałe wbita \'performance\', która daje ten niemiły efekt uboczny.
Są dwa rozwiązania - albo przywrócić kernel do oryginalnego, albo na sztywno obniżyć częstotliwość procesora. Ja zrobiłem to drugie.
Według postów na forach, krok Hardkernela jest podyktowany tym, że niezwykle trudno było zrobić \'ondemand\' w środowisku heterogenicznym. Co jest o tyle dziwne, że w oryginalnym kernelu działa całkiem dobrze.
Dzięi za info. Nie drążyłem jeszcze tematu, a zobaczywszy ten post postanowiłem się zapytać jak jest u Was. W takim bądź razie spróbuję podgrać "wkład" z ubuntu. Aktualnie mam zainstalowanego Debiana i myślałem, że tam coś nakręciłem podczas budowy.
nvidia jak widac zarzadzila totalnie.
reszta to niestety strata kasy.
Czy ja wiem? Wolę XU3 od K1