Fieberthermometer

Top als Ausgangsbasis

Im Portfolio verblieben zwei Möglichkeiten. So war bei den Planungen lange angedacht, die Skriptsprache Perl beziehungsweise die im Überfluß zur Verfügung stehenden Perl-Bibliotheken dazu zu nutzen, die Ausgabe der von den Unix-Betriebssystemen angebotenen Systemkommandos wie ps oder uptime entsprechend universell zu filtern und die Meßdaten zur Verfügung zu stellen. Daß dieser Weg letztlich nur noch als die Alternative für ganz heikle Fälle eingestuft wurde, liegt an einem im C-Quelltext frei verfügbaren Tool, welches sich als gute Ausgangsbasis für das weitere Vorgehen entpuppt hat.

Schon seit Jahren steht "Top" (ftp://ftp.groupsys.com) für eine Reihe unterschiedlicher Unix-Derivate im C-Quelltext zur Verfügung. Bei Systemverwaltern hat sich Top längst einen Namen gemacht und verrichtet auf vielen Systemen nützliche Informationsdienste. So gibt das Programm über die aktivsten Prozesse genauso Auskunft wie über die Prozessorauslastung oder die aktuellen Speicher- und Swap-Parameter. Weil die Quellen sehr portabel und modular gestaltet sind - die maschinenabhängigen Codeteile sind in eigenen Dateien untergebracht - ist es nicht sehr schwer, eine für den Einsatz im Dienste der Benchmarks modifizierte Variante zu erstellen, die alle relevanten Parameter bei Bedarf über einen Socket-Port zur Verfügung stellt.

Das Paket ist ein gutes Beispiel dafür, wie man portable Programme erstellen kann. Durch den modularen Aufbau sind die systemabhängigen Unterprogramme in einem eigenen Unterverzeichnis (/machine) in der Datei mit dem Namen m_systemname.c untergebracht. Während der Konfiguration als Vorarbeit zur Kompilierung und Installation von Top wählt man ein Zielsystem aus. Danach kopiert das Konfigurations-Script die entsprechende machine-Datei in die universelle Datei machine.c, die dann durch einen make-Lauf übersetzt und in die restlichen Codeteile eingebunden wird.

Tatsächlich nutzen wir aus dem so erzeugten machine.c hauptsächlich die Routine get_system_info(info), die bis auf die Daten zu den laufenden Prozessen alle weiteren Grunddaten in einer standardisierten Form zur Verfügung stellt. Darüber hinaus benötigen wir noch die generische Programmbibliothek utils.c, in der einige Top-Standardroutinen zusammengefaßt sind. Die restlichen Codefragmente bleiben bis auf den Initialisierungscode unberührt.

Je nach Betriebssystem muß eine Auswerteroutine die Systemdaten aufbereiten. Da Top vollständig parametrisiert arbeitet, ist dort eine genau festgelegte Reihenfolge der Parameter nicht zwingend notwendig.