Problém s 5 GHz WiFi při instalaci
Při instalaci nového Raspbianu Buster jsou nově nedostupné 5GHz kanály na WiFi. Nevím, jestli jde o legislativní problém, nebo proč tomu tak je. Každopádně je to popsané již v poznámkách k vydání. Pokud chcete použít 5GHz WiFi, je možné spustit v příkazovém řádku rfkill unblock wifi
, nebo trvale nastavit zemi v sudo raspi-config
(4. Localisation Options → I4. Change WiFi Country).
Podívejte se, jak nové RPi 4B vypadá:
Chyba v jádře?
Pokud jste ve výchozím jádře 4.19.50 v dmesg
objevili podezřelou chybu, která se týká vc4_crtc_atomic_flush
a drm_vblank_put
, tak nepanikařte. Tuto chybu tam mají všichni a vývojáři o ní vědí. Projeví se při spuštění spořiče obrazovky, ale zřejmě to nebude mít na funkci vliv.
[45927.237526] ------------[ cut here ]------------ [45927.237612] WARNING: CPU: 2 PID: 514 at drivers/gpu/drm/vc4/vc4_firmware_kms.c:869 vc4_crtc_atomic_flush+0x98/0x9c [vc4] [45927.237622] Modules linked in: rfcomm bnep hci_uart btbcm serdev bluetooth ecdh_generic fuse 8021q garp stp llc vc4 joydev drm_kms_helper evdev v3d gpu_sched brcmfmac brcmutil snd_soc_core sha256_generic snd_compress snd_pcm_dmaengine syscopyarea drm snd_bcm2835(C) raspberrypi_hwmon drm_panel_orientation_quirks hwmon snd_pcm sysfillrect sysimgblt snd_timer fb_sys_fops cfg80211 snd rfkill bcm2835_codec(C) bcm2835_v4l2(C) v4l2_mem2mem bcm2835_mmal_vchiq(C) videobuf2_dma_contig v4l2_common videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev media argon_mem uio_pdrv_genirq uio fixed i2c_dev ip_tables x_tables ipv6 [45927.238154] CPU: 2 PID: 514 Comm: Xorg Tainted: G C 4.19.50-v7l+ #895 [45927.238162] Hardware name: BCM2835 [45927.238193] [<c0212c80>] (unwind_backtrace) from [<c020d49c>] (show_stack+0x20/0x24) [45927.238215] [<c020d49c>] (show_stack) from [<c0978f60>] (dump_stack+0xd4/0x118) [45927.238236] [<c0978f60>] (dump_stack) from [<c0222270>] (__warn+0x104/0x11c) [45927.238253] [<c0222270>] (__warn) from [<c02223c0>] (warn_slowpath_null+0x50/0x58) [45927.238315] [<c02223c0>] (warn_slowpath_null) from [<bf8f1aa4>] (vc4_crtc_atomic_flush+0x98/0x9c [vc4]) [45927.238469] [<bf8f1aa4>] (vc4_crtc_atomic_flush [vc4]) from [<bf8a57f0>] (drm_atomic_helper_commit_planes+0x1a4/0x298 [drm_kms_helper]) [45927.238605] [<bf8a57f0>] (drm_atomic_helper_commit_planes [drm_kms_helper]) from [<bf8f317c>] (vc4_atomic_complete_commit+0x60/0x33c [vc4]) [45927.238702] [<bf8f317c>] (vc4_atomic_complete_commit [vc4]) from [<bf8f3538>] (vc4_atomic_commit+0xe0/0x194 [vc4]) [45927.238933] [<bf8f3538>] (vc4_atomic_commit [vc4]) from [<bf5ae37c>] (drm_atomic_commit+0x5c/0x60 [drm]) [45927.239290] [<bf5ae37c>] (drm_atomic_commit [drm]) from [<bf5b0474>] (drm_mode_atomic_ioctl+0x98c/0xb78 [drm]) [45927.239632] [<bf5b0474>] (drm_mode_atomic_ioctl [drm]) from [<bf59bbc4>] (drm_ioctl_kernel+0xb4/0xf0 [drm]) [45927.239967] [<bf59bbc4>] (drm_ioctl_kernel [drm]) from [<bf59bff8>] (drm_ioctl+0x230/0x3cc [drm]) [45927.240147] [<bf59bff8>] (drm_ioctl [drm]) from [<c03c3e3c>] (do_vfs_ioctl+0xbc/0x804) [45927.240168] [<c03c3e3c>] (do_vfs_ioctl) from [<c03c45c8>] (ksys_ioctl+0x44/0x6c) [45927.240186] [<c03c45c8>] (ksys_ioctl) from [<c03c4608>] (sys_ioctl+0x18/0x1c) [45927.240203] [<c03c4608>] (sys_ioctl) from [<c0201000>] (ret_fast_syscall+0x0/0x28) [45927.240212] Exception stack(0xce68bfa8 to 0xce68bff0) [45927.240224] bfa0: 01a65358 bec54a78 0000000c c03864bc bec54a78 00000000 [45927.240238] bfc0: 01a65358 bec54a78 c03864bc 00000036 01c751b0 01a179e0 013935b0 0000002d [45927.240247] bfe0: b6d8108c bec54a44 b6d68594 b69f451c [45927.240257] ---[ end trace 8dc5586bf6e05874 ]---
Rpi-update
Ačkoliv příkaz rpi-update
pro aktualizaci jádra a firmware je součástí nového Raspbianu, nově vypíše varování, že je lépe jej nepoužívat a čekat, až se jádro a firmware aktualizuje pomocí apt
.
#############################################################
WARNING: 'rpi-update' updates to pre-releases of the linux kernel tree and Videocore firmware. 'rpi-update' should only be used if there is a specific reason to do so - for example, a request by a Raspberry Pi engineer. DO NOT use 'rpi-update' as part of a regular update process. ##############################################################
Hardwarový generátor náhodných čísel
Již první Raspberry Pi měla hardwarový generátor náhodných čísel, bylo však potřeba několik kroků k jeho zprovoznění. V posledním Raspbianu již není potřeba zavádět modul bcm2708-rng
, je v jádře. Také není potřeba instalovat rng-tools
, jsou již nainstalované a puštěné, vše funguje jak má. Vyzkoušet si to můžeme třebas pomocí dd
.
dmesg | grep rng [ 0.000000] random: get_random_bytes called from start_kernel+0xc0/0x4e8 with crng_init=0 [ 0.321069] iproc-rng200 fe104000.rng: hwrng registered dd if=/dev/random of=/dev/null status=progress
Obsah /dev/random
nám na Raspberry Pi 4 dává 38,3 kB/s. Na Raspberry Pi 3b+ dostaneme 24,4 kB/s. Při použití méně náhodného /dev/urandom
pak máme rychlosti 25,5 MB/s (RPi 4), 38,1 MB/s (RPi 3+).
Watchdog
Opět již první Raspberry Pi mělo watchdog. Toto zařízení má při „zatuhnutí“ počítače problém vyřešit jeho restartem. V novém Raspbianu už nepotřebujeme modul bcm2835-wdt
, opět již je součástí jádra.
dmesg | grep watchdog
[ 0.839399] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
Také se se systemd obejdeme bez balíčku watchdog a /dev/watchdog
může být „krmen“ přímo systemd. Je potřeba odkomentovat v souboru /etc/systemd/system.conf
řádek s RuntimeWatchdogSec=10
. „Krmení“ watchdogu bude probíhat zhruba každých 5 sekund (polovina 10), přitom výchozí a zároveň nejdelší možný HW timeout je 15 sekund.
Zkrátit by šel parametrem jádra bcm2835_wdt.heartbeat=10
, ale asi k tomu není důvod. Pokud máte watchdog aktivní, můžete jej otestovat třeba klasickou fork-bombou :(){ :|:& };:
. Bez použití watchdogu dojde k „zatuhnutí“, s ním k restartu.
K čemu všemu lze RPi použít:
Teplota
Teplota nového Raspberry Pi 4B je trochu vyšší, než tomu bylo u předchozího modelu 3B+. V klidu s běžným centimetrovým hliníkovým chladičem a bez krabičky je teplota u 4B 55°C a u 3B+ 45°C. Limit pro thermal throttling je u 4B 85°C a u 3B+ 60°C, jde ale bezpečně zvýšit na 70°C pomocí temp_soft_limit=70
v /boot/config.txt
. Teplotu a frekvenci CPU lze pěkně a barevně sledovat například pomocí bcmstat.sh, který již Raspberry Pi 4 umí.
Nedávno se objevil nový firmware pro řadič VLI USB3 v Raspberry Pi 4, který zapne ASPM (ano, Raspberry Pi 4 má PCI a na něm právě řadič USB3) a to by mělo nové Raspberry ochladit o 3 až 5 stupňů. Bude ale asi dobré ještě chvíli počkat, protože se objevily problémy s rychlostí sběrnice USB3.
Dekódování HEVC H.265
Raspberry Pi 4 by mělo umět dekódovat hardwarově HEVC H.265, ale zatím neumí. Zřejmě to bude vyřešeno v nějaké další aktualizaci. Nicméně jsem zkoušel, jestli zvládne alespoň softwarově něco zobrazit. Využil jsem pěkné půlminutové vzorky medůz HEVC 1080p o různém datovém toku.
VLC v Raspberry Pi 4 zvládne plynule přehrát 3 a 5 Mb/s, 10 Mb/s už ne. Kupodivu Kodi je na tom lépe a přehraje vše plynule až do 45 Mb/s. V obou případech jsou vytížena všechna jádra a bez přídavného větrání dojde celkem rychle k přehřátí (když je půlminutový klip ve smyčce). Oproti tomu Raspberry Pi 3 nepřehrála plynule ani 3 Mb/s a to ani ve VLC ani v Kodi.
Rychlost SD karty
Zkoušel jsem kartu SanDisk MicroSDXC 64GB Extreme A2 (tvrdí se, že levnější A1 je rychlejší) jak v Raspberry 3 tak v Raspberry 4. Testoval jsem skriptem microsd-benchmarks.sh
a k tomu ještě IOPS při čtení pomocí ioping -R
.
sekvenční čtení MB/s | sekvenční zápis MB/s | náhodné čtení MB/s | náhodný zápis MB/s | náhodné čtení IOPS | |
RPi 4 | 45.2 | 31.6 | 6.12 | 3.32 | 1890 |
RPi 3 | 21.6 | 17.8 | 5.42 | 3.01 | 1340 |
RPi 3 přetaktovaná |
31.5 | 23.3 | 5.97 | 3.04 | 1490 |
Raspberry Pi 4 má skutečně patrně dvakrát rychlejší přístup na SD kartu, to lze na Raspberry Pi 3 a starších kompenzovat „přetaktováním“ SD karty pomocí řádku dtparam=sd_overclock=100
(výchozí hodnota je 50) v /boot/config.txt
. Potom v dmesg | grep mmc
naleznete [ 1.326073] mmc0: overclocking to 100000000Hz
. U Raspberry Pi 4 se mi SD kartu „přetaktovat“ nepodařilo.
Raspberry Pi Foundation otevřela nedávno první obchod:
Linpack
Podle testu high performance linpack (HPL) se tradičně posuzuje rychlost největších počítačů. Raspberry Pi Foundation zveřejnilo také výsledky Linpacku, ale jsou dosti nízké. Teoreticky by Cortex-A53 na 1,2 GHz (1,4 GHz je spíš turbo a ne pro stálou zátěž) v Raspberry Pi 3+ měl dosahovat 10 GFLOPS a Cortex-A72 na 1,5 GHz v Raspberry Pi 4 dokonce 24 GFLOPS v DP. Výsledky Raspberry Pi Foundation však ukazují jen 0,5 GFLOPS a 2,0 GFLOPS v SP s použitím instrukcí NEON.
Tady asi něco nesouhlasí. Zkusíme si HPL zkompilovat sami a test pustit. Nejprve je potřeba knihovna MPI (Message Passing Interface) pro víceprocesorové a vícepočítačové výpočty, vezmeme třeba OpenMPI.
# apt install libopenmpi-dev
Dále budeme potřebovat optimalizovanou knihovnu BLAS (Basic Linear Algebra Subprograms). Na této knihovně závisí rychlost nejvíce. V současnosti je asi nejlepší volbou OpenBLAS. Tato knihovna již v Raspbianu je ( apt install libopenblas-dev
), ale není optimální (7,8 GFLOPS na RPi 4). Zkompilujeme si ji tedy sami. Vezmeme aktuální verzi 0.3.6 a jen pustíme make -j4
, což je ekvivalent make -j4 TARGET=ARMv7
. Bohužel přímo pro ARMv8 a Cortex-A53 případně Cortex-A72 optimalizovat nemůžeme, jelikož to vyžaduje 64bitové prostředí a Raspbian je hlavně kvůli zpětné kompatibilitě s Raspberry Pi 1 stále 32bitový. Po asi 13 minutách by mělo být hotovo. Výsledné knihovny dáme do libovolného adresáře, třeba do ~/openblas
.
# make PREFIX=/home/pi/openblas install
V adresáři~/openblas/lib
odstraníme soubory .so
, pak se nám totiž OpenBLAS přilinkuje do HPL staticky a nám odpadnou problémy s dynamickými knihovnami. Dále si stáhneme hpl-2.3 a uděláme
# LDFLAGS='-L/home/pi/openblas/lib' ./configure # make -j4
Toto již tak dlouho netrvá a v adresáři testing
by se měl objevit spustitelný soubor xhpl
. Ještě je potřeba doplnit vstupní soubor HPL.dat
, ve kterém je popsáno, co budeme řešit. Můžeme vzít například tento HPL.dat. Pro Raspberry Pi 3 je Ns 10000 už na hranici volné paměti RAM a Raspberry může začít swapovat. Proto můžete Ns snížit na 8000 a pro test také snížit video RAM na minimum, tedy 16 MB ( gpu_mem=16
v /boot/config.txt
).
Nyní jen pustíte ./xhpl
a počkáte asi minutu na výsledek. Pokud budete test pouštět vícekrát za sebou, je potřeba dostatečně chladit, aby nedocházelo ke snížení frekvence CPU. Ve výsledku je výkon Raspberry Pi 4 celých 11,0 GFLOPS a Raspberry Pi 3+ dosáhne na 6,7 GFLOPS. Což jsou sice hodnoty na polovině teoretických, ale je možné, že s 64bitovým operačním systémem a s pro ARMv8 optimalizovanou knihovnou OpenBLAS by byly ještě o něco vyšší.
-------------------------------------------------------------------------------- - The matrix A is randomly generated for each test. - The following scaled residual check will be computed: ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N ) - The relative machine precision (eps) is taken to be 1.110223e-16 - Computational tests pass if scaled residuals are less than 16.0 ================================================================================ T/V N NB P Q Time Gflops -------------------------------------------------------------------------------- WR02R2L2 10000 256 1 1 60.71 1.0983e+01 HPL_pdgesv() start time Sun Jun 30 01:06:56 2019 HPL_pdgesv() end time Sun Jun 30 01:07:56 2019 -------------------------------------------------------------------------------- ||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 2.30447375e-03 ...... PASSED ================================================================================