В июле 2020 года был запущен ODROID-N2 +, но мы только недавно получили Amlogic S922X Rev C SBC, и Hardkernel хочет, чтобы мы протестировали их последний образ Ubuntu 21.10 с драйвером графического процессора Panfrost с открытым исходным кодом.
Распаковка комплекта ODROID-N2 +
Начнем с проверки комплекта, который мы получили от корейского производителя SBC.
В комплект поставки входит одноплатный компьютер ODROID-N2 +, оснащенный флэш-модулем eMMC емкостью 32 ГБ, блоком питания 12 В/2 А с адаптером для вилки европейского стандарта, комплектом вентилятора 80 мм и считывателем USB 3.0 для eMMC.
ODROID-N2 + теперь доступен только с 4 ГБ ОЗУ, так как старый ODROID-N2 с 2 ГБ устарел, и мы получаем четыре порта USB 3.0, видеовыход HDMI 2.0, сеть Gigabit Ethernet и 40-контактный разъем GPIO с охлаждающим плату радиатором большего размера, прикрепленным к нижней части платы.
Установка вентилятора, первая загрузка и системная информация
Как мы увидим ниже, вентилятор не всегда необходим, но поскольку он у нас есть, мы установили его поверх радиатора, используя 4 из 5 имеющихся прокладок.
Мы немного приподнимаем плату, чтобы обеспечить лучший воздушный поток для сверхтихого радиатора, который поставлялся с платой. Поскольку Ubuntu 21.10 предустановлен на флэш-памяти eMMC, поставляемой с платой, мы смогли просто подключить Ethernet, HDMI, USB-клавиатуру и мышь, жесткий диск USB 3.0 и источник питания 12 В/2 А, чтобы начать работу.
Плата большую часть времени полностью бесшумна, поскольку радиатор запускается только в том случае, если температура поднимается выше 65° C, а когда он запускался под нагрузкой, мы не слышали его, и даже проверяли действительно ли вентилятор крутится. Вернемся к первой загрузке.
Плата работает нормально, а вертикальные линии только из-за нашего сломанного телевизора LG. В приглашении журнала отображается пользователь Hardkernel, и мы можем войти в систему с паролем odroid, но когда мы будем использовать SSH позже, мы обнаружим, что нам нужно использовать odroid/odroid, поскольку Hardkernel – это просто имя для пользователя odroid….
Давайте проверим некоторую системную информацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
odroid@ubuntu:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=21.10 DISTRIB_CODENAME=impish DISTRIB_DESCRIPTION="Ubuntu 21.10" odroid@ubuntu:~$ uname -a Linux ubuntu 5.14.0-odroid-arm64 #1 SMP PREEMPT Ubuntu 5.14.13-202110221853~impish (2021-10-22) aarch64 aarch64 aarch64 GNU/Linux odroid@ubuntu:~$ free -mh total used free shared buff/cache available Mem: 3.6Gi 628Mi 2.3Gi 137Mi 668Mi 2.8Gi Swap: 1.3Gi 0B 1.3Gi odroid@ubuntu:~$ df -mh Filesystem Size Used Avail Use% Mounted on tmpfs 370M 1.7M 369M 1% /run /dev/mmcblk0p2 29G 5.6G 22G 21% / tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 220M 37M 166M 19% /boot tmpfs 370M 88K 370M 1% /run/user/1000 /dev/sda2 241G 85G 144G 38% /media/odroid/USB3_EXT4 /dev/sda1 245G 194G 51G 80% /media/odroid/USB3_NTFS /dev/sda4 200G 175G 24G 89% /media/odroid/USB3_BTRFS /dev/sda3 245G 163G 82G 67% /media/odroid/USB3_EXFAT odroid@ubuntu:~$ |
Ubuntu 21.10, как и ожидалось, устанавливается на флэш-память eMMC емкостью 32 ГБ (29 ГБ rootfs), а система поставляется с 4 ГБ оперативной памяти, 3,6 ГБ из которых доступны для Linux.
Мы можем получить более подробную информацию о inxi, включая подтверждение использование драйвера графического процессора с открытым исходным кодом Panfrost в образе Ubuntu 21.10:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
odroid@ubuntu:~$ inxi -Fc0 System: Host: ubuntu Kernel: 5.14.0-odroid-arm64 aarch64 bits: 64 Console: tty pts/1 Distro: Ubuntu 21.10 (Impish Indri) Machine: Type: ARM Device System: Hardkernel ODROID-N2Plus details: N/A CPU: Info: 6-Core (2-Die) model: N/A variant-1: cortex-a73 variant-2: cortex-a53 bits: 64 type: MCP MCM Speed: 2208 MHz min/max: 1000/2016:2400 MHz Core speeds (MHz): 1: 2016 2: 2016 3: 2208 4: 2208 5: 2208 6: 2208 Graphics: Device-1: meson-g12a-vpu driver: meson_drm v: kernel Device-2: meson-g12a-mali driver: panfrost v: kernel Device-3: meson-g12a-dw-hdmi driver: meson_dw_hdmi v: kernel Display: server: X.org 1.20.13 driver: loaded: meson_dw_hdmi note: n/a (using device driver) tty: 203x55 Message: Advanced graphics data unavailable in console. Try -G --display Audio: Device-1: meson-g12a-dw-hdmi driver: meson_dw_hdmi Device-2: axg-sound-card driver: axg_sound_card Sound Server-1: ALSA v: k5.14.0-odroid-arm64 running: yes Sound Server-2: PulseAudio v: 15.0 running: yes Sound Server-3: PipeWire v: 0.3.32 running: yes Network: Device-1: meson-g12a-dwmac driver: meson8b_dwmac IF: eth0 state: up speed: 1000 Mbps duplex: full mac: 00:1e:06:42:cb:88 Drives: Local Storage: total: 960.63 GiB used: 620.82 GiB (64.6%) ID-1: /dev/mmcblk0 vendor: Samsung model: BJTD4R size: 29.12 GiB ID-2: /dev/sda type: USB vendor: Seagate model: 1 Expansion size: 931.51 GiB Partition: ID-1: / size: 28.3 GiB used: 5.57 GiB (19.7%) fs: ext4 dev: /dev/mmcblk0p2 ID-2: /boot size: 219.4 MiB used: 36.7 MiB (16.7%) fs: ext4 dev: /dev/mmcblk0p1 Swap: ID-1: swap-1 type: file size: 1.34 GiB used: 0 KiB (0.0%) file: /swapfile Sensors: System Temperatures: cpu: 42.6 C mobo: N/A Fan Speeds (RPM): N/A Info: Processes: 256 Uptime: 9m Memory: 3.61 GiB used: 859 MiB (23.2%) Init: systemd runlevel: 5 Shell: Bash inxi: 3.3.06 |
Аудио часть также интересна новым аудио/видео сервером PipeWire, работающим вместе с более традиционными ALSA и PulseAudio.
Контрольные показатели
Давайте проведем на плате несколько тестов без монитора и графики.
Начнем с SBC Bench:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ wget https://raw.githubusercontent.com/ThomasKaiser/sbc-bench/master/sbc-bench.sh $ sudo /bin/bash ./sbc-bench.sh -c WARNING: this tool is meant to run only on Debian Stretch, Buster, Bullseye or Ubuntu Bionic, Focal. When running on other distros results are partially meaningless or can't be collected. Press [ctrl]-[c] to stop or [enter] to continue. sbc-bench v0.8.1 Installing needed tools. This may take some time... Done. Checking cpufreq OPP... Done. Executing tinymembench. This will take a long time... Done. Executing OpenSSL benchmark. This will take 3 minutes... Done. Executing 7-zip benchmark. This will take a long time... Done. Checking cpufreq OPP... Done. Memory performance (big.LITTLE cores measured individually): memcpy: 2256.6 MB/s (0.9%) memset: 7755.6 MB/s memcpy: 4299.9 MB/s memset: 7477.0 MB/s 7-zip total scores (3 consecutive runs): 9800,9774,9802 OpenSSL results (big.LITTLE cores measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 176082.23k 523975.23k 1013665.45k 1359812.61k 1510255.27k 1520052.91k aes-128-cbc 421729.18k 1043425.51k 1584737.54k 1810880.17k 1904719.19k 1911783.42k aes-192-cbc 167821.18k 465602.20k 827600.55k 1048505.69k 1136981.33k 1142565.55k aes-192-cbc 391623.20k 926669.76k 1324086.87k 1521390.93k 1589032.28k 1593972.05k aes-256-cbc 162742.46k 427874.47k 717046.87k 877222.91k 938270.72k 942221.99k aes-256-cbc 378114.54k 847673.83k 1187437.06k 1313454.42k 1363293.53k 1366933.50k Full results uploaded to http://ix.io/3DtN. Please check the log for anomalies (e.g. swapping or throttling happenend) and otherwise share this URL. |
Дросселирования не было обнаружено, и мы не могли слышать вентилятор, но, исходя из заявленных температур, он сработал:
1 2 3 4 5 6 7 8 9 10 11 12 |
System health while running 7-zip multi core benchmark: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 22:26:18: 2400/2016MHz 4.98 9% 0% 8% 0% 0% 0% 48.8°C 22:26:42: 2400/2016MHz 4.97 90% 0% 89% 0% 0% 0% 64.2°C 22:27:02: 2400/2016MHz 4.99 81% 0% 80% 0% 0% 0% 58.2°C 22:27:22: 2400/2016MHz 4.89 91% 0% 90% 0% 0% 0% 60.2°C 22:27:45: 2400/2016MHz 5.34 91% 0% 90% 0% 0% 0% 65.8°C 22:28:05: 2400/2016MHz 5.16 80% 0% 79% 0% 0% 0% 60.1°C 22:28:25: 2400/2016MHz 5.34 89% 0% 87% 0% 0% 0% 58.6°C 22:28:49: 2400/2016MHz 5.67 91% 0% 90% 0% 0% 0% 65.4°C 22:29:09: 2400/2016MHz 5.56 81% 0% 80% 0% 0% 0% 58.9°C |
Несмотря на то, что он не такой громкий, вентилятор нашего ноутбука подавлял шум от вентилятора ODROID-N2 +, поэтому его почти не было слышно. Обратите внимание, что вентилятор запускался только во время более требовательного многопоточного теста 7-zip и большую часть времени не активировался. Тест проводился в помещении с температурой окружающей среды 28 ° C.
Для справки, ODROID-N2 + по-прежнему значительно быстрее, чем Raspberry Pi 4, разогнанный до 2,0 ГГц.
Поскольку поддержка Panfrost является одной из изюминок образа Ubuntu 21.10 для ODROID-N2 +, давайте еще раз проверим, что необходимо включить с помощью glxinfo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Extended renderer info (GLX_MESA_query_renderer): Vendor: Panfrost (0xffffffff) Device: Mali-G52 (Panfrost) (0xffffffff) Version: 21.3.0 Accelerated: yes Video memory: 3698MB Unified memory: yes Preferred profile: core (0x1) Max core profile version: 3.1 Max compat profile version: 3.1 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.1 OpenGL vendor string: Panfrost OpenGL renderer string: Mali-G52 (Panfrost) OpenGL core profile version string: 3.1 Mesa 21.3.0-devel (git-4e7a777093) OpenGL core profile shading language version string: 1.40 OpenGL core profile context flags: (none) |
Тот Panfrost с веткой разработки Mesa 21.3. Вывод от glxinfo довольно длинный, поэтому мы включили его в pastebin .
Теперь время для обычных тестов es2gears и glmark2-es2.
es2gears может легко работать со скоростью 60 кадров в секунду в полноэкранном режиме
glmark2-es2-wayland также отлично работает с драйвером с открытым исходным кодом Panfrost.
Это результат экранного теста:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
$ glmark2-es2-wayland ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Panfrost GL_RENDERER: Mali-G52 (Panfrost) GL_VERSION: OpenGL ES 3.1 Mesa 21.3.0-devel (git-4e7a777093) ======================================================= [build] use-vbo=false: FPS: 687 FrameTime: 1.456 ms [build] use-vbo=true: FPS: 1242 FrameTime: 0.805 ms [texture] texture-filter=nearest: FPS: 1460 FrameTime: 0.685 ms [texture] texture-filter=linear: FPS: 1422 FrameTime: 0.703 ms [texture] texture-filter=mipmap: FPS: 1551 FrameTime: 0.645 ms [shading] shading=gouraud: FPS: 867 FrameTime: 1.153 ms [shading] shading=blinn-phong-inf: FPS: 881 FrameTime: 1.135 ms [shading] shading=phong: FPS: 736 FrameTime: 1.359 ms [shading] shading=cel: FPS: 743 FrameTime: 1.346 ms [bump] bump-render=high-poly: FPS: 402 FrameTime: 2.488 ms [bump] bump-render=normals: FPS: 2033 FrameTime: 0.492 ms [bump] bump-render=height: FPS: 1879 FrameTime: 0.532 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 930 FrameTime: 1.075 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 363 FrameTime: 2.755 ms [pulsar] light=false:quads=5:texture=false: FPS: 1794 FrameTime: 0.557 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 274 FrameTime: 3.650 ms [desktop] effect=shadow:windows=4: FPS: 597 FrameTime: 1.675 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 216 FrameTime: 4.630 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 83 FrameTime: 12.048 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 261 FrameTime: 3.831 ms [ideas] speed=duration: FPS: 487 FrameTime: 2.053 ms [jellyfish] <default>: FPS: 767 FrameTime: 1.304 ms [terrain] <default>: FPS: 36 FrameTime: 27.778 ms [shadow] <default>: FPS: 227 FrameTime: 4.405 ms [refract] <default>: FPS: 71 FrameTime: 14.085 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 1454 FrameTime: 0.688 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 1544 FrameTime: 0.648 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 1537 FrameTime: 0.651 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 1519 FrameTime: 0.658 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 1201 FrameTime: 0.833 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1098 FrameTime: 0.911 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2077 FrameTime: 0.481 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1876 FrameTime: 0.533 ms ======================================================= glmark2 Score: 979 ======================================================= |
Рейтинг glmark2 – 979 баллов. Несколько лет назад мы писали о том же тесте с ODROID-N2 под управлением Ubuntu 18.04 + Gnome3 + Linux 5.0 поверх Wayland с драйверами графического процессора от Arm. Результат – 1119 баллов. Это было два года назад, должно быть, многое изменилось, но похоже, что драйвер с открытым исходным кодом может быть немного медленнее, чем драйвер с закрытым исходным кодом. Мы также видим, что Panfrost использует OpenGL ES 3.1, а драйвер Arm использует OpenGL ES 3.2.
Мы также пробовали тестировать в закадровом режиме:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
glmark2-es2-wayland --off-screen ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Panfrost GL_RENDERER: Mali-G52 (Panfrost) GL_VERSION: OpenGL ES 3.1 Mesa 21.3.0-devel (git-4e7a777093) ======================================================= [build] use-vbo=false: FPS: 532 FrameTime: 1.880 ms [build] use-vbo=true: FPS: 787 FrameTime: 1.271 ms [texture] texture-filter=nearest: FPS: 822 FrameTime: 1.217 ms [texture] texture-filter=linear: FPS: 834 FrameTime: 1.199 ms [texture] texture-filter=mipmap: FPS: 856 FrameTime: 1.168 ms [shading] shading=gouraud: FPS: 635 FrameTime: 1.575 ms [shading] shading=blinn-phong-inf: FPS: 610 FrameTime: 1.639 ms [shading] shading=phong: FPS: 581 FrameTime: 1.721 ms [shading] shading=cel: FPS: 581 FrameTime: 1.721 ms [bump] bump-render=high-poly: FPS: 343 FrameTime: 2.915 ms [bump] bump-render=normals: FPS: 937 FrameTime: 1.067 ms [bump] bump-render=height: FPS: 879 FrameTime: 1.138 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 931 FrameTime: 1.074 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 393 FrameTime: 2.545 ms [pulsar] light=false:quads=5:texture=false: FPS: 887 FrameTime: 1.127 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 312 FrameTime: 3.205 ms [desktop] effect=shadow:windows=4: FPS: 711 FrameTime: 1.406 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 226 FrameTime: 4.425 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 84 FrameTime: 11.905 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 267 FrameTime: 3.745 ms [ideas] speed=duration: FPS: 314 FrameTime: 3.185 ms [jellyfish] <default>: FPS: 584 FrameTime: 1.712 ms [terrain] <default>: FPS: 39 FrameTime: 25.641 ms [shadow] <default>: FPS: 197 FrameTime: 5.076 ms [refract] <default>: FPS: 66 FrameTime: 15.152 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 861 FrameTime: 1.161 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 858 FrameTime: 1.166 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 837 FrameTime: 1.195 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 854 FrameTime: 1.171 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 801 FrameTime: 1.248 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 817 FrameTime: 1.224 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 846 FrameTime: 1.182 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 842 FrameTime: 1.188 ms ======================================================= glmark2 Score: 609 ======================================================= |
Оценка ниже, что не имеет для нас никакого смысла.
Пользовательский опыт с ODROID-N2 +
Мы протестировали некоторые из поддерживаемых функций Ubuntu 21.10 на плате, чтобы увидеть, насколько хорошо она будет работать как настольный компьютер:
- Многозадачность – последовательно запускаем Firefox, Thunderbird, LibreOffice Writer и GIMP из холодной загрузки.
- Просмотр веб-страниц с помощью Firefox и Chromium – открытие нескольких вкладок, Youtube 1080p, 1440p и 2160p (4K), демонстрация WebGL: Aquarium
- Игры с SuperTuxKart и эмулятором Dolphin
Вы можете посмотреть видео ниже.
Таким образом, ODROID-N2 + быстр для платформы Arm. Для идеально плавного воспроизведения видео на YouTube лучше использовать сейчас 720p. Firefox использует декодирование видео H.264 с ограничением до 1080p, в то время как Chromium поддерживает до 4K с использованием VP9, но его нельзя смотреть. Демонстрация аквариума WebGL отображается со скоростью 16-17 кадров в секунду в Firefox с 500 рыбками, но только 3 кадра в секунду в Chromium, вероятно, из-за того, что ускорение графического процессора не поддерживается/не включено. SuperTuxKart в полноэкранном режиме работает нормально, но не так плавно, как хотелось бы. Мы попробовали Super Mario Sunshine на эмуляторе Dolphin, и все работало очень хорошо.
У нас была проблема с белым текстом на белом фоне в эмуляторе Dolphin, и обходным путем было переключиться на темную тему в настройках внешнего вида Ubuntu.
Мы также хотели воспроизвести видео 4K с помощью других программ и утилит командной строки, но нам не удалось установить Kodi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ sudo add-apt-repository ppa:team-xbmc/ppa $ sudo apt install kodi Reading package lists... Done Building dependency tree... Done Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: kodi : Depends: kodi-bin (< 6:19.3+git20211024.1941-49a04cd6a7-0~impish.1~) but it is not installable Recommends: i965-va-driver but it is not installable Recommends: kodi-peripheral-joystick but it is not installable Recommends: kodi-inputstream-adaptive but it is not installable Recommends: kodi-inputstream-rtmp but it is not installable E: Unable to correct problems, you have held broken packages. |
VLC просто показывал черный экран с нормальным воспроизведением звука, а инструменты командной строки, перечисленные в Wiki, а именно kplayer и c2play, не были установлены, и нам не удалось собрать последний из исходников. Мы задали вопрос Hardkernel, но до сих пор не получили ответ, и мы обновим сообщение, если появится решение. Мы видим, что на странице загрузки все еще нет Ubuntu 21.10 для загрузки, поэтому это может означать, что над образом все еще работают. В любом случае, это огромный шаг к тому, когда драйвер графического процессора Arm Mali с открытым исходным кодом можно использовать в современных процессорах.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.