Archive for August 2012

Raspberry Pi versus Cray XT 6m Supercomputer – MD5-Hash-Kollisionen berechnen mit dem Raspberry Pi


Der Raspberry Pi ist ein kleines Board mit ARM11- Prozessor (ein ARM1176JZF-S um genau zu sein, mit ARMv6 Befehlssatz), welches über einen 100 Mbit Ethernet-Port, HDMI, Analog Video, GPIO-Pins, SPI, I²C, UART und zwei USB-Schnittstellen verfügt. Der Prozessor ist übrigens identisch mit dem Im Apple iPhone der ersten Generation verbauten CPU.

Das kommt in der Verpackung, eine SD-Karte ist nicht dabei.

Das kommt in der Verpackung, eine SD-Karte ist nicht dabei.

Das Besondere ist der Preis, der Raspberry Pi kostet nur 25-30$ und ist für den Einsatz in Schulen vorgesehen. In England ist er inklusive T-Shirt und Versand nach Deutschland für 34 € zu haben. Aufgrund seiner niedrigen Leistungsaufnahme von nur 3,5 Watt (lüfterlos und ohne Kühlkörper), seiner geringen Größe (etwa Kreditkartenformat, aber durch die Konnektoren ca. 1,5 cm hoch) und des günstigen Preises eignet sich der Raspberry Pi für energiesparende Bastelprojekte wie etwa ein NAS, einen kleiner Router oder ein eigenes kleines Mediacenter. Als Massenspeicher fungiert eine SD-Karte, die beispielsweise mit einer angepassten Linux-Version, wie z.B. Raspbian “wheezy”, einem modifizierten Debian, bespielt werden kann. Die Distribution bringt ein modernes Linux mit Desktop und einem schlanken und modernen Webkit-basierten Browser (Midori) mit. Obwohl der Raspberry nicht für so einen Anwendungsfall vorgesehen ist, kann man doch recht ordentlich damit im Internet surfen!

T-Shirt inklusive, der Raspberry Pi

T-Shirt inklusive, der Raspberry Pi

Die Verwendung der angepassten Distribution ist sehr zu empfehlen, da diese Version im Gegensatz zu den Debian-ARM Versionen die Hardware Floating-Point-Unterstützung des ARM11 auch wirklich ausnutzen. Bei der Übersetzung von Source-Paketen sollte auch immer die GCC Compiler-Optionen

-mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard

angegeben werden, damit wirklich die Hardware-Floating-Point Unterstützung aktiviert wird. Ansonsten werden die Floating-Point-Operationen per Library in Software durchgeführt, was naturgemäß sehr viel länger dauert (Faktor 10). Die Ubuntu-Arm Distribution ist übrigens nicht für den Raspberry Pi geeignet, da sie als Mindestanforderung den ARMv7-Befehlssatz (ab ARM Cortex A8) voraussetzt.

Kleine ARM-Kunde und Tablet-Tipps

ARM-Prozessoren, bzw. von den Herstellern in System on  a Chip (SoC)  integrierte ARM-Kerne, treiben übrigens so ziemlich alle aktuellen Android Smartphones und Tablets an. Auch die Apple-A5 SoC im iPhone und iPad verwenden ARM-Prozessorkerne. Übrigens sind neben dem Hauptprozessor für die Benutzerschnittstelle (auf dem das Android oder das  iOS läuft) auch fast immer mehrere zusätzliche ARM-Kerne in einem Mobiltelefon verbaut. Leistungsschwächere, aber energiesparende “kleinere” ARM-Varianten werden beispielsweise für den Kommunikationsprozessor (das “Radio”) des Telefons eingesetzt, welcher die GSM und UMTS-Kommunikation abwickelt. Auch in fast allen Bluetooth-Chipsätzen und  GPS-Chipsätzen steckt jeweils ein weiterer kleiner ARM-Kern. Die Wahrscheinlichkeit ist also sehr hoch, dass in Ihrem Smartphone vier oder mehr ARM-Kerne in Chipsätzen “verbaut” sind.

Die Nummerierung der Befehlssätze ARMvX darf nicht mit der der Bezeichnung der Architektur verwechselt werden, siehe auch http://de.wikipedia.org/wiki/ARM-Architektur. Übrigens findet sich hier eine schöne Zuordnung von ARM-Befehlssatzversionen zu den korrespondierenden ARM-Architekturen und den zugehörigen Handelsnamen der SoC ARM-Implementierungen einiger Hersteller. Diese Aufstellung kann bei der Auswahl eines Android-Tablets in Hinsicht auf zu erwartende CPU-Leistung sehr hilfreich sein. (Unterhalb Cortex A8 [ARMv7] – Finger weg!)  Brauchbare Tablets mit Cortex A8 sind schon für knapp über 100 Euro erhältlich. Eine dem iPad 3 vergleichbare Performance kann aber erst einem Cortex A9 (auch ARMv7) basierten Gerät mit mehreren Kernen abverlangt werden.

Der Desktop der Raspbian “wheezy” Distribution, Midori Webbrowser inklusive

Der Desktop der Raspbian “wheezy” Distribution, Midori Webbrowser inklusive, auf meinem Beamer

MD5-Hash-Kollision

Um die Leistungsfähigkeit der ARM11-Prozessors (AMRv6) auf die Probe zu stellen, habe ich keinen klassischen Benchmark eingesetzt, sondern mir die MD5 Collision Demo von Peter Selinger vorgenommen und die Quellen für den Raspberry Pi kompiliert. Hier bei handelt es sich um einen Algorithmus, der einen Angriff auf einen  MD5 Hashwert vornimmt und eine Kollision erzeugt. Mit so einer Hash-Kollision kann zweites Dokument oder ein zweites Binary erzeugen werden, dass einen identischen MD5 Hash zu einer Originaldatei besitzt. Der Algorithmus startet immer mit einem Zufallswert für die Berechnung einer Hash-Kollision, so dass es immer unterschiedlich lange dauert bis eine Kollision gefunden wird. Startet man den Prozess aber mehrmals auf einer Maschine mit mehreren Kernen, so steigt die Wahrscheinlichkeit recht schnell an ein Ergebnis zu kommen. Der Algorithmus parallelisiert also nicht die selber die Berechnung, sondern profitiert vom abweichenden Zufallsstartwert auf jedem Kern.

PC versus …

Ausprobiert habe ich das zunächst mit meinem single core Atom Netbook (2 Stunden 46 Minuten) und dann mit einer 8-Kern-Maschine (zwei Xeon Quad Core Prozessoren), dem Publikumsrechner des ZIM für Mitarbeiter der Hochschule. Diese Maschine benötigte nur 16 Minuten und 6 Sekunden um eine Kollision zu finden. Wohlgemerkt einer der Kerne hatte eine Kollision gefunden, der letzte Kern benötigte fast drei Stunden. (siehe Abbildung)

Das top-Kommando (1 drücken um alle Kerne zu sehen)

Das top-Kommando (“1″ drücken um alle Kerne zu sehen, 8 Kerne ausgelastet)

… CRAY versus ….

Den Cray XT 6m Supercomputer der Universität Duisburg-Essen konnte ich bereits im Juni 2010 mit der gleichen „Rechenaufgabe“ testen. Ich hatte seinerzeit allerdings nur 300 der insgesamt 4128 Kerne zur Verfügung, einer der Kerne fand nach 56 Sekunden eine Hash-Kollision. Auf der Cray kann ein Job automatisiert auf allen zur Verfügung stehenden Kernen gestartet werden.

Cray Supercomputer

Cray Supercomputer der Universität Duisburg Essen

… Raspberry PI

Und der gute Raspberry Pi? Ein Testlauf brachte nach 30 Stunden und 15 Minuten eine Hash-Kollision zum Vorschein. Wie beschrieben, es ist kein wirklicher Benchmark, es kann einfach Pech gewesen sein, dass es solange gedauert hat. Zwei weitere Durchgänge endeten nach 19Stunden 10 Minuten und 29 Stunden und 28 Minuten. Aber wie sieht denn nun die Energiebilanz des Raspberrys im Vergleich mit der Cray aus?

Preiswerter und leiser als ein Cray Supercomputer bei etwa gleicher Rechenleistung pro Energieverbrauch

Preiswerter und leiser aber deutlich langsamer ;-) als ein Cray Supercomputer bei etwa gleichem Energieverbrauch bezogen auf die Rechenleistung

Die zwei Cray-Schränke an der Universität Duisburg-Essen benötigen je 40kW und die erzeugte Wärme per Klimatisierung abzuführen wird jeweils die gleiche Leistung benötigt. Also insgesamt 160 KW bzw. umgerechnet auf den im Experiment genutzten Anteil der 300 Kerne ca. 11.6 KW. Der Energieverbrauch in 56 Sekunden beträgt dann 0,18 KWh. Der Raspberry Pi nimmt eine Leistung von 0,0035 KW auf und verbraucht daher in 30,25 Stunden 0,106 KWh. Wenn man die Klimatisierung nicht berücksichtigen würde, ergäbe sich überraschenderweise ein etwa ähnlicher Energieverbrauch pro Rechenleistung!