/dev/blog von TamCore

made with Linux.

Raspberry Pi
Raspberry Pi

Der Raspberry Pi: die Hardware, Benchmarks, Tipps

| 1 Kommentar

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 :D), 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.

Autor: Philipp

Linuxer seit dem 14. März 2009 und Android-Fanboy seit 5. Juli 2010. Etwas kompliziert, schwäbisch und pessimistisch. Auch zu finden bei Twitter, und Facebook.

Ein Kommentar

  1. 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.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.