2024. április 18., csütörtök

Gyorskeresés

RISC-V kalandok #1 (Mango Pi MQ-PRO)

Írta: | Kulcsszavak: risc-v . mango-pi . mq-pro

[ ÚJ BEJEGYZÉS ]

Ez a blog bejegyzés nem termék bemutató és nem RISC-V ismertető, ezért nem készül belőle cikk. Amolyan kiírom a gondolataimat bejegyzés és feljegyzések számomra későbbre.

Bevezető

2023-ra végre megérkeztek a megfizethető, linux-os RISC-V számítógépek (SBC).

Mi az a RISC-V?

Dióhéjban egy olyan CPU architektúra (ISA), ami nyílt és ingyenes. Részletesebb leírás: [link]. Az architektúra moduláris felépítésű, opcionális bővítéseket tartalmazhat. Részletesen itt: [link].

Miért érdekes ez számomra?

A munkám (szoftvermérnök) során mindig fontosnak tartottam, hogy hatékony kódot írjak. Szerintem ezt a szokást akkor vettem fel, amikor az első munkahelyemen korai Intel Atomokra kellett szoftvert írni, ahol ezt kikényszerítette a limitált hardware. Most se jobb a helyzet, jelenleg ARM-re kell ugyanezt tennem.
X86 és ARM mellett meg szeretném ismerni a RISC-V-t is, mert ki tudja, lehet pár év múlva erre is fejlesztenem kell. Különösen az SIMD része érdekel. X86-on használtam az SSEx-n, ARM-on pedig a NEON utasításokat.
Továbbá kíváncsi vagyok arra,
- hogy áll a Linux és egyéb nyílt forráskódú fejlesztői eszközök portolása RISC-V-re. Pl. CMake, Qt, Python, NodeJS, OpenCV, FFmpeg és Docker
- tudok-e már cross-compile-olni rá C++-os kódot
- hogy működik a RISC-V vektorműveletei (SIMD). A bővítések között szerepel “pakolt-SIMD utasítások”, ami még nyitott, így valószínűleg az ezt támogató CPU-ra még várni kell

Ebben a bejegyzésben nem fogok mindnek utánajárni.
Megjegyzés Dockerhez: két image-t találtam eddig, aminek van riscv64 portja. Egyik az Ubuntu a másik pedig a hello-word.

Ehhez kellett egy RISC-V-os gép, ami Linux-t futtat és kevesebb kerül, mint $100.

Az első ilyen gép, amit találtam a Mano Pi MQ-PRO. Az 1GB-os modell ára volt $34, szállítással együtt $40.

Hardware

- Raspberry Pi Zero méretű
- Allwinner D1: 64 bit, 1 mag, 1 GHz, CPU: XuanTie C906, ISA: RV64IMAFDCVU (forrás, jelentése)
- 2D és videó encode/decode gyorsítás van, 3D nincs
- 1GB RAM (van 512MB-os verzió is)
- MicroSD kártya
- Integrált WiFi + BT (RTL8723ds)
- Mini HDMI
- USB Type-C táp és host


Egyik oldala. Kép forrása: [link]


Másik oldala. Kép forrása: [link]

A csomag még tartalmazott
- 40-es pin header-t, színkódos
- kb. 6 centis külső antennát
- két kicsi marketing matricát

Software

A weboldalon két oprendszer image érhető el: Tina-Linux és az ArmBian, de használható hozzá az Ubuntu Server is [link]. Ebben a bejegyzésben az ArmBian-t és az Ubuntu Server-t nézem meg.
Megjegyzés
- ArmBian és az Ubuntu is a Nezha dev board-ra készült. Szintén az Allwinner D1-re épül, de az ára most $150, ami nekem túl magas.
- Várhatóan az Allwinner D1 támogatása javulni fog, mert bele fog kerülni Linux kernelbe. Forrás: [link]

ArmBian

Verzió: Armbian_22.08.0-trunk_Nezha_jammy_current_5.19.0_xfce_desktop.img.xz
GUI-val (Xfce) rendelkező Linux, módosított 5.19.0 kernellel. Az ArmBian ezen verziója az Ubuntu 22.04.1-re épül. WiFi működik, a 10 éve vett USB-s ethernet működik. A rendszert apt-vel frissítettem.


ArmBian, háttérkép utólag kikapcsolva

CPU info

elrood@nezha:~$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0

elrood@nezha:~$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdc
mmu : sv39
uarch : thead,c906

- Byte order little endian, szerencsére ilyen az összes x86 és az ARM magok döntő többsége.
- Az ISA viszont különbözik attól, amit az egyik forrásnál találtam. Itt nem szerepel a V (vektorműveletek) és az U (user mode).

Nézzük sorra, hogy bevezőben felsoroltak közül mi működik.

CMake

OpenCV 4.7.0 projektet sikeresen legenerálta, amit fordítani is elkezdett.

Qt

Repo-ból lejön és működik. Qt Creator indításkor elhasal, de a Qt Designer működik. Nekem ez elég bizonyíték, hogy a Qt működik. Akit érdekel a qtdiag kimenete, itt megtalálja: [link].


Qt Designer

Python

elrood@nezha:~$ python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.pow(3, 5)
243.0
>>> import platform
>>> platform.processor()
'riscv64'
>>> exit()

Működik, viszont gond lehet az olyan python csomagokkal, amik natív binárist tartalmaznak. Például ki akartam próbálni a PyQt5-t, amit próbált lefordítani, de nem sikerült.

NodeJS

Repo-ban nincs benne, elkezdtem lefordítani a kis boardon a 18-as verziót, de 7 óra után elfogyott a memória és a swap :) . Pont ehhez kéne a cross-compile vagy qemu, de ezeknek még nem néztem utána. Szerintem működik, mert a források között van riscv64-es file-ok és github-on is találtam rá utalást: [link].

OpenCV

Nem ástam bele nagyon, de repo-ban ott van, a letöltött forráskód generátora felismeri. A toolchain is ott van a források között: [link]. Ezek alapján szerintem biztosan lefordul és működik.

FFmpeg

Működik, de a lejátszás olyan 5 másodpercenként 1 frame. Valószínűleg még semmilyen CPU szintű optimizáció nincs a kódban, csak a generikus.

Docker

Repo-ban nincs benne és a docker telepítő scriptje nem működik.
N: Skipping acquisition of configured file 'main/binary-riscv64/Packages', as repository 'http://deb.volian.org/volian scar InRelease' doesn't support architecture 'riscv64'
N: Skipping acquisition of configured file 'stable/binary-riscv64/Packages', as repository 'https://download.docker.com/linux/ubuntu jammy InRelease' doesn't support architecture 'riscv64'

OpenTTD

Nem szerepelt a listában, de ha már ott van a repo-ban, kipróbálom. Indításkor jelezte, hogy nincs GPU gyorsítás. Ezen a felbontáson, kevés járművel játszható.

Értékelés

Több mint 12 óra használat után se tapasztaltam semmilyen instabilitást. Ehhez az oprendszerhez kötelező az 1GB RAM. Még kevés is. A CPU lassú. A fejlesztés érdemes cross-compile-lal vagy QEMU-val megoldani.

Ubuntu Server 22.10

Verzió: ubuntu-22.10-preinstalled-server-riscv64+nezha.img.xz
Indítás után az apt nem akart működni. Szerencsére egy manuális időbeállítás megoldotta a problémát. Korábban írt USB-s ethernet működik, a WiFi alapból nem, de működésre bírható: [link]. Kernel: 5.19.0-1005-allwinner.

CPU info

ubuntu@ubuntu:~$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0

ubuntu@ubuntu:~$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdc
mmu : sv39
uarch : thead,c906

Az ISA ugyanaz, mint ArmBian alatt. Hiányzik két kiterjesztés: U és V.

Lássuk, hogy ami nem ment ArmBian-on, azok hogy muzsikálnak Ubuntu-n.

Docker

Repo-ban ott a docker.io, települ és működik.
ubuntu@ubuntu:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
3caa6dc69d0b: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

NodeJS

Repo-ban ott van, települ és működik.
ubuntu@ubuntu:~$ node --version
v18.7.0

Értékelés

Egy problémám volt, hogy nagyon lassan bootol a gép. Lemértem, mire képet ad a HDMI-n, az 1,5 perc és mire megjelenik a login a képernyőn, az 2,5 perc.
Ettül függetlenül az ubuntu-t már tekinthetjük teljesnek. A továbbiakban szerintem ezzel fogom folytatni.

Utószó

Őszintén szólva meglepődtem, hogy software-esen hogy áll a RISC-V. A GUI-s alkalmazásokról ez nem mondható el. Mentségére, normális GPU-val rendelkező, megfizethető board még nem jött ki. Talán ezen fog javítani a VisionFive 2.
A GUI-val rendelkező programokhoz amúgy is alkalmatlan ez a gép a lassú CPU és a kevés RAM miatt. Ismerkedésnek viszont tökéletes, mert stabil és azok a technológiák, amik nekem kellenek, azok működnek.

Hozzászólások

(#1) nakos1212


nakos1212
senior tag

Nézd meg a clang-et, ha projekteket akarsz más architektúrákra fordítgatni, ugyanis a clang qemu és emuláció nélkül képes nem-x86 targetre fordítani, sokat könnyít. [link]
A forráskód szerint támogat is egy adag risc-v target-et: [link]

(#2) hcl


hcl
félisten
LOGOUT blog

Amúgy az ilyen kis cumók sokszor kijelző nélkül vannak használva, parancssorral meg sokkal kevesebb erőforrás fogy. Érdekes eszköz amúgy, írhatnál arról is, mi az, amiben hatékonyabb, mint egy x86, mármint feladatok terén.

Mutogatni való hater díszpinty

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.