Am Dienstag wurde endlich mein Raspberry Pi geliefert. Nach etwas herumspielen mit dem Debian Image sowie dessen vorkonfigurierter Oberfläche (welche wirklich gut läuft) und dem Betrieb am AnyLoader von getDigital.de (Solar, umweltfreundlich is der RPI auch noch
), habe ich dann doch ArchLinux auf die Speicherkarte gepackt. CPU auf 900MHz und GPU auf 350MHz getaktet, dazu die 224/32MB RAM-Konfiguration und das Board ist für den Preis echt unschlagbar.
Die Hardware
CPU
- ARM1176JZF-S von ARM (Spezifikationen)
- 700 MHz Standardtakt (“800MHz to 1GHz+”, laut ARM)
# cat /proc/cpuinfo Processor : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 Features : swp half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2708 Revision : 0002 Serial : 000000002f5cb167
GPU
Dual Core VideoCore IV von Broadcom. Kann 1080p Videos im h.264 High Profil flüssig aufnehmen und wiedergeben. Wiedergabe erfolgt ruckelfrei über HDMI.
RAM in der Standardkonfiguration
Es sind 256MB SDRAM direkt auf das Board gelötet, daher lässt er sich nicht erweitern. Es gibt allerdings verschiedene Konfigurationen, die den RAM unterschiedlich an System und GPU verteilen. Dazu aber später mehr.
# free -m
total used free shared buffers cached
Mem: 122 28 93 0 4 13
-/+ buffers/cache: 10 111
Swap: 0 0 0
Ethernet
Entgegen den meisten Geräten hat der Raspberry Pi Ethernet nicht onboard, stattdessen wird auf eine USB 2.0 Ethernet-Lösung gesetzt . Auszug aus “dmesg”:
smsc95xx 1-1.1:1.0: eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, 08:00:28:XX:XX:XX
Benchmarks
Für die hier aufgelisteten Benchmarks habe ich das offizielle ArchLinux Image verwendet, es wurde lediglich mit “pacman -Syu” auf den neuesten Stand gebracht. Während der Tests lief der Raspberry Pi auf der Standardtaktrate (700MHz) in der Standardkonfiguration des RAMs (128/128MB). Benchmarks des Festspeichers werde ich keine machen, da das Resultat stark von der verwendeten Speicherkarte abhängt.
Linpack
# wget -O linpack.c http://www.netlib.org/benchmark/linpackc.new
# cc -O3 -o linpack linpack.c -lm -mfloat-abi=softfp
# ./linpack
Enter array size (q to quit) [200]: 200
Memory required: 315K.
LINPACK benchmark, Double precision.
Machine precision: 15 digits.
Array size 200 X 200.
Average rolled and unrolled performance:
Reps Time(s) DGEFA DGESL OVERHEAD KFLOPS
----------------------------------------------------
16 0.61 91.80% 1.64% 6.56% 38549.708
32 1.21 89.26% 4.13% 6.61% 38890.855
64 2.42 88.02% 3.31% 8.68% 39770.739
128 4.85 89.69% 2.89% 7.42% 39150.705
256 9.69 89.99% 3.10% 6.91% 38977.088
512 19.38 89.32% 3.04% 7.64% 39281.937
OpenSSL
# openssl version
# openssl speed
OpenSSL 1.0.1 14 Mar 2012
built on: Sun Apr 1 17:06:35 UTC 2012
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -march=armv5te -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DOPENSSL_NO_TLS1_2_CLIENT -DTERMIO -O3 -Wall -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md2 462.51k 1010.75k 1436.32k 1616.97k 1673.78k
mdc2 724.44k 925.38k 1006.05k 1037.61k 1045.09k
md4 2552.64k 9138.41k 26377.78k 50294.05k 68331.08k
md5 1640.95k 5873.86k 17687.64k 35945.12k 51416.37k
hmac(md5) 2718.45k 9136.56k 24456.50k 42530.36k 53664.40k
sha1 2158.36k 7045.91k 16619.67k 25310.49k 30021.91k
rmd160 1359.48k 4121.32k 9892.91k 15496.42k 19324.93k
rc4 29689.67k 33699.93k 34876.39k 35181.71k 35250.09k
des cbc 6119.24k 6462.92k 6561.68k 6600.55k 6602.75k
des ede3 2303.75k 2387.22k 2417.49k 2424.26k 2427.66k
idea cbc 7151.03k 7622.78k 7744.85k 7751.78k 7783.76k
seed cbc 7710.70k 8828.95k 9127.38k 9214.30k 9201.71k
rc2 cbc 5821.58k 6132.31k 6190.18k 6210.34k 6210.68k
rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00
blowfish cbc 11482.96k 12710.59k 12996.98k 13087.13k 13009.22k
cast cbc 10709.67k 11779.39k 12027.58k 12101.57k 11958.69k
aes-128 cbc 13272.70k 15320.06k 15934.29k 16043.12k 16016.58k
aes-192 cbc 11697.62k 13215.15k 13300.57k 13795.76k 13812.09k
aes-256 cbc 10397.46k 11657.08k 12069.03k 12125.38k 12143.76k
camellia-128 cbc 8928.91k 10476.25k 10961.07k 11050.35k 11017.02k
camellia-192 cbc 7765.12k 8446.91k 8648.19k 8664.54k 8636.86k
camellia-256 cbc 7782.38k 8429.33k 8622.35k 8701.61k 8646.51k
sha256 3612.39k 8360.06k 14590.47k 17985.66k 19361.42k
sha512 1079.65k 4308.16k 6163.22k 8416.87k 9427.60k
whirlpool 374.45k 716.86k 1164.84k 1409.45k 1502.32k
aes-128 ige 12301.46k 14808.19k 15613.61k 15770.28k 14998.71k
aes-192 ige 10826.10k 12864.70k 13459.05k 13628.73k 13033.72k
aes-256 ige 9883.01k 11444.18k 11800.32k 11969.23k 11539.56k
ghash 15694.00k 17321.67k 17875.46k 17945.86k 17946.20k
sign verify sign/s verify/s
rsa 512 bits 0.002196s 0.000227s 455.3 4410.9
rsa 1024 bits 0.011324s 0.000652s 88.3 1532.6
rsa 2048 bits 0.074044s 0.002314s 13.5 432.2
rsa 4096 bits 0.542632s 0.008773s 1.8 114.0
sign verify sign/s verify/s
dsa 512 bits 0.002191s 0.002307s 456.4 433.4
dsa 1024 bits 0.006285s 0.007178s 159.1 139.3
dsa 2048 bits 0.022267s 0.026120s 44.9 38.3
Die Kreiszahl (Pi) auf 4000 Nachkommastellen berechnen
# time echo "scale=4000; a(1)*4" | bc -l real 2m21.740s user 2m21.640s sys 0m0.030s
Tipps
RAM Aufteilung anpassen
In /boot (bzw auf der ersten Partition der Speicherkarte) liegen verschiedene .elf Dateien. Je nachdem welche ihr in start.elf umbenennt, wird der RAM für System und GPU entsprechend aufgeteilt.
arm128_start.elf
GPU: 128MB
System: 128MB
arm192_start.elf
GPU: 64MB
System: 192MB
arm224_start.elf
GPU: 32MB
System: 224MB
Taktrate von CPU und GPU anpassen
Standardmäßig taktet der Raspberry Pi mit 700MHz, laut ARM schafft er bis zu 1GHz. Um ihn also etwas hochzutakten legt die Datei /boot/config.txt an und fügt
arm_freq=800
ein. Dadurch würde der Raspberry Pi auf 800MHz getaktet. Zum Thema Übertakten empfehle ich diesen Beitrag.
Wollt ihr zusätzlich noch die GPU hochtakten, geht das mit der Zeile
gpu_freq=300
Standardmäßig taktet sie mit 250MHz und 300MHz sollte noch in Ordnung sein. Die GPU meines Raspberry Pi taktet ohne Probleme auf 350MHz.
L2-Cache aktivieren
Um den l2cache zu aktivieren öffnet (oder legt sie zuerst an) die /boot/config.txt (/boot entspricht der ersten Partition der Speicherkarte) und fügt
enable_l2cache=1
in eine leere Zeile ein. Wenn ihr viel über die GPU abwickelt (Filme, etc), solltet ihr den L2-Cache deaktiviert lassen, da CPU und GPU sich sonst gegenseitig aus dem Cache schmeißen und die Performance darunter leiden würde.
Noch Fragen? Her damit! Werde versuchen, alle zu beantworten.


Sonntag, 22. April 2012 um 10:36 pm Uhr
Das mit dem Level 2 Cache ist etwas missverständlich. Der ist grundsätzlich vorhanden und aktiviert, gehört aber zur GPU. Was man machen kann ist die Nutzung auch für den ARM zu erlauben, was mittels des config.txt-Paramters UND passendem Kernel geht. Diesen gibt es afaik derzeit nur im neuesten Debian-Image für den Pi.
Richtig ist, dass je nach Anwendung die Performance leiden kann. Wer den Pi aufgabenspezifisch einsetzt sollte bei grafikintensiveren Geschichten den L2-Cache für die CPU deaktiviert lassen. Wer den Pi aber als Server o.ä. einsetzt, kann ihn aktivieren und dürfte davon etwas mehr Performance bekommen. Noch schneller gehts, wenn man die GPU (zu der der Cache gehört) höher taktet, da der Cache da unmittelbar von profitiert und den RAM kann man ggf. auch leicht übertakten.
Je nachdem wie weit man das treiben will, muss man ggf. die Spannungen für ARM, GPU, RAM erhöhen, was über die config.txt in 0,025V-Schritten möglich ist. Allerdings verfügt der Broadcom-Chip über einmalig setzbare Config-Bits die dann gesetzt werden. Wer die Spannung hochsetzt hat dann keine Gewährleistung mehr.