SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Jak wspomniałem w poprzednim wpisie, ODROID-XU3 będzie głównie służył mi jako domowy HTPC, zastępując tym samym wysłużony już model X2.

Na pierwszy ogień poszedł "goły" Android 4.4.4 oznaczony wewnętrznym numerem Alpha 1.3. Instalacja na karcie eMMC przebiegła bezboleśnie. Standardowo wystarczyło wgrać obraz systemu na kartę pamięci za pomoca polecenia dd. Na stronie producenta dostępna jest również wersja przeznaczona do pracy na karcie SD, a także instalator z karty SD na eMMC. Ta ostatnia opcja jest na tyle ciekawa, że nie musimy martwić się o złącze karty eMMC podczas czętego jej wpinania i wypinania.

Domyślnie ustawioną rozdzielczością jest 720p, którą możemy zmienić na 1080p za pomocą narzędzia ODROID Utility. Zanim to jednak nastąpi, przeprowadźmy kilka testów.

ODROID-XU3 720p / 1080p vs. HTC One M8

Na początek program AnTuTu. W rozdzielczości 720p ODROID-XU3 uzyskuje zawrotny wynik 49.765 punktów, natomiast w rozdzielczości 1080p wynik spada zaledwie do 46.213 punktów. Poprzednie generacje XU oraz X2 w rozdzielczości 720p osiągały wynik kolejno 30.054 oraz 19.574 punktów. Mój HTC One M8 uzyskał tym czasem wynik 42.519 punktów.

Porównanie z innymi urządzeniami

AnTuTu 720p 1080p
ODROID-XU3 49.765 46.213
ODROID-XU 30.054 --
ODROID-X2 19.574 --
HTC One M8 -- 42.519

Nie obyło się również porównania wyników 3D Mark Ice Strom. ODROID-XU3 deklasuje na tym polu swoich starszych braci, ustępując jedynie HTC One M8. Jest to dla mnie sporą niespodzianką, biorąc pod uwagę poprzednie wyniki w programie AnTuTu.

Dla rozdzielczości 720p

Dla rozdzielczości 1080p

Porównanie z innymi urządzeniami

3DMark 720p Normal 720p Unlimited 720p Extreme 1080p Normal 1080p Unlimited 1080p Extreme
ODROID-XU3  Maxed out! 15.237  10.485 Maxed out!  15.073 10.044
ODROID-XU  Maxed out! --   7.363  -- -- --
ODROID-X2  2.612 --  1.947  --  -- --
HTC One M8  -- -- -- Maxed out! 19.272 Maxed out!

Na koniec sprawdziłem jeszcze jak wygląda sytuacja w androidowej wersji PCMark. Wyniki są porównywalne dla obu rozdzielczości. Wyniosły one kolejno 3.979 punktów dla rozdzielczości 720p oraz 3.898 punktów dla rozdzielczości 1080p. HTC One M8 w rozdzielczości 1080p wypadł trochę słabiej, osiągając wynik o włos mniejszy 3.726 punktów.

Dla rozdzielczości 720p

Dla rozdzielczości 1080p

CyanogenMod 11

Jeśli najdzie nas ochota, możemy pokusić się o instalację CyanogenMod 11, który daje znacznie większe możliwości konfiguracji i personalizacji Androida.

KitKat 4.4.4 PocketRocket

PocketRocket to rozwiązanie dla osób, które nie mają czasu na instalację niezbędnego oprogramowania. Znajdziemy w niej preinstalowane proramy, takie jak: Firefox, XBMC 13.1, ES File Explorer, Ultra Explorer, Terminal Emulator, MX Player , tTorrent, serię gier Angry Birds i wiele innych.

XBMC radzi sobie bardzo dobrze nawet z materiałem wideo z bitrate, wynoszącym 120MBps - to pozwala mi sądzić, że ODROID-X2 właśnie przeszedł na emeryturę. Osobiście jednak zdecyduję się na instalację czystego Androida z samodzielnym doborem aplikacji.

Tym samym muszę stwierdzić, że ODROID-XU3 to obecnie najlepszy sprzęt do pracy z Androidem z jakim zdarzyło mi się spotkać. Może mu zagrozić jedynie posiadany prze zemnie Jetson TK1, o ile Android spisze się na nim również wyjątkowo dobrze.

Reklama

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.