FOX Board G20

Für die Nutzung in Robotik-Experimenten war ich einige Zeit auf der Suche nach einem Starter-Kit als Kontrollplatine. Das System sollte rechenstark sein, wichtige Standardschnittstellen wie USB und Ethernet unterstützen, mit Linux laufen und mehrere, frei nutzbare Ein- und Ausgänge besitzen. Mit dem FOX Board G20 habe ich jetzt ein solches System gefunden.

Trotz des modularen Aufbaus aus dem Netus G20 CPU-Modul und einer Basisplatine mit Schnittstellen kann man das FOX Board G20 als Single Board Computer (SBC) auffassen. Single Board Computer sind Computersysteme, bei welchen alle notwendigen elektronischen Komponenten auf einer Leiterplatte zusammengefasst sind. Sie werden zumeist für Mess-, Steuer- oder Regelungszwecke genutzt. Der Sandwich-Aufbau des FOX Board ermöglicht den Neuentwurf der Basisplatine für spezifische Anwendungen und bietet damit eine erhöhte Flexibilität.

foxg20

Das Netus G20 CPU-Modul beinhaltet eine ARM9-basierte CPU, genauer den Mikrocontroller AT91SAM9G20 von Atmel mit einer Taktfrequenz von 400Mhz. Mit 64 MByte RAM und 8 MByte Flashspeicher ist das CPU-Modul gut ausgestattet. Bei Abmessungen von 40×40mm für das CPU-Modul und 66×72 mm für die Trägerplatine ist das Board sehr kompakt. Die Möglichkeit microSD-Karten direkt einzustecken erlaubt die flexible Verwendung in vielen Anwendungen. Für die Nutzung in Robotik-Projekten spricht die Tatsache, dass auf der Trägerplatine viele Signale über nachbestückbare Stiftleisten direkt zugänglich sind. Bei Nutzung der Standard-Software sind von den 80 Pins dann 28 vollständig frei als Ein- oder Ausgang (GPIO) nutzbar, die restlichen Pins stellen Schnittstellenfunktionen wie SPI oder I2C zur Verfügung. Natürlich kann das Board aber auch anders konfiguriert werden.

Die Softwareunterstützung für das System ist gut, der verwendete Mikrocontroller wird vom Linux-Kernel standardmäßig unterstützt. Als Laufzeitsystem sind auf Debian und Gentoo basierende Images für die microSD-Karte verfügbar. Mit 150 Euro für Basisplatine und CPU-Modul ist es auch gerade so noch erschwinglich, das komplette Starterkit mit ein paar Zusatzteilen wie Netzteil, Gehäuse und microSD-Karte und ähnlichen Dingen ist für ungefähr 240 Euro erhältlich. Ein besonderes Plus ist die aktuelle Dokumentation im Wiki von ACME Systems, welche die wichtigsten Fragen zum Start mit dem Modul klärt.

Termine im Eurobot-Wettbewerb 2010

Mit dem Jahreswechsel stehen nun einige wichtige Termine für den Eurobot-Wettbewerb fest. Die Anmeldung zum Wettbewerb ist noch bis zum 31. Januar 2010 möglich. Anmelden können sich Teams von mindestens zwei Personen, die alle höchstens 30 Jahre alt sind. Dabei sind sowohl Studenten als auch Nicht-Studenten zugelassen. Jedes Team kann von einer Person unterstützt werden die älter als 30 Jahre ist.

Der nationale Wettbewerb für Deutschland findet dann vom 7.-8. Mai 2010 in Leipzig statt. Dabei wird der erste Tag zur Anreise und Vorbereitungen dienen, der eigentliche Wettbewerb findet dann am zweiten Tag statt. Ein weiteres, ausführlicheres Programm wird sicherlich noch verfügbar gemacht werden.

Der internationale Endausscheid findet vom 26.-30. Mai 2010 in Rapperswil in der Schweiz statt.

Als kleinen Vorgeschmack gibt es noch ein gut gemachtes Promo-Video des Dresdner Teams TURAG aus dem letzten Jahr.

Speicherverbrauch unter Linux messen

Bei der Entwicklung oder Leistungsbewertung von Software ist die Bestimmung des Speicherverbrauchs eines Prozesses eine häufige Aufgabe. Durch die Nutzung von dynamisch geladenen Bibliotheken und die gemeinsame Nutzung von Speicherseiten durch mehrere Prozesse ist die genaue Bestimmung der verbrauchten Ressourcen eine Frage der Zählweise. Bei der Verwendung von bekannten Linux-Werkzeugen wie ps, htop oder top wird zumeist die Gesamtmenge aller durch einen Prozess verbrauchten virtuellen Speicherseiten gezählt. Die Bestimmung ist unabhängig davon, ob die zu Grunde liegenden physikalischen Speicherbereiche eventuell durch mehrere Prozesse gleichzeitig genutzt werden. Die gemessene Speichermenge wird dabei als Resident Set Size (RSS) bezeichnet. Durch die mehrfache Zählung wird die Auslegung der Speicherausstattung einer Maschine erschwert.

Das von Matt Mackall geschriebene Programm smem ist ein Werkzeug, das verschiedene Berichte über die Speichernutzung auf einem Linux-System erstellen kann. Im Gegensatz zu den bereits genannten Werkzeugen kann smem die Proportional Set Size (PSS) bestimmen. Die PSS ist eine weitere Messgröße für den Speicherverbrauch eines Programms, bei welcher die durch Bibliotheken genutzte Speichermenge gleichmäßig auf die nutzenden Applikationen aufgeteilt wird. Wird eine Bibliothek durch drei Programme genutzt, wird jeweils nur ein Drittel des durch die Bibliothek verbrauchten Speichers für die PSS der nutzenden Programme einkalkuliert. Neben der Bestimmung der PSS ist zusätzlich die Bestimmung der Unique Set Size (USS) möglich. Die USS eines Prozesses ist die Speichermenge, die nur durch diesen Prozess genutzt wird. Wird der entsprechende Prozess entfernt, wird auf dem System diese Speichermenge frei.
smem-by-pss-small
smem ist in Python geschrieben und benötigt mindestens Version 2.6.27 des Linux-Kernels, da erst dieser die notwendige Datei pagemap mit der Zuordnung von virtuellem zu physikalischem Speicher für jeden Prozess in /proc enthält. Neben der Auflistung von RSS, PSS, USS und verbrauchtem Swap-Speicher für Prozesse und Nutzer mit verschiedenen Filterkriterien beherrscht smem auch die Ausgabe von Torten- und Balkengrafiken als PNG, SVG, JPG und EPS. Das Programm ist allerdings im Moment noch nicht in allen Distributionen enthalten.

Speicheroptimierung mit pahole

Bei der Nutzung der Programmiersprache C ist der Softwareentwickler neben den gängigen Optimierungen durch den Compiler zum Großteil selbst für die Optimierung des Laufzeitverhaltens eines Programms und des Speicherbedarfs der Datenstrukturen zuständig. Im folgenden Artikel wird zur Unterstützung bei der Speicheroptimierung das Linux-Tool pahole vorgestellt.

Werden bei der Programmierung in C zusammengesetzten Datentypen wie struct verwendet ist es möglich, dass aus Gründen des Alignments zwischen den Teilelementen der Struktur nicht genutzte Füllbytes eingefügt werden. Zurückzuführen ist das Einfügen dieser Füllbytes auf die Rechnerarchitektur und die Art und Weise wie ein Prozessor auf den Hauptspeicher zugreift. Wenn ein Prozessor Daten aus dem Hauptspeicher liest, dann erfolgt der Zugriff mit der Verarbeitungsbreite des Prozessors. Ist der Prozessor ein 32-bit Prozessor, dann werden in einem Schritt 4 Byte gelesen. Diese Annahme gilt für alle weiteren Beispiele.

Ein Datenelement ist dann richtig im Speicher angeordnet, wenn seine Speicheradresse einem ganzzahligen Vielfachen seiner Größe entspricht. Für diesen Fall kann der Prozessor das Datenelement optimal einlesen (ohne Überlappung und notwendige Verschiebung) und das Datenelement wird als aligned bezeichnet. Werden nun Elemente mit unterschiedlichen Speichergrößen wie unsigned short (2 Byte), unsigned char (1 Byte) oder unsigned int (4 Byte) in einem Verbunddatentyp gemischt verwendet ist es möglich, dass Füllbytes eingefügt werden um das Alignment zu gewährleisten.

Zur weiteren Erklärung soll nun folgende Datenstruktur betrachtet werden:

struct test_data {
        unsigned short alpha;
        unsigned char beta;
        unsigned int gamma;
        unsigned char delta;
};

In dieser Datenstruktur wird zwischen den Elementen beta und gamma ein Füllbyte eingefügt um gamma entsprechend den Alignment-Anforderungen auszurichten. Das Füllbyte ist notwendig, da alpha und beta zusammen 3 Byte, also beispielhaft die Adressen 0 bis 2 belegenen und gamma als Datentyp mit 4 Byte Speicherbedarf auf Adresse 4 ausgerichtet wird. Die Adresse 3 bleibt dann ungenutzt und geht als verfügbarer Speicher verloren. Diese Löcher in den Strukturen sind nicht optimal und können teilweise durch Umordnen der Elemente entfernt werden. Das manuelle Berechnen dieser Löcher ist zwar möglich, durch geeignete Werkzeuge allerdings auch automatisierbar.

Das Linux-Werkzeug pahole (Poke-a-Hole) ist ein Hilfsmittel um Datenstrukturen zu analysieren, Alignement-Löcher zu identifizieren und Umordnungsvorschläge anzugeben. Ziel ist die Reduzierung von Strukturgrößen im Speicher und dadurch die Reduzierung des Speicherbedarfs von Programmen während der Laufzeit. Ein wichtiger Effekt ist außerdem die bessere Ausnutzung von Caches und dadurch eine Beschleunigung des Programms bei Speicheroperationen. Durch die Entfernung der Füllbytes entsteht eine geringere Belastung des Speicherbusses.

Da pahole kein Tool zur statischen Quellcodeanalyse ist, sondern den mit Debug-Informationen ausgestatteten Object-Code untersucht, sind neben dem Build-Werkzeug cmake zum Kompilieren noch weitere Bibliotheken zur Unterstützung des DWARF2-Debug-Formates notwendig. Die Installation erfolgt unter Ubuntu mit:

sudo aptitude install libdw-dev libelf-dev cmake

Der Programmcode von pahole ist aufgrund des Ursprungs in der Linux-Kernel-Entwicklergemeinde im Kernel-Git-Repository verfügbar, man erhält den Quellcode mit folgendem Befehl:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/acme/pahole.git

Unter Ubuntu 9.10 Karmic Koala ist unter Umständen wie in diesem Bugreport beschrieben vor dem Kompilieren noch ein Patch notwendig. Dabei ist der find_library Ausdruck für EBL_LIBRARY in cmake/modules/FindDWARF.cmake durch set (EBL_LIBRARY -ldw) zu ersetzen.

Das Kompilieren und die Installation erfolgt dann im Verzeichnis pahole mit den Befehlen:

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install

Das zu untersuchende Programm hello oder Object-File hello.o ist dann mit dem Compiler im Debug-Modus, also gcc -g zu kompilieren. Der Befehl

pahole hello

beziehungsweise

pahole hello.o

gibt dann einen Bericht in folgender Art für alle verwendeten, nicht-anonymen Strukturen aus:

struct test_data {
	short unsigned int         alpha;        /*     0     2 */
	unsigned char              beta;         /*     2     1 */
 
	/* XXX 1 byte hole, try to pack */
 
	unsigned int               gamma;        /*     4     4 */
	unsigned char              delta;        /*     8     1 */
 
	/* size: 12, cachelines: 1, members: 4 */
	/* sum members: 8, holes: 1, sum holes: 1 */
	/* padding: 3 */
	/* last cacheline: 12 bytes */
};

Der hinzugefügte Kommentar enthält für jedes Element die Adresse in Bezug auf den Anfang der Struktur und die Größe des Elementes. Zusätzlich werden Löcher in den Strukturen und die Gesamtgröße der Struktur angegeben.

Neben der Identifikation der ungenutzten Speicherbereiche kann mit dem Befehl

pahole -RC test_data hello

auch ein Hinweis für die Reorganisation der Elemente ausgegeben werden. Im vorhandenen Beispiel wäre dies die Anordnung des Elementes delta nach beta und vor gamma um das Loch von einem Byte zu füllen.

Abschließend bleibt anzumerken, dass die Relevanz dieser Optimierungen auf modernen 64-bit Architekturen höher ist, da durch die größere Verarbeitungsbreite Löcher in den Strukturen häufiger auftreten und diese auch größer sind.

Spielen wie damals – Polyplay

Eine meiner ersten Begegnungen mit Computern ist schon lange her. Schon vor der Wende gab es in Ostdeutschland Videospielautomaten. Um genau zu sein, es gab genau einen bestimmten Typ. Polyplay, der einzige Videospieleautomat der DDR wurde von 1986 bis 1989 in Karl-Marx-Stadt (heute Chemnitz) entwickelt und gefertigt. Mit immerhin acht Spielen und zeitgemäßer Grafik begeisterten rund 2000 Geräte in Ferienheimen und öffentlichen Einrichtungen die Menschen im Osten. Besonders interessant waren ein Pac-Man-Klon mit dem Namen Hase und Wolf, ein Autorennen und ein Schießbuden-Spiel.

polyplay

Unter polyplay.de lassen sich jetzt auch diese Spiele wieder im Browser spielen. Zusätzlich gibt es auf dieser Seite Hintergrundinformationen zum Polyplay, zu seinem technischen Aufbau und umfangreiche Spielbeschreibungen.

Eurobot 2010 in Leipzig

Eine interessante Möglichkeit Wissen in den Bereichen Elektrotechnik und Informatik nicht nur in der Theorie zu erwerben, sondern auch anzuwenden, ist der Bau und die Programmierung von autonomen Robotern. Besonders interessant wird es, wenn diese Tätigkeit im Team oder sogar im gegenseitigen Wettstreit mehrerer Teams durchgeführt wird. Aus diesem Grund erfreuen sich Robotik-Wettbewerbe mit technisch anspruchsvollen Aufgaben bei Studenten und kreativen Bastlern einiger Beliebtheit.

Eine dieser Veranstaltungen, der internationale Roboterwettbewerb Eurobot, findet seit 1998 statt. Bei jährlich wechselnden Aufgabenstellungen treten zwei gegnerische Roboter auf einem Spielfeld von 3 x 2,1 Metern an und müssen mit vorhandenen Spielelementen wie Bällen, Holzbalken oder Pucks innerhalb von 90 Sekunden bestimmte Spielziele, meist das Bewegen von Spielelementen in einen bestimmten Zielbereich, so gut wie möglich ohne menschliche Steuerung meistern.

Auch in diesem Studienjahr findet unter dem Motto “Feed the World” der Eurobot-Wettbewerb 2010 statt. Die Ermittlung des Gesamtsiegers erfolgt in mehreren nationalen und schließlich einem internationalen Wettbewerb. Auf deutscher Ebene sind beispielhaft Hochschul-Teams aus Dresden, Leipzig, Aachen und Heidelberg vertreten. Diese konnten auch auf internationaler Ebene in den letzten Jahren gute Ergebnisse erzielen. Bei der Eurobot 2010 wird der nationale Wettbewerb für Deutschland in Leipzig an der HTWK stattfinden. Der internationale Ausscheid findet dann in Rapperswil in der Schweiz statt.

Neugestaltung

Im letzten Jahr hat sich einiges getan. Nach dem Abschluss meines Studiums ist mein Lebensmittelpunkt mittlerweile in Leipzig, wo ich als Software-Ingenieur für ein Unternehmen im Bereich Internet-Traffic-Management und -Monitoring arbeite.

Und auch an dieser Webseite geht die Zeit nicht spurlos vorüber. Auf technisch neuen Füßen, einem Virtual Server von Host Europe, wurde ein Großteil der Inhalte neu organisiert. Das Layout der Webseite wurde aufgefrischt und es wurden neue graphische und inhaltliche Elemente eingebunden. Die Umgestaltung hat als Ziel, die Inhalte hier auf der Seite besser zugänglich zu machen, mehr Übersicht für den Nutzer zu schaffen und alles zeitgemäß visuell umzusetzen. Über ein paar Kommentare zum neuen Design würde ich mich freuen!

Ganz nebenbei existiert jetzt auch ein Twitter-Account, in dem ich alles was zu kurz für einen Blogeintrag ist festhalte. Neue Follower können sich mir gerne anschließen.

Diplomarbeit

Seit heute schreibe ich offiziell an meiner Diplomarbeit. In den nächsten vier Monaten werde ich das Thema “Entwicklung einer Prüfsoftware auf einer embedded i.MX31-Plattform mit Betriebssystem Linux” bearbeiten. Es geht darum, für ein Embedded-Board mit i.MX31-Mikrocontroller und sehr vielen unterschiedlichen Schnittstellen (CAN, Ethernet, USB als Host und als Client, mehrere Displayschnittstellen) und Onboard-Peripherie (verschiedene Flashspeicher, RTC und produktspezifische Schaltkreise) eine Software zu schreiben, die alle Komponenten ansteuert und auf Funktionalität testet. Das Ganze passiert in der Nähe von Ravensburg, deswegen wohne ich auch seit sechs Wochen zeitweise in Weingarten.

Mathebuch

Unter http://mathebuch.wordpress.com/ findet man ein nettes Blog zu einem Buchprojekt, das sich mit Mathematik auseinandersetzt. Es geht zwar etwas mehr um die Populärwissenschaft Mathematik als um den Forschungsgegenstand, allerdings gibt es nicht sonderlich viele Weblogs, die sich mit Mathematik in deutscher Sprache auseinandersetzen. Wer Gegenbeispiele hat, möge mir in den Kommentaren widersprechen.

Ringvorlesung Geschichte der Mathematik

Im unlängst begonnen Sommersemester 2007 findet an der Technischen Universität Dresden eine Ringvorlesung zum Thema Geschichte der Mathematik statt. Jeweils dienstags um 16.40 sprechen unterschiedliche Sprecher im Rahmen des Studium Generale über die Entwicklung der Mathematik. Los geht es heute mit der Geschichte der Graphentheorie.