ComsolGrid - Konzeption, Entwicklung und Implementierung eines
Transcription
ComsolGrid - Konzeption, Entwicklung und Implementierung eines
ComsolGrid - Konzeption, Entwicklung und Implementierung eines Frameworks zur Kopplung von COMSOL Multiphysics und BOINC um hoch-skalierbare Parameterstudien zu erstellen Masterarbeit Dipl.-Ing. (FH) Christian Benjamin Ries ComsolGrid - Konzeption, Entwicklung und Implementierung eines Frameworks zur Kopplung von COMSOL Multiphysics und BOINC um hoch-skalierbare Parameterstudien zu erstellen Masterarbeit zur Erlangung des akademischen Grades eines Master of Science (M.Sc.) in Optimierung und Simulation von Dipl.-Ing. (FH) Christian Benjamin Ries geboren in Bielefeld, Deutschland Fachhochschule Bielefeld Ingenieurwissenschaften und Mathematik Computational Materials Science & Engineering Bielefeld, Germany www.fh-bielefeld.de c 2010 Dipl.-Ing. (FH) Christian Benjamin Ries. Ich erkläre hiermit, dass ich die vorliegende Arbeit selbständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel verwendet habe. Umschlag: Feldlinien zweier Metallstäbe mit dem BOINC Logo ComsolGrid - Konzeption, Entwicklung und Implementierung eines Frameworks zur Kopplung von COMSOL Multiphysics und BOINC um hoch-skalierbare Parameterstudien zu erstellen Eingereicht von: Kontakt: Matrikelnummer: Dipl.-Ing. (FH) Christian Benjamin Ries [email protected] xxxxxx Zusammenfassung Berkeley Open Infrastructure for Network Computing (BOINC) ist ein Open-Source Framework zur Lösung von hoch-skalierbaren und komplexen Berechnungsproblemen. Das Arbeitsprinzip von BOINC basiert auf den Public-Resource Computing (PRC) Prinzipien. Im Gegensatz zu den Ansätzen des zentral organisierten Cluster-Rechnens, werden bei PRC die Berechnungsanwendungen an eine große Anzahl von heterogenen Computern verschickt. Diese Computer können über ein lokales oder globales Netzwerk, z.B. dem Internet, mit dem Projekt verbunden sein und erhalten ein oder mehrere Arbeitspaket(e), welche individuell, absolut unabhängig von den anderen Computern und ohne Kommunikation zu weiteren Computern gelöst werden. Allgemein wird durch die Nutzung von PRC die Benutzerfreundlichkeit eingeschränkt - da keine direkte Ausführungskontrolle vorhanden ist. Heutzutage stehen in jeder Firma - ob groß oder klein - eine Unzahl von ungenutzten, nicht direkt nutzbaren Rechnerressourcen zur Verfügung. Von der Eingangspforte, über die Sekretärin, bis zum Chefzimmer - es gibt keine Möglichkeit der direkten Ausnutzung dieser Ressourcen, um aufwendige Berechnungsaufgaben zu lösen. Diese Rechnerkapazitäten werden im wahrsten Sinne des Wortes „verschwendet“. In dieser Masterarbeit wird ein Ansatz verfolgt, eine Schnittstelle und Technologie zur Verfügung zu stellen, mit der diese Ressourcen zur Lösung von Rechenaufgaben genutzt werden können. Einzig und allein die Simulationssoftware COMSOL Multiphysics und ein Projektserver mit BOINC muss zur Verfügung stehen. Weiterhin zeigt diese Masterarbeit einen Ansatz, um eine einfache Erstellung von Arbeitspaketen zu ermöglichen. Durch diesen Ansatz wird der Schritt soweit vereinfacht, dass innerhalb weniger Klicks eine komplette, automatische und optimierte Parameterstudie erstellt und gestartet werden kann. Prüfungsausschuss: 1. Gutachter: 2. Gutachter: Ausgabe am: Abgabe am: Prof. Dr. rer. nat. Christian Schröder Prof.in Dr. rer. nat. Svetozara Petrova Vorwort Entwicklung macht Spaß, neue Dinge erschaffen auch, worüber jeder meckert ist das Schreiben von Berichten. Dies wird gerne immer weiter nach Hinten verschoben oder sogar mal vergessen. Dabei ist es egal ob es sich um einen Bericht für eine Diplom-/Bachelor-/Masterarbeit oder Dissertation handelt. Durch das Schreiben von Berichten kann auf einfache Weise eine Struktur in den Alltag gebracht werden. Es kristallisiert sich nach jedem Kapitel oder Abschnitt heraus, was noch gemacht werden muss, oder wie etwas besser umgesetzt werden kann. Dieser Bericht entstand parallel zur eigentlichen Entwicklungsarbeit und ist mit jeder hinzugekommenen Funktion gewachsen und hat mich sehr bei der Entwicklung der Softwarekomponenten unterstützt. Den nachfolgenden Comic finde ich sehr lustig und er illustriert schön das Geschehen beim Schreiben eines Berichts... Ich wünsche Ihnen viel Spaß beim Lesen dieser Arbeit! Dipl.-Ing. (FH) Christian Benjamin Ries Bielefeld, Deutschland 1. Oktober 2010 iii Veröffentlichungen Teile dieser Arbeit sind in den nachfolgenden Arbeiten veröffentlicht worden: • C. B. Ries, ComsolGrid - Ein Framework zur Kopplung von COMSOL Multiphysics und BOINC um hoch-skalierbare Parameterstudien zu erstellen, Poster, [science fair], Universität Bielefeld, 2010 • C. B. Ries, and C. Schröder, ComsolGrid - A framework for performing large-scale parameter studies using Comsol Multiphysics and BOINC, COMSOL Conference, Paris, France, 2010 v Inhaltsverzeichnis Vorwort iii Veröffentlichungen v Inhaltsverzeichnis vii Abbildungsverzeichnis xi Listings xiii Abkürzungsverzeichnis 1 2 Einleitung 1.1 Zielgruppe . . . . . . . . . 1.2 Motivation . . . . . . . . . 1.3 Aufbau dieser Arbeit . . . 1.4 Forschungsfragen . . . . . 1.5 Terminologie . . . . . . . 1.6 Fremdwörter und Begriffe xv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 2 3 Grundlagen 2.1 COMSOL Multiphysics . . . . . . . . . . . . . . . . . . . . . . 2.1.1 COMSOL Anwendungsbereiche . . . . . . . . . . . . . 2.1.2 COMSOL Startmodus . . . . . . . . . . . . . . . . . . 2.2 Fast Common Gateway Interface (FastCGI) . . . . . . . . . . . 2.2.1 FastCGI Architektur . . . . . . . . . . . . . . . . . . . 2.2.2 FastCGI Example . . . . . . . . . . . . . . . . . . . . . 2.2.3 FastCGI Installation und Verwendung . . . . . . . . . . 2.3 Server Technologien . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Apache Webserver . . . . . . . . . . . . . . . . . . . . 2.3.2 MySQL Datenbank . . . . . . . . . . . . . . . . . . . . 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) 2.4.1 BOINC Server . . . . . . . . . . . . . . . . . . . . . . 2.4.2 BOINC Client . . . . . . . . . . . . . . . . . . . . . . 2.4.3 BOINC Architektur und Prinzipien . . . . . . . . . . . 2.4.4 BOINC Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 10 10 10 12 12 13 13 14 15 16 18 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii INHALTSVERZEICHNIS 2.5 2.6 Qt Development Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3 Bisherige Arbeiten auf diesem Gebiet 21 3.1 Wrapper Implementierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2 Matlab und BOINC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 ComsolGrid Framework 4.1 Grundidee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Automatische Installation eines BOINC Projekts . . . . . . . . 4.3 Sicherheitsaspekte und Authentifizierung . . . . . . . . . . . . 4.4 Benutzerrollen und deren Definitionen . . . . . . . . . . . . . . 4.5 ComsolGrid Framework - Architektur und Abhängigkeiten . . . 4.6 ComsolGridFCGI - Serverschnittstelle für Parameterstudien . . 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL . . . . . . 4.7.1 COMSOL Multiphysics Prozesskontrolle . . . . . . . . 4.7.2 COMSOL Multiphysics Start- und Simulationsparameter 4.7.3 COMSOL Multiphysics Prozessfortschritt . . . . . . . . 4.8 COMSOL Dateiformate und Magic Numbers . . . . . . . . . . 4.9 Ermittlung der COMSOL Simulationparameter . . . . . . . . . 4.10 Ermittlung der COMSOL Applikationen und Versionen . . . . . 4.11 Modifikationen und Plattformdefinitionen des BOINC Manager 4.12 Kommunikationsprotokoll . . . . . . . . . . . . . . . . . . . . 4.12.1 ComsolGridFCGI - HTML/XML-Response Nachrichten 4.12.2 ComsolGridFCGI - HTML/XML-Request Nachrichten . 4.13 Ermittlung von System-/Prozessinformationen . . . . . . . . . . 4.14 Erstellung von Arbeitspaketen . . . . . . . . . . . . . . . . . . 4.15 Definition der Parameterstudienwerte . . . . . . . . . . . . . . 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten . . . . . . 4.17 ComsolGrid Validator . . . . . . . . . . . . . . . . . . . . . . . 4.18 ComsolGrid Assimilator . . . . . . . . . . . . . . . . . . . . . 5 Testlauf und Funktionsprüfung 5.1 Testumgebung . . . . . . . 5.2 Testparameter . . . . . . . 5.3 Ergebnisse des 1. Testlaufs 5.4 Ergebnisse des 2. Testlaufs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 24 26 27 28 31 33 33 36 39 39 40 42 43 45 45 48 51 53 56 57 64 64 . . . . 65 65 67 69 70 6 Zusammenfassung und weitere Betrachtungen 75 6.1 Wissenschaftlicher Beitrag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6.2 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6.3 Zukünftige Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 viii Literaturverzeichnis 77 A COMSOL Multiphysics Startparameter 81 INHALTSVERZEICHNIS B ComsolGrid Testprojekt Installationsskript B.1 ComsolGrid Templates . . . . . . . . . . . . . . . . . . . . B.2 ComsolGrid Projektserver Konfiguration . . . . . . . . . . . B.3 Apache Webserver . . . . . . . . . . . . . . . . . . . . . . B.4 Testskript für die ComsolGridFCGI Schnittstelle . . . . . . B.5 Struktur des Projektbaumes/des mitgelieferten Datenträgers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 85 86 89 89 92 ix Abbildungsverzeichnis 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 Beispiel eines Mesh in einem COMSOL Simulationsmodell . . . . . . . . . . . . . . . . Anwendungsbereiche von COMSOL Multiphysics - Quelle: www.comsol.com . . . . . Grafische Benutzeroberfläche von COMSOL Multiphysics in der Version 4.0a . . . . . . Architektur der FastCGI Implementierung [22] . . . . . . . . . . . . . . . . . . . . . . Aufbau der Datenbanktabellen einer BOINC Grundinstallation . . . . . . . . . . . . . . Der BOINC Server besteht aus einzelnen Komponenten und diese Komponenten teilen sich einen Speicherort - (engl. A BOINC server consists of several components, sharing several forms of storage) - Quelle: [5] . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente des Aufgabenservers (engl. Components of a BOINC task server) - Quelle: [5] Darstellung einer Möglichkeit zur Nutzung von BOINC . . . . . . . . . . . . . . . . . . 6 7 8 11 15 18 19 19 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 Verteilungsdiagramm mit einem Blick auf die ComsolGrid Komponenten . . . . . . . . Architektur des ComsolGrid Frameworks und den implementierten Anwendungen . . . . Das Zustandsdiagramm von ComsolGridFCGI . . . . . . . . . . . . . . . . . . . . . . Ablaufdiagramm der Implementierung von ComsolGridStarter . . . . . . . . . . . . . . BOINC Manager mit Darstellung des fraction_done Wertes von ComsolGridStarter . . . Magic Numbers der COMSOL Simulationsmodelldateien . . . . . . . . . . . . . . . . . Definition von Simulationskonstanten in den COMSOL Versionen 3.5 und 4.0 . . . . . . Ermittlung der Simulationsparameter aus einem (1) COMSOL Simulationsmodell der COMSOL Multiphysics Versionen (2) 3.5 und (3) 4.0 . . . . . . . . . . . . . . . . . . . Der Informationsbeschaffungsprozess in einem UML2 Zustandsdiagramm . . . . . . . . Der Informationsbeschaffungsprozess in einem UML2 Sequenzdiagramm . . . . . . . . Beispiel eines Komponentendiagramm für ein Arbeitspaket im ComsolGrid Framework . ComsolGridQt - Ansicht der Authentifizierungbereiche und dem Debug Bereich . . . . . ComsolGridQt - Ansicht der Prozessinformationen . . . . . . . . . . . . . . . . . . . . ComsolGridQt - Ansicht zur Erstellung einer neuen Parameterstudie . . . . . . . . . . . ComsolGridQt - Tabelle zum Erstellen von Simulationsparametern . . . . . . . . . . . . ComsolGridQt - Einstellungen für ComsolGridStarter . . . . . . . . . . . . . . . . . . ComsolGridQt - Liste der unterstützten ComsolGridStarter Versionen . . . . . . . . . . ComsolGridQt - Ansicht des „Informationsfensters“ . . . . . . . . . . . . . . . . . . . . ComsolGridQt - Daten der Arbeitspakete (engl. Workunits) und Ergebnisse (engl. Results) ComsolGridQt - Ansicht der Konfiguration einer neuen Parameterstudie . . . . . . . . . 24 29 32 37 39 40 41 5.1 5.2 Struktur der ComsolGrid Testumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Ergebnis des COMSOL Multiphysics Testmodells falling_sand.mph . . . . . . . . . 67 42 52 54 55 58 59 60 61 61 62 62 62 63 xi Abbildungsverzeichnis 5.3 5.4 5.5 5.6 5.7 5.8 xii Abbildungsverzeichnis Parameter des COMSOL Multiphysics Testmodells falling_sand.mph Ergebnisseite des 1. Testdurchlaufs . . . . . . . . . . . . . . . . . . . . Fehleransicht des 1. Testdurchlaufs . . . . . . . . . . . . . . . . . . . . Auflistung der Fehler des 1. Testdurchlaufs . . . . . . . . . . . . . . . Ergebnisseite des 2. Testdurchlaufs . . . . . . . . . . . . . . . . . . . . Ergebnisseite des 2. Testdurchlaufs nach manueller Validierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 71 71 71 72 73 Listings 2.1 2.2 2.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 4.25 4.26 4.27 4.28 4.29 5.1 5.2 5.3 5.4 Fehlermeldung beim Starten von COMSOL in der Version 4.0 mit dem Target batch . Beispiel einer FastCGI Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . Aktivierung zweier Apache Module . . . . . . . . . . . . . . . . . . . . . . . . . . Bildung des Passwort Hash-Wertes für die Authentifizierung an einem BOINC Projekt Datenbanktabelle zur Umsetzung von Benutzerrollen . . . . . . . . . . . . . . . . . Definition der Benutzerrollen im ComsolGrid Framework . . . . . . . . . . . . . . . Beispielkonfiguration der Applikation ComsolGridFCGI . . . . . . . . . . . . . . . Prozessstruktur von COMSOL Multiphysics 3.5x nach dem Start . . . . . . . . . . . Prozessstruktur von COMSOL Multiphysics 4.0a nach dem Start . . . . . . . . . . . Aktivierung der implementierten Prozesskontrollmechanismen . . . . . . . . . . . . Signalhandler für die manuelle Signalverarbeitung . . . . . . . . . . . . . . . . . . Struktur und Beispiel einer ./comsol.xml Konfigurationsdatei . . . . . . . . . . . . Standardausgabe bei der Ausführung von COMSOL Multiphysics im Batch-Modus . Struktur eines COMSOL Multiphysics Java Archivs . . . . . . . . . . . . . . . . . . C++-Quelltext zur Ermittlung der Simulationsparameter aus einer Simulationsdatei . Ermittlung der COMSOL Multiphysics Major Versionen . . . . . . . . . . . . . . . Modifikation am BOINC Manager zur Ermittlung der COMSOL Versionen . . . . . Vom BOINC Manager hinzugefügte Plattformdefinitionen . . . . . . . . . . . . . . Basis HTTP-Request der die XML Daten aufnimmt . . . . . . . . . . . . . . . . . . HTTP/XML-Response - ComsolGridFCGI <status> . . . . . . . . . . . . . . . . . HTTP/XML-Response - ComsolGridFCGI <apps> . . . . . . . . . . . . . . . . . HTTP/XML-Response - ComsolGridFCGI <comsol_release> . . . . . . . . . . . . HTTP/XML-Response - ComsolGridFCGI <comsol_error> . . . . . . . . . . . . . HTTP/XML-Response - ComsolGridFCGI Fehlernummern . . . . . . . . . . . . . HTTP/XML-Request - Eine Parameterstudie erstellen . . . . . . . . . . . . . . . . . HTTP/XML-Request - Status und Applikationen ermitteln . . . . . . . . . . . . . . HTTP/XML-Request - Authentifizierung am Projektserver . . . . . . . . . . . . . . Beispielanwendung zur Beschaffung von Informationen über definierte Prozesse . . . Änderung der Zugriffsrechte für das BOINC Skript ./bin/status . . . . . . . . . . Manuelle Erstellung eines Arbeitspakets . . . . . . . . . . . . . . . . . . . . . . . . Beispiel eines Range mit drei Parametersätzen . . . . . . . . . . . . . . . . . . . . . Beispiel einer Parameterdatei, die aus den Parameter Ranges erstellt wird . . . . . . Konfiguration des NFS Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hostnamen der COMSOL Multiphysics Testhosts . . . . . . . . . . . . . . . . . . . Konfiguration zum Importieren des Ordner der COMSOL Multiphysics Installation . 32-Bit und 64-Bit Version von ComsolGridStarter . . . . . . . . . . . . . . . . . . . 9 11 13 26 27 28 33 34 34 35 36 37 39 41 41 43 44 44 45 46 47 47 48 48 50 50 51 52 53 55 56 57 66 66 66 67 xiii LISTINGS 5.5 5.6 5.7 5.8 5.9 A.1 A.2 A.3 B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9 B.10 xiv Ausgabe der ComsolGridFCGI Applikation zur Erstellung von Arbeitspaketen Projektstatus, nachdem die Parameterstudie initialisiert ist (gekürzte Ausgabe) . Konfiguration zum Deaktivieren eines Daemon . . . . . . . . . . . . . . . . . Status des BOINC Projekts mit deaktiviertem file_deleter Prozess . . . . . Gekürzte Ansicht der Ergebnisdateien . . . . . . . . . . . . . . . . . . . . . . COMSOL Multiphysics allgemeine Startparameter - Hilfemenü . . . . . . . . COMSOL Multiphysics Major Release 3.5a Startparameter - Batch Hilfemenü COMSOL Multiphysics Major Release 4.0a Startparameter - Batch Hilfemenü ComsolGrid Standarddatenbankeintrag für ein Testprojekt . . . . . . . . . . . ComsolGrid Installationsskript für ein Testprojekt . . . . . . . . . . . . . . . . ComsolGrid Template Input . . . . . . . . . . . . . . . . . . . . . . . . . . . ComsolGrid Template Result . . . . . . . . . . . . . . . . . . . . . . . . . . . ComsolGrid Projektserver Konfiguration . . . . . . . . . . . . . . . . . . . . . Liste der Plattformen die der Projektserver zur Verfügung stellt . . . . . . . . . Apache Webserver Konfiguration für die BOINC Projektnutzung . . . . . . . . Apache Webserver Konfiguration für die FastCGI Nutzung . . . . . . . . . . . Testskript für die ComsolGridFCGI Schnittstelle . . . . . . . . . . . . . . . . Struktur des mitgelieferten Datenträgers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 69 70 72 72 81 82 82 83 83 85 86 86 88 89 89 89 92 Abkürzungsverzeichnis API . . . . . . . . . . . Bash . . . . . . . . . . BOINC . . . . . . . CAD . . . . . . . . . . CGI . . . . . . . . . . . CKL . . . . . . . . . . CPU . . . . . . . . . . CR . . . . . . . . . . . FastCGI . . . . . . . FEM . . . . . . . . . . FQDN . . . . . . . . GPU . . . . . . . . . . GUI . . . . . . . . . . HTML . . . . . . . . HTTP . . . . . . . . . IP . . . . . . . . . . . . IPv4 . . . . . . . . . . IPv6 . . . . . . . . . . ISO . . . . . . . . . . . LF . . . . . . . . . . . . NFS . . . . . . . . . . OOP . . . . . . . . . . OpenGL . . . . . . OSI . . . . . . . . . . . PHP . . . . . . . . . . PID . . . . . . . . . . . PRC . . . . . . . . . . SHM . . . . . . . . . . SQL . . . . . . . . . . SSL . . . . . . . . . . . SWT . . . . . . . . . . TCP/IP . . . . . . . . UML . . . . . . . . . VPN . . . . . . . . . . WU . . . . . . . . . . . XML . . . . . . . . . Application Programming Interface Bourne-again shell Boinc Open Infrastructure for Network Computing Computer Added Design Common Gateway Interface Class-Kit License Central Processing Unit Carriage Return Fast Common Gateway Interface Finite-Elemente Methode Fully-Qualified Domain Name Graphics Processing Unit Graphical User Interface HyperText Markup Language Hypertext Transfer Protokoll Internet Protocol Internet Protokoll in der Version 4 Internet Protokoll in der Version 6 International Organization for Standardization Line Feed Network File System Objektorientierter Programmierung Open Graphics Library Open Systems Interconnection PHP Hypertext Processing Prozessidentifikationsnummern Public Resource Computing Shared-Memory Structured Query Language Secure Socket Layer Standard Widget Toolkit Transmission Control Protocol/Internet Protocol Unified Modeling Language Virtual Private Network Workunit Extensible Markup Language xv Kapitel 1 Einleitung Es ist sinnlos zu sagen: Wir tun unser Bestes. Es muss dir gelingen, das zu tun, was erforderlich ist. Winston Churchill Dieses Kapitel beschreibt die Beweggründe dieser Masterarbeit. Es wird beschrieben, aus welcher Motivation heraus diese Masterarbeit entstanden ist. Weiterhin wird darauf eingegangen, auf welche Besonderheiten der Leser beim Studieren dieser Masterarbeit achten muss und welche terminologischen Definitionen verwendet werden. 1.1 Zielgruppe Diese Masterarbeit richtet sich an Softwareentwickler, Wissenschaftler und Forscher in allen Bereichen der Natur- und Ingenieurswissenschaften und an interessierte Leser. 1.2 Motivation Diese Arbeit wurde in Angriff genommen, da es bisher noch keinen Ansatz gibt, mit dem das Simulationswerkzeug COMSOL Multiphysics in Kombination mit dem Berkeley Open Infrastructure for Network Computing (BOINC) Framework verwendet werden kann. Forschergruppen und Studierende an der Fachhochschule Bielefeld arbeiten seit längerem mit COMSOL Multiphysics und stehen vor dem Problem, dass viele verschiedene Simulationsdurchgänge für ein Modell durchgeführt werden müssen. Je nach Modell kann ein solcher Durchlauf Minuten oder bis zu mehreren Tagen dauern. Genau dort setzt diese Arbeit an und versucht solche Parameterstudien auf mehrere Rechner zu verteilen. So kann die Last der Ausführungen verteilt werden, so können womöglich schnellere Ergebnisse der Simulationen erhalten werden. 1.3 Aufbau dieser Arbeit Sechs Kapitel führen durch diese Masterarbeit. Angefangen mit dem aktuellen Kapitel, in dem Informationen über die Terminologie dieser Arbeit aufgeführt sind. Im Kapitel 2 werden Grundlagen und Begriffe der Informationstechnik beschrieben. Es wird erläutert was das BOINC Framework ist und welche Architektur dahinter steht. Weiterhin wird ein kurzer Überblick über die COMSOL Multiphysics Simulationsoftware gegeben und beschrieben in welchen Anwendungsbereichen diese Software verwendet wird. Die Datenbanktechnologie MySQL 1 1.4 Forschungsfragen Einleitung wird kurz erläutert. Außerdem werden die in dieser Masterarbeit benötigten Programmiersprachen aufgeführt. Das Kapitel 3 liefert Einblicke in bis dato getätigte Arbeiten und gibt Informationen über den Stand der Technik. Den Kern dieser Arbeit deckt das Kapitel 4 ab. Hier werden alle Ideen und Implementierungen dieser Masterarbeit erwähnt und erläutert. In diesem Kapitel werden die Softwareimplementierungen beschrieben und Einblicke in die umgesetzte Architektur des ComsolGrid Framework gewährt. Die Softwarekomponenten, zur Erstellung von Parameterstudien und deren Benutzerbedienung, werden beschrieben. Das Kapitel beinhaltet weiterhin das Kommunikationsprotokoll, mit dem der Projektserver und die Projektteilnehmer eine Kommunikation durchführen. Der ComsolGrid Wrapper, mit dem Namen ComsolGridStarter, wird vorgestellt. Techniken zur Ermittlung der Simulationsparameter und der COMSOL Multiphysics Major Version werden erläutert. Eine Testinstallation und Testlaufimplementierung wird in Kapitel 5 vorgestellt. Diese Installation zeigt, dass die in dieser Masterarbeit beschriebenen Softwarekomponenten und umgesetzten Ideen zu einem erfolgreichen Ergebnis führen und einen Nutzen für den Anwender haben. Das letzte Kapitel gibt eine Zusammenfassung und einen Ausblick auf mögliche nachfolgende Arbeiten. 1.4 Forschungsfragen Die Frage dieser Arbeit formte sich aus dem Wunsch, das COMSOL Multiphysics Simulationswerkzeug für hoch-skalierbare Parameterstudien anwenden zu können. Das Ziel dieser Masterarbeit ist es, diese Lücke zu füllen, so dass die COMSOL Multiphysics Simulationsoftware in Kombination mit dem BOINC Framework verwendet werden kann. In der Vergangenheit wurde erfolgreich die Kombination mit Berkeley Open Infrastructure for Network Computing (BOINC) und Matlab implementiert und präsentiert [6]. In dieser Masterarbeit sollen die nachfolgenden Fragen untersucht werden: • Welche Softwarekomponenten werden benötigt oder müssen entwickelt werden? • Wie kann die Erstellung und Administration einer hoch-skalierbaren Parameterstudie aussehen? • Welche Systemanforderungen müssen erfüllt sein? • Wäre eine solche Verwendung sinnvoll und rentabel? • Wie kann eine Realisierung aussehen? 1.5 Terminologie In dieser Arbeiten werden folgende Terminologien verwendet: • Benutzer, die sich Arbeitspakete vom BOINC Projektserver herunterladen, werden in dieser Arbeit als Anwender bezeichnet. Anwender erfüllen den Zweck von Maschinen, die nur drei Arbeitsschritte abdecken: (1) Arbeitspakete holen, (2) Arbeitspakete bearbeiten und (3) Ergebnisse an das BOINC Projekt zurücksenden. 2 Einleitung 1.6 Fremdwörter und Begriffe • Der Administrator oder Entwickler wird in dieser Arbeit als Simulant bezeichnet. Der Simulant ist in diesem Fall die Person, die Parameterstudien und die wissenschaftlichen Applikationen und Arbeitspakete erstellt und einem BOINC Projekt hinzufügt. • Namen von Anwendungen und Programmen werden durch ein Dollarzeichen angeführt und besitzen folgende Schriftart: $cat /proc/meminfo. Dieses kleine Beispiel beschreibt das Programm $cat, welches den Inhalt aus der Datei /proc/meminfo ausliest. • Dateien werden wie Anwendungen und Programme dargestellt, mit der Ausnahme, dass kein Dollarzeichen am Anfang steht und kein abschließender Schrägstrich angehängt ist, z.B. /proc/meminfo. Ordnerpfade oder alleinstehende Ordner werden mit einem abschließenden Schrägstrich beschrieben: (1) relativer Pfad Documents/University/ und (2) absoluter Pfad /home/cr/Documents/University/. 1.6 Fremdwörter und Begriffe In dieser Arbeit werden Begriffe und Fremdwörter fallen, die nicht im Duden stehen, aber in der Informationstechnik zum Alltag gehören. Um nicht bei jeder Verwendung eine Erläuterung durchführen zu müssen, werden diese Begriffe und Wörter in der nachfolgenden Auflistung definiert. Es kann sich bei dieser Auflistung um deutsche und englische Wörter handeln. Framework Dieses Fachwort bezeichnet ein Gerüst zur Umsetzung einer zielgerichteten Gesamtheit von Funktionen. Dieses Gerüst kann verschiedene Ausprägungen haben. Im Rahmen dieser Masterarbeit ist ein Softwaregerüst gemeint, das mehrere Funktionalitäten kapselt und für eine oder mehrere Aufgaben verwendet werden kann. Syntax-Highlighted Editor Ein Editor ist in der Softwarebranche ein Textfeld zum Eingeben von Text. Wenn ein solcher Editor zum Schreiben von Programmierquelltext verwendet wird, dann können bestimmte Wörter und Zeichen mit Farben oder Schriftstilen dargestellt werden. Dies wird Syntax-Highlight genannt und meint eine Hervorhebung von besonderen Darstellungsregeln. Thread Ein Prozess, der im Kontext einer Programmausführung - meist im Hintergrund - ausgeführt wird. Multi-Thread Entspricht einer Anzahl N von Threads, die im Hintergrund ausgeführt werden und in den meisten Fällen eine besondere, gesonderte Synchronisation benötigen. Dies liegt daran, weil Threads oft auf dieselben Daten zugreifen können oder müssen. Render Engine Eine Webseite besteht aus einer Auflistung von beschreibenden Textelementen dem sogenannten HTML - diese Elemente werden gelesen und zu einer grafischen Seite aufgebaut. In einem solchen Fall wird von einer Render Engine gesprochen. In Computerspielen wird eine Render Engine zum Beispiel zur Darstellung von Landschaften oder Räumen verwendet. Download-/Upload Diese Wörter beschreiben das Herunter- und Hochladen von Dateien, aus dem Internet auf den eigenen Rechner oder vice versa. Major Version Dies ist eine Hauptversion eines Softwarelebenszyklus. Es gibt z.B. die Linux Kernel 2.2.x, 2.4.x und 2.6.x. Diese Versionsnummern sind die Major Versionen. Die x Nummern beschreiben die Minor Version. Aliase Dies entspricht einer Substitution von Befehlsketten. 3 1.6 Fremdwörter und Begriffe Einleitung HTTP-Request HTTP-Anfrage - Webanfrage, z.B. an einen Webserver. HTTP-Response HTTP-Antwort - Webantwort, z.B. von einem Webserver. Daemon, Dämon Wie ein Thread, allerdings wird hier der komplette Prozess im Hintergrund ausgeführt und dieser kann wiederum Threads beinhalten. In dieser Arbeit wird generell der englische Begriff verwendet, um direkt zu zeigen, dass es sich um solch einen Dämonen handelt. 4 Kapitel 2 Grundlagen Man soll die Dinge so nehmen, wie sie kommen. Aber man sollte auch dafür sorgen, dass die Dinge so kommen, wie man sie nehmen möchte. Curt Goetz Dieses Kapitel beinhaltet Informationen über die Grundlagen, der in dieser Arbeit verwendeten Technologien. Es wird kurz darauf eingegangen, welche Funktionalitäten die Technologien besitzen und was die Zielfunktionen sind. Dieses Kapitel erhebt sicherlich nicht den Anspruch auf Vollständigkeit, bzgl. der Gesamtheit der Beschreibungen aller zur Verfügung stehenden Funktionen dieser Technologien. Die Verweise zu den Technologien führen zu weiteren Informationen. 2.1 COMSOL Multiphysics Die COMSOL Multiphysics Simulationssoftware enthält alle Funktionalitäten, um die Geometrie eines Simulationsmodell zu erstellen, dieses Modell mit einem Gitter (engl. Mesh) zu überziehen, die physikalischen Gesetzmäßigkeiten zu definieren, um die Lösung der Problemstellung zu berechnen und um das Visualisieren der erhaltenden Ergebnisse durchzuführen [35]. Die Abbildung 2.1 zeigt exemplarisch ein Modell, welches mit einem Mesh überzogen ist. Die Modelle werden mit Hilfe von Differenzialgleichungen beschrieben und durch die Finite-Elemente Methode (FEM) gelöst. Das Mesh und die FEM arbeiten eng zusammen. Erst durch das Mesh wird die Möglichkeit der Berechnung durch die FEM ermöglicht, da die FEM mit kleinen Abschnitten des Ganzen arbeitet und Einzelergebnisse berechnet. Das Mesh kann in der Feinheit justiert werden und hat Einfluss auf die Dauer der Simulation und in einigen Fällen auch auf das Ergebnis. Je nach Einstellung des Mesh kann es vorkommen, dass eine Berechnung nicht konvergiert. Die Ergebnisse werden nach Vervollständigung aller Berechnungen zusammen geführt, woraus sich ein Gesamtergebnis bildet. Die Simulationssoftware ist mit den Betriebssystemen Linux (32-Bit/64-Bit), Mac OS X (32-Bit/64Bit) und Windows (32-Bit/64-Bit) ausführbar. In dieser Masterarbeit werden für diese Software verschiedene Namen verwendet, diese beziehen sich alle auf die COMSOL Multiphysics Simulationssoftware. Die verschiedenen Namen sind: COMSOL, COMSOL Multiphysics, COMSOL Multiphysics Simulationssoftware, Simulationssoftware und Simulationswerkzeug. Die Simulationssoftware kann mit einer ganzen Reihe von verschiedenen Dateiformaten arbeiten. Das Standarddateiformat, welches von COMSOL definiert und entwickelt wurde, besitzt die Dateiendung *.mph. Dateien mit dieser Endung haben mehr als eine Aufgabe: (1) diese können Simulationsmodelle enthalten oder (2) Definitionen von Materialeigenschaften. Ansonsten unterstützt COMSOL Multiphysics u.a. Parameter/Variablen/Postprocessing5 2.1 COMSOL Multiphysics Grundlagen Abbildung 2.1: Beispiel eines Mesh in einem COMSOL Simulationsmodell Daten1 /Farbtabellen in formatierten Textdateien (.txt), Bildformate (.jpg, .png, .bmp, .eps, etc.), Computer Added Design (CAD) Dateien (.dxf, .vrml, .stl), Mesh Dateien (.nas, .bdf, .nastran, .dat, .vrml, .vrl, .stl) und Funktionen in den Programmiersprachen Java (.java) und C. In der grafischen Ausgabe von COMSOL Multiphysics, können die Modelle in den Achsenrichtungen XY- und Z gedreht, in das Modell hineingezoomt und die Ansicht verschoben werden. 2.1.1 COMSOL Anwendungsbereiche COMSOL Multiphysics lässt sich in zahlreichen Bereichen der Technik und Naturwissenschaften einsetzen. Das Simulationswerkzeug ist so aufgebaut, dass die verschiedenen Bereiche durch Module abgedeckt werden. Zum Zeitpunkt des Schreibens dieser Masterarbeit gibt es 12 Module, eine Materialbibliothek (engl. Material Library) und eine Schnittstelle mit dem Namen LiveLink. Diese bietet die Möglichkeit mit den vier externen Programmen „Pro/ENGINEER“, „Inventor“, „SolidWorks“ und „MATLAB“ Daten auszutauschen. In Abbildung 2.2 sind die vorher erwähnten Bereiche der Technik und Naturwissenschaften aufgelistet und es wird illustriert in welchen Abhängigkeiten diese zueinander stehen. COMSOL Multiphysics kann ein Clustersystem nutzen. Dadurch können die Ressourcen solch eines Clustersystem für einen Simulationsdurchlauf genutzt werden. Weiterhin unterstützt COMSOL Multiphysics die Möglichkeit sogenannte Sweeps zu definieren. Sweeps sind Parameterstudien für ein Modell, die nacheinander - sprich sequentiell - ausgeführt werden, entweder mit Hilfe eines Clustersystem oder auf einer einzelnen Rechnermaschine. Die Unterstützung von Sweeps ermöglicht allerdings nicht, dass mehrere Parameterstudien parallel bzw. verteilt verarbeitet werden. Diese Rechnermaschine kann evtl. mehr als einen Prozessor besitzen. Das Verwenden von mehreren Prozessoren wird auch durch COMSOL Multiphysics unterstützt. 2.1.2 COMSOL Startmodus Die COMSOL Multiphysics Simulationssoftware kann in verschiedenen Modus Simulationen durchführen. Diese Modus wird durch das Angeben von Parametern beim Starten der Simulationssoftware bestimmt. Bei COMSOL werden diese Ausführungsarten COMSOL Targets genannt. Es stehen sechs Targets zu Verfügung: 1 Dies 6 sind Ergebnisdaten, die für die Darstellung der Ergebnisse nach bearbeitet werden können. Grundlagen 2.1 COMSOL Multiphysics Abbildung 2.2: Anwendungsbereiche von COMSOL Multiphysics - Quelle: www.comsol.com 1. comsol Dieses Target ist der Standardausführungsmodus. Die grafische Benutzeroberfläche wird gestartet und es kann sofort mit dem Erstellen eines Simulationsmodell oder der Ausführung einer Simulation begonnen werden. Die Abbildung 2.3 zeigt die Standardbenutzeroberfläche einer gestarteten Anwendungsinstanz von COMSOL. 2. comsol server Mit diesem Target wird ein COMSOL Server gestartet. Dadurch können sich Anwender eine Lizenz zum Starten von COMSOL auf Nachfrage reservieren und COMSOL bei sich auf der Maschine ausführen. Dies ist z.B. im akademischen Bereich von Vorteil. Es arbeiten zu einem Zeitpunkt x, nicht alle Studierenden gleichzeitig mit COMSOL, somit können andere Studierende mit COMSOL arbeiten, da in diesem Fall einfach die nicht genutzten Lizenzen zur Ausführung von COMSOL verwendet werden. 3. comsol batch Durch dieses Target wird das Starten von COMSOL aus dem Eingabefenster bzw. einem Konsolenfenster ermöglicht. Weiter unten wird dieses Target noch näher betrachtet. 4. comsol compile Dieses Target kompiliert ein Simulationsmodell, welches als Java2 Quelle zur Verfügung steht. 5. comsol server matlab Dieses und das nächste Target können nur zusammen mit einer Matlab Installation ausgeführt werden. Das aktuelle Target startet COMSOL in Kombination mit Matlab und versucht sich zu einem COMSOL Server zu verbinden. 6. comsol matlab Hier wird COMSOL mit Matlab Unterstützung gestartet. In dieser Masterarbeit wird dem dritten Target ganz besondere Aufmerksamkeit zuteil. Dieses Target ermöglicht das Starten von COMSOL in der Texteingabe, der sogenannten Konsole bzw. einem Terminal. Mit der Auswahl dieses Targets, werden weitere Parameter für den Anwender zur Auswahl gestellt. Diese Parameter sind nachfolgend aufgelistet: -inputfile <filename> Die Eingangsdatei, die ein Simulationsmodell enthält. -outputfile <filename> Das Ergebnis der Simulation wird in dieser Datei gespeichert. 2 Java ist eine sehr verbreitet und objektorientierte Programmiersprache, siehe auch http://www.sun.com. 7 2.1 COMSOL Multiphysics Grundlagen Abbildung 2.3: Grafische Benutzeroberfläche von COMSOL Multiphysics in der Version 4.0a -study <study name> Ein Simulationsmodell, respektive die Eingangsdatei kann mehrere Studien beinhalten. Diese Studien besitzen jeweils einen Namen. Mit der Angabe eines Namen für eine Studie, wird die Simulation für die benannte Studie ausgeführt. -job <job name> Dieser Parameter startet einen bestimmten COMSOL Job. -pname <parameter name> Eine Simulation kann mehrere Parameter enthalten, z.B. die Geometriedaten eines Rechtecks oder Kreises. Ein Rechteck besitzt eine Länge und Breite, diese Werte können durch Parameter (auch Variablen genannt) während der Modellierung des Simulationsmodells benutzt werden. Diese Variablennamen können beim Starten ausgewählt und mit Werten gefüllt werden. Für das Setzen von Werten, wird der nachfolgende Parameter genutzt. -plist <parameter values> Dieser Parameter füllt die soeben beschriebenen Variablen mit Werten, die dann während einer Simulation verwendet werden sollen. -batchlog <log filename> Durch diesen Parameter wird eine Ausgabedatei definiert, in die Fehler oder Warnungen über die Ausführung geschrieben werden. Diese Datei beinhaltet zum Beispiel eine Fehlermeldung, wenn die Lizenz nicht richtig konfiguriert ist, so dass COMSOL nicht gestartet werden kann. -client Die COMSOL Multiphysics Simulationssoftware kann wie oben erwähnt als Serverapplikation gestartet werden. Durch diesen und den nachfolgenden zwei Parametern, kann eine Verbindung zu diesem Server erstellt und für die Kommunikation genutzt werden. -host <hostname> Die Hostadresse des COMSOL Multiphysics Server. -port <port number> Die Portnummer des COMSOL Multiphysics Server. Weiterhin enthalten alle Targets grundsätzliche Parameter, die beim Start angegeben werden können. Nachfolgend nur eine Liste von Parametern, die für diese Masterarbeit eine Relevanz besitzen. 8 Grundlagen 2.1 COMSOL Multiphysics -ckl Dieser Parameter ist die Kurzform von Class-Kit License. Durch diesen Parameter wird die benötigte Lizenz zur Ausführung von COMSOL von einem Lizenzserver abgefragt. In dieser Masterarbeit wird der Lizenzserver der Fachhochschule Bielefeld verwendet. Die benötigten Einstellungen, Serveradresse und Portnummer, werden in der Datei /usr/local/comsolXX/license/license.dat vorgenommen und haben folgendes Format: 1 2 3 # SN=1024706 SERVER infma −l i c e n s e . fh −b i e l e f e l d . de ANY 19353 USE_SERVER Der Computer, auf dem COMSOL ausgeführt werden soll, muss sich im Adressbereich der Fachhochschule Bielefeld befinden. Dies kann entweder durch Anmeldung im Netzwerk der Fachhochschule geschehen oder durch die Erstellung einer VPN3 -Verbindung zum Universitätsnetzwerk der Universität Bielefeld. -32 | -64 Diese zwei Parameter definieren beim Starten von COMSOL ob eine 32-Bit oder 64-Bit Plattform benutzt wird. Auffällig, aber dies scheint COMSOL nicht alleine ermitteln zu können. -np <number of processors> Prozessoren mit mehr als einem Kern sind heutzutage Stand der Technik und sollten auch verwendet werden können. Dieser Parameter ermöglicht es zu definieren, mit wie vielen Prozessorkernen eine Simulation ausgeführt werden soll. -ipv6 Dieser Parameter steht für das Internet Protokoll in der Version 6 (IPv6). Die aktuelle und fast noch ausschließlich verwendete Version ist IPv4. Dieses Protokoll definiert die Art und Weise der Adressierung von Rechnern in einem Netzwerk. Der Unterschied dieser beiden Protokollversionen betrifft die mögliche Anzahl an adressierbaren Rechnern und weitere Änderungen, die die Sicherheit und auch Priorisierung von Internetdiensten beeinflussen. Es gilt folgendes für das Target batch zu beachten: Dieses Target ist in Kombination mit der Class-Kit License nicht in der COMSOL Version 4.0 nutzbar. Getestet wurde das Ausführen mit Hilfe des CKL Parameters in der COMSOL Version 4.0 mit einem Linux Betriebssystem. Das Ergebnis dieser Ausführung ist die nachfolgende Ausgabe: 1 2 3 4 5 6 7 8 9 10 11 12 ∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗∗∗∗∗∗∗∗COMSOL p r o g r e s s o u t p u t f i l e ∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ F r i Sep 03 1 1 : 3 2 : 3 4 CEST 2010 Running : S tu d y 1 The_following_feature_has_encountered_a_problem Exception : com . co m s o l . u t i l . e x c e p t i o n s . F l E x c e p t i o n : The f o l l o w i n g f e a t u r e h a s e n c o u n t e r e d a p r o b lem M es s ag es : The f o l l o w i n g f e a t u r e h a s e n c o u n t e r e d a p r o b lem − F e a t u r e : S tu d y S t e p 1 ( s o l 1 / s t 1 ) − Error : License e r r o r . Listing 2.1: Fehlermeldung beim Starten von COMSOL in der Version 4.0 mit dem Target batch Diese Problematik ist in der COMSOL Version 3.5a und 4.0a nicht vorhanden! 3 Virtual Private Network (VPN), ermöglicht die Kommunikation mit Hilfe einer verschlüsselten Verbindung. 9 2.2 Fast Common Gateway Interface (FastCGI) Grundlagen 2.2 Fast Common Gateway Interface (FastCGI) FastCGI ist eine freie und offene Erweiterung zum Common Gateway Interface (CGI) mit einer hohen Performance (engl. performance) in allen Internetanwendungen, ohne die Latenzzeit einer evtl. vorhandenen Schnittstelle eines Webservers. Die Implementierung soll eine schnelle Verarbeitung von Webanfragen ermöglichen. Applikationen mit FastCGI Nutzung, können im Kontext eines Webservers ihren Dienst verrichten oder als eigenständige (engl. stand-alone) Applikation gestartet werden. Mit FastCGI können Anwendungen entwickelt werden, die direkt eine Geschäftslogik (engl. business logic) enthalten. Es sind unendlich viele Anwendungen möglich, z.B. kann eine Applikation Anfragen entgegen nehmen und direkt Steuerungsaufgaben starten, ohne den Umweg über weitere Schnittstellen zu nehmen. FastCGI unterstützt dies nativ, da der Kern von FastCGI als stand-alone Applikation arbeiten kann. Heutige Webtechnologien sind in der Regel so aufgebaut, dass ein Interpreter - z.B. PHP Hypertext Processing (PHP) - auf dem Webserver installiert ist, ein Benutzer eine in PHP programmierte Seite aufruft, dort Daten in Formulare eingibt, diese an den Server abschickt und dieser Server die Daten in eine Datenbank einträgt. Im Hintergrund läuft ein Prozess, der diese Daten kontinuierlich ausliest, um daraus Ereignisse zu erstellen. Im Unterschied dazu, steht FastCGI. Mit FastCGI ist der Weg zum Ziel nahezu minimal: die Daten werden von der Anwendung mit FastCGI gelesen und die Ereignisse werden erstellt. Beim Start einer Anwendung mit FastCGI (nachfolgend auch „FastCGI Applikation„ genannt) werden die Standardein-/ausgabekanäle, sowie der Fehler-kanal4 umgeleitet. Während der Laufzeit einer Konsolenapplikation ohne FastCGI Nutzung, wird eine Ausgabe in der Konsole oder dem Terminal ausgegeben. Eingaben des Benutzers erfolgen in der Regeln über die angeschlossene Tastatur und die Konsolenapplikation liest diese Werte direkt ein. Eine Applikation mit FastCGI Nutzung, verschickt und liest die Daten auf einer Netzwerkverbindung. Dabei erfolgt der Datentransfer in Form von HTTP-Nachrichten. Wenn sich ein Anwender verbindet, wird ein Nachrichtenkanal geöffnet. Dieser Nachrichtenkanal wird dann als Ein- und Ausgabekanal verwendet. In dieser Masterarbeit wird FastCGI verwendet, da FastCGI auch im BOINC Framework genutzt wird. 2.2.1 FastCGI Architektur Die Abbildung 2.4 enthält die Architektur der FastCGI Implementierung. Der Webserver baut eine Verbindung zur FastCGI Applikation auf und kommuniziert mit dieser Applikation über eine FullDuplex Verbindung5. Der Webserver kann weitere Verbindungen zu anderen Anwendungen haben. Dies wird durch die Datenbank im unteren Bereich der Abbildung beschrieben. Eine FastCGI Applikation kann auch zusätzliche Verbindungen besitzen oder sich zu anderen Diensten verbinden. Dieses muss vom Entwickler umgesetzt werden. Bei einer stand-alone Anwendung, ist der linke Benutzer direkt mit der FastCGI Applikation verbunden. 2.2.2 FastCGI Example Dieser Abschnitt beschreibt ein Beispiel einer FastCGI Applikation. In Listing 2.2 werden Webanfragen verarbeitet (Zeile 22 − 49). Dabei wird dem Anfragenden (Zeile 22) eine Nachricht geschickt (Zeile 24 − 26), sobald sich dieser mit der FastCGI Applikation verbunden hat. In den Zeilen 28 − 35 4 In der Programmierung werden die Kanäle folgender weise bezeichnet: STDOUT (Standardausgabe), STDIN (Standardeingabe) und STDERR (Standardfehlerausgabe). 5 Verbindung über die in beide Richtungen kommuniziert werden kann. 10 Grundlagen 2.2 Fast Common Gateway Interface (FastCGI) Abbildung 2.4: Architektur der FastCGI Implementierung [22] wird geprüft ob Daten vom Anfragenden gesendet werden. Falls ja, werden diese zurück an den Anfragenden gesendet (Zeile 43) und dort eventuell im Webbrowser oder in einem Terminal angezeigt. In den Zeilen 47 und 48 werden die Umgebungsvariablen ausgegeben. Einmal die Umgebungsvariablen des FastCGI Prozesses und zusätzlich die Umgebungsvariablen des übergeordneten Prozesses. Das bedeutet, bevor der FastCGI Prozess initialisiert ist, sind nur die allgemeinen Umgebungsvariablen eines Linux Prozesses präsent. Wenn der FastCGI Prozess initialisiert ist, sind zusätzliche Umgebungsvariablen vom Webserver oder von der FastCGI Ausführung gesetzt worden. Das Programm kann mit dem Aufruf setzt werden. 1 2 3 4 5 6 7 8 g++ −o echo echo.c −lfcgi in ein ausführbares Programm über- /∗ ∗ ech o . c −− ∗ P r o d u ce a page c o n t a i n i n g a l l FastCGI i n p u t s ∗ C o p y r i g h t ( c ) 1996 Open Market , I n c . ∗ S ee t h e f i l e " LICENSE . TERMS" f o r i n f o r m a t i o n on u s a g e and r e d i s t r i b u t i o n ∗ o f t h i s f i l e , and f o r a DISCLAIMER OF ALL WARRANTIES . ∗/ # i n c l u d e < f c g i _ s t d i o . h> 9 10 11 12 13 14 15 16 s t a t i c v o i d P r i n t E n v ( char ∗ l a b e l , char ∗∗ envp ) { p r i n t f ( "%s : < br > \ n< p r e > \ n " , l a b e l ) ; f o r ( ; ∗ envp ! = NULL ; envp ++) { p r i n t f ( "%s \ n " , ∗ envp ) ; } p r i n t f ( " </ p r e ><p > \ n " ) ; } 17 18 19 20 i n t main ( i n t a r g c , char ∗∗ a r g v ) { char ∗∗ i n i t i a l E n v = e n v i r o n ; in t count = 0 , len = 0; 21 22 23 24 25 26 w h i l e ( FCGI_Accept ( ) >= 0 ) { char ∗ c o n t e n t L e n g t h = g e t e n v ( "CONTENT_LENGTH" ) ; p r i n t f ( " C o n t e n t −t y p e : t e x t / h t m l \ r \ n \ r \ n " " < t i t l e > F as tC G I echo < / t i t l e > " " <h1 > F as tC G I echo < / h1 > \ n " ) ; 27 28 29 i f ( c o n t e n t L e n g t h ! = NULL) { l e n = s t r t o l ( c o n t e n t L e n g t h , NULL, 1 0 ) ; 11 2.3 Server Technologien } else { len = 0; } i f ( l e n <= 0 ) { p r i n t f ( "No d a t a from s t a n d a r d i n p u t . < p > \ n " ) ; } else { i n t i , ch ; p r i n t f ( " S t a n d a r d i n p u t : < br > \ n< p r e > \ n " ) ; f o r ( i = 0 ; i < l e n ; i ++) { i f ( ( ch = g e t c h a r ( ) ) < 0 ) { p r i n t f ( " E r r o r : Not enough b y t e s r e c e i v e d on s t a n d a r d i n p u t <p > \ n " ) ; break ; } p u t c h a r ( ch ) ; } p r i n t f ( " \ n < / p r e ><p > \ n " ) ; } PrintEnv ( " Request environment " , en v ir o n ) ; PrintEnv ( " I n i t i a l environment " , i n i t i a l E n v ) ; 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 } return 0; 49 50 51 Grundlagen } Listing 2.2: Beispiel einer FastCGI Applikation 2.2.3 FastCGI Installation und Verwendung Wie oben erwähnt, kann FastCGI auf mehreren Wegen installiert und genutzt werden. Der erste Weg ist ein direktes Starten der FastCGI Applikation. Eine weiterer Weg ist die Konfiguration des Apache Webservers, damit dieser Server die Schnittstelle zwischen Anwender und der FastCGI Applikation bildet. Im Anhang B.3 findet sich ein Konfigurationsbeispiel für die Konfiguration eines Apache Webservers. In dem im Listing B.8 aufgeführten Beispiel, sind die Zeilen 4, 7 und 13 wichtig und haben folgende Bedeutungen: Zeile 4 Diese Konfigurationszeile setzt einen Alias zur Applikation mit der FastCGI Implementierung. In dieser Konfiguration würde die Webanfrage http://visualgrid-1/comsolfcgi zur Applikation des Speicherorts /home/boincadm/sources/comsol_fcgi/comsol.fcgi verweisen und diese Applikation würde die Anfrage bearbeiten. Zeile 7 Diese Option aktiviert das Ausführen von externen Programmen durch den Apache Webserver. In dieser Konfiguration, wird direkt die vorher genannte Applikation mit FastCGI zur Ausführung aktiviert. Zeile 13 Diese Zeile startet eine Art Daemon FastCGI Applikation. Der Parameter am Ende definiert, dass ein Prozess erstellt werden soll. Dieser Daemon wird beim Starten des Apache Webserver initialisiert. Dadurch wird die Ausführung dieser Applikation beschleunigt, da nicht bei jedem Webzugriff die Ausführung von Beginn an gestartet werden muss. Weiterhin wird diese Konfiguration für die kontinuierliche Aktualisierung der Prozessinformation aus Abschnitt 4.13 benötigt. 2.3 Server Technologien In diesem Abschnitt sind die Servertechnologien erwähnt, mit denen in dieser Arbeit gearbeitet wird. 12 Grundlagen 2.3.1 2.3 Server Technologien Apache Webserver Der Apache Webserver ist ein Stück Software, die dafür zuständig ist Webseiten auf Anfrage bereitzustellen. Erst durch Webserver und das Hypertext Transfer Protokoll (HTTP) wurde das Internet so, wie es heute ist und genutzt wird [13]. Webserver können mehr als nur Webseiten darstellen. Durch Skript-sprachen wie Perl6 , PHP7 , Ruby8 und einer Fülle mehr, können Webserver mit Intelligenz gespickt werden. Webserver sind das Rückgrat unserer Informationsgesellschaft. Dienste wie Facebook9, StudiVZ10 , Twitter11 - nur um die populärsten zu nennen - sind ohne Webserver nicht denkbar. Der Apache Webserver kann mit zahlreichen Funktionen angereichert werden. Diese Funktionen stehen als Module zur Verfügung, die während der Laufzeit zur Konfiguration hinzugefügt werden können. Ein Neustart des Webservers aktiviert diese Module. Bei den meisten Linux Distributionen ist der Apache Webserver als Installationspaket verfügbar. In dieser Arbeit wird die Ubuntu Distribution verwendet, dort kann der Apache Webserver durch einen Aufruf in der Konsole installiert und administriert werden [28]. Ubuntu liefert Administrationsskripts mit, durch die das Aktivieren der benötigten Module auf ein Minimum des Verwaltungsaufwand abfällt. In Listing 2.3 werden die Befehle zum Aktivieren der FastCGI und SSL/TLS Verschlüsselung aufgelistet. 1 $ s u d o a p t −g e t i n s t a l l a p a c h e 2 ap ach e2 −common ap ach e2 − u t i l s <−− Apache Installation 2 3 4 5 $ s u d o a2enmod s s l $ s u d o a2enmod f a s t c g i $ s u d o / e t c / i n i t . d / a p a c h e r e s t a r t <−− a k t i v i e r t d i e zw ei Module Listing 2.3: Aktivierung zweier Apache Module In dieser Arbeit wird der Apache Webserver mit dem Modul für das Secure Socket Layer12 (SSL) und FastCGI verwendet. 2.3.2 MySQL Datenbank MySQL ist eine relationale Datenbank, die durch die Structured Query Language (SQL) bearbeitet wird. Die Struktur einer Datenbank besteht aus Tabellen, die jeweils aus Zeilen bestehen. In jeder Zeile steht ein Datensatz, der wiederum aus mehreren Elementen besteht. Diese Elemente sind in Spalten der Tabelle strukturiert (nachfolgend „Datenspalte“ genannt). Es werden verschiedene Datentypen unterstützt [38, Kapitel 10]. Zwischen mehreren Tabellen können Beziehungen bestehen, den sogenannten Relationen [11]. Das Listing 2.3.2 enthält eine Auflistung, die den Aufbau einer Tabelle verdeutlichen soll. Die erste Ausgabe in den Zeilen 2 − 7 zeigt die verfügbaren Datenbanken. Nach Auswahl der Datenbank comsolwrapper, kann die Struktur der Tabelle app angezeigt werden (Zeilen 12 − 26). In der ersten Spalte stehen die Namen der Datenspalten, in der zweiten Spalte sind einige Datentypen aufgelistet und die letzte Spalte beschreibt für die Datenspalte id, dass der Dezimalwert automatisch inkrementiert wird. Aus der vierten Spalte kann entnommen werden, dass sich die Werte dieser Datenspalte als Primärschlüssel deuten lassen. Durch einen Primärschlüssel können verkettete Relationen zu weiteren Tabellen erstellt werden. Diese Tabellen stehen dann in Abhängigkeit zueinander. Wenn zum Beispiel zwei Tabellen in Relation stehen und in einer, eine 6 http://www.perl.org - eine Programmiersprache - eine Programmiersprache 8 http://www.ruby-lang.org - eine dynamische Interpretersprache 9 http://www.facebook.com - virtuelles Sozialnetzwerk 10 http://www.studivz.de - virtuelles Sozialnetzwerk 11 http://www.twitter.com - virtueller Kurznachrichtendienst 12 http://httpd.apache.org/docs/2.0/ssl - Modul für SSL/TLS Verschlüsselung. 7 http://www.php.net 13 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) Grundlagen Datenreihe gelöscht wird, dann wird automatisch die in Relation stehende Datenreihe in der anderen Tabelle gelöscht, wenn solch eine Aktion definiert ist. Es können verschiedene Aktionen definiert werden. Die MySQL Datenbank kann Tabellen mit einer Größe von 65536 Terabyte (2567 − 1Byte) verwalten [38, Kapitel 1]. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 mysql > show d a t a b a s e s ; +−−−−−−−−−−−−−−−−−−−−+ | Database | +−−−−−−−−−−−−−−−−−−−−+ | information_schema | | comsolwrapper | | mysql | +−−−−−−−−−−−−−−−−−−−−+ 3 rows i n s e t ( 0 . 0 0 s e c ) mysql > u s e c o m s o l w r a p p e r ; D a t a b a s e ch an g ed mysql > d e s c r i b e app ; +−−−−−−−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−+−−−−−−+−−−−−+−−−−−−−−−+−−−−−−−−−−−−−−−−+ | Field | Type | N u l l | Key | D e f a u l t | E x t r a | +−−−−−−−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−+−−−−−−+−−−−−+−−−−−−−−−+−−−−−−−−−−−−−−−−+ | id | in t (11) | NO | PRI | NULL | auto_increment | | create_time | in t (11) | NO | | NULL | | | name | v a r c h a r ( 2 5 4 ) | NO | UNI | NULL | | | min_version | in t (11) | NO | | 0 | | | deprecated | smallint (6) | NO | | 0 | | | user_friendly_name | v a r c h a r ( 2 5 4 ) | NO | | NULL | | | h o m o g en eo u s _ r ed u n d a n c y | s m a l l i n t ( 6 ) | NO | | 0 | | | weight | double | NO | | 1 | | | beta | smallint (6) | NO | | 0 | | | target_nresults | smallint (6) | NO | | 0 | | +−−−−−−−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−+−−−−−−+−−−−−+−−−−−−−−−+−−−−−−−−−−−−−−−−+ 10 rows i n s e t ( 0 . 0 0 s e c ) mysql > SELECT A . id , A . name , A . u s e r _ f r i e n d l y _ n a m e FROM app AS A; +−−−−+−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ | i d | name | user_friendly_name | +−−−−+−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ | 1 | c o m s o l s t a r t e r | COMSOL v4 . 0 Wrapper ( p r o t o t y p e ) | +−−−−+−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ 1 row i n s e t ( 0 . 0 0 s e c ) Das BOINC Framework aus dem nachfolgenden Abschnitt 2.4 enthält in der Grundinstallation 33 Tabellen. Diese Tabellen beinhalten Informationen über die registrierten Benutzer, die zu verwendenden wissenschaftlichen Applikationen mit ihren Plattformdefinitionen und einige weitere Informationen. Die Abbildung 2.5 zeigt die Datenbanktabellen einer BOINC Grundinstallation. Links sind die 33 Tabellen aufgelistet, in der Mitte können diese Tabellen administriert werden, d.h. Datensätze hinzugefügt, editiert oder gelöscht werden. Nicht alle der 33 Datenbanktabellen sind für die Ausführung eines BOINC Projekts notwendig. Die BOINC Grundinstallation liefert u.a. ein Spendensystem mit, durch das Freiwillige Geld an die Organisation hinter einer Projektinstallation spenden können. Sehr gut zu erkennen, ist die oben erwähnte Tabelle app, in der Informationen über die wissenschaftlichen Applikationen abgelegt sind. 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) BOINC (Berkeley Open Infrastructure for Network Computing) ist ein Framework zur Erstellung von hoch-skalierbaren, komplexen und rechenintensiven Problemen im Sinne des Public Resource Computing (PRC) Prinzips. Mit diesem Framework wird der Rechenaufwand in kleine Pakete unterteilt. Diese Pakete werden Workunits genannt. Jeder kann sich an der Arbeit zur Lösung solcher 14 Grundlagen 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) Abbildung 2.5: Aufbau der Datenbanktabellen einer BOINC Grundinstallation Arbeitspakete beteiligen, ganz freiwillig. Freiwillige (engl. Volunteer) registrieren sich bei einem Projekt, installieren sich ein Programm auf ihren Rechner (dem sog. BOINC Client/Manager) und verbinden sich mit den selbst gewählten Authentifizierungsdaten zum Projekt. Nach Authentifizierung kann der Freiwillige sich die wissenschaftliche Applikation mit den zugehörigen Arbeitspaketen herunterzuladen. Da sich Freiwillige an solch einem Projekt anmelden und teilnehmen können, wird dies auch Volunteer Computing genannt. Die Freiwilligen bearbeiten die Arbeitspakete, schicken das Ergebnis an den Projektserver zurück und holen sich ein oder mehrere neue Arbeitspakete. Auf dem Projektserver wird das Ergebnis validiert und bei Gültigkeit zu einem Gesamtergebnis hinzugefügt oder als Einzelergebnis an einem spezifizierten Ort abgelegt. Der Freiwillige kann gleichzeitig an mehreren Projekten teilnehmen. Passionierte Entwickler und Wissenschaftler können sich eine eigene wissenschaftliche Applikation erstellen. Zu diesem Zweck liefert BOINC ein Framework, das es dem Nutzer ermöglicht eine wissenschaftliche Applikation zu erstellen. Diese kann dann zur Lösung von einfachen bis komplexen mathematischen Aufgaben verwendet werden. Die Funktionalitäten des BOINC Framework sind in verschiedene Kategorien eingeordnet und nachfolgend erläutert [4, 2, 3]. 2.4.1 BOINC Server Der BOINC Server bietet mehrere Funktionen, über die nachfolgend ein kleiner Überblick gegeben wird [20]. • Configurations: Der Projektserver kann individuell konfiguriert werden. Die Konfigurationsdateien sind im XML Format. • Work Generator: Jede wissenschaftliche Applikation benötigt Arbeitspakete, die durch einen Generator erzeugt werden. • Validator: Der Validator übernimmt das Validieren der Berechnungsergebnisse. Der Entwickler, Projektadministrator oder Wissenschaftler kann entscheiden, nach welchem Verfahren das Validieren durchgeführt wird. 15 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) Grundlagen • Assimilator: Validierte Ergebnisse werden vom Assimilator zusammengeführt. Die Logik des Assimilator kann projektspezifisch implementiert sein, z.B. können die Einzelergebnisse zusammen geführt oder an einem bestimmten Ort abgespeichert werden. 2.4.2 BOINC Client Der vom Freiwilligen installierte BOINC Client, übernimmt die Steuerung der wissenschaftlichen Applikation und die Kommunikation mit den BOINC Projekten. Der BOINC Client übernimmt zahlreiche Funktionalitäten und Verwaltungsaufgaben, diese sind in der nachfolgenden Auflistung kurz erläutert [20]. • Initializing and Termination: Diese Funktionalität bereitet das BOINC Framework für die Arbeit vor. Dafür stehen Funktionen zur Initialisierung und Beendigung einer Applikation zur Verfügung. In der Initialisierung wird geprüft ob Diagnosemarken gesetzt sind. Die Initialisierung übernimmt die Einstellung von Standardoptionen, die während der Applikationslaufzeit modifiziert werden können. Die Ausführung der Applikation kann in vier Instanzen unterteilt werden: Suspend, Resume, Quit und Abort. Die ersten zwei pausieren bzw. heben eine Pausierung der Ausführung auf. Quit und Abort brechen die Ausführung einer Berechnung ab. • Resolving Filenames: In den Applikationen werden keine festen Dateinamen vergeben. Es wird bei der Programmierung ein generalisierter Name gewählt, der eine assoziative Verknüpfung zu Dateien symbolisiert. Bei einem Benutzer können gleichzeitig mehrere Projektanmeldungen vorhanden sein. Jedes Projekt besitzt seine eigenen projektspezifischen Ein-/Ausgabedaten. Damit diese Dateien nicht in Konflikt zueinander geraten, werden sogenannte Slots erstellt. Diese Slots beinhalten eine oder mehrere Dateien, welche wiederum einen symbolischen Link enthalten. Dieser symbolische Link verweist auf die aktuelle zu verwendende Datei. • I/O13 Wrappers: BOINC ist für die Ausführung unter verschiedenen Betriebssystemen entworfen, u.a. Windows, Linux. Um eine Konsistenz für den Zugriff auf Dateien zu ermöglichen, sollten die im BOINC Framework implementierten Dateifunktionen, z.B. boinc_fopen(char∗ path , char∗ mode), verwendet werden. Bei Windows können u.a. Sicherheitsmechanismen den Zugriff verwehren, bei Linux werden Signale gesendet wenn ein Fehler aufgekommen ist. Die mitgelieferten Funktionen bieten einen Workaround an und schließen automatisch die Datei, wenn die Applikation (unerwartet) beendet wird. • Checkpointing: Eine Applikation kann während der Ausführung jederzeit unterbrochen werden. Dies ist z.B. der Fall, wenn die Prioritäten für die Ausführung so gesetzt sind, dass die Applikation nur ausgeführt werden soll, wenn der Anwender nicht am Rechnersystem arbeitet (Idle Betrieb). Bei der Unterbrechung wird der aktuelle und mögliche Stand der Ausführung in einer Checkpoint-Datei abgesichert und wenn die Applikation weitergeführt werden soll, wiederhergestellt. • Critical Sections: In der Ausführung einer Applikation kann es sein, dass Bereiche nicht unterbrochen werden dürfen. Z.B. wenn die Datenkonsistenz bei der Synchronisation von verschiedenen Rechenabschnitten gegeben sein muss. Diese Bereiche können in atomare Abschnitte implementiert werden. Solche Prozesse sind nicht unterbrechbar. • Atomic File Update: Um eine schnelle Abspeicherung in Dateien zu ermöglichen, liefert das BOINC Framework die Klasse class MFILE{...} mit. Diese Klasse dient als Puffer. Alle 13 Eingabe/Ausgabe 16 (Input/Output) Grundlagen 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) Schreibzugriffe erfolgen in einem temporär angelegten Speicherplatz, der beim Aufruf der Methode int flush () den Inhalt auf das Dateisystem schreibt. • Credit Reporting: Der Status der Abarbeitung kann jederzeit abgefragt werden. Die Beendigung einer Berechnung impliziert einen Punktewert (Credit), der dem Benutzerkonto gutgeschrieben wird. Diese Credits beschreiben das Verhältnis zwischen zur Verfügung gestellter CPU-Zeit14 und einer projektspezifischen Maximalpunktzahl. • Reporting Progress: Mit der Funktion boinc_fraction_done (double fraction_done ) kann der aktuelle prozentuale Wert der Abarbeitung gesetzt werden. Dieser wird dem BOINC Client gemeldet und kann angezeigt werden. • Miscellaneous Data: Dieses sind Daten, die zahlreiche Informationen über die verwendete Applikation, das System, die Ressourcen, u.v.m. liefern. Zur Abfrage muss eine Instanz der Struktur struct APP_INIT_DATA{...} mit der Funktion boinc_get_init_data (APP_INIT_DATA data) gefüllt werden. Diese Informationen werden vom BOINC Client zusammengetragen. • Timing Information: Mit int boinc_wu_cpu_time(double &cpu_time) wird der Gesamtwert der CPU Zeit ermittelt, seitdem ein Arbeitspaket gestartet wurde. Nach Berechnungspausen liefert die Funktion double boinc_elapsed_time () das Delta der Zeit zwischen der Pause und dem aktuellen Zeitpunkt. Diese Funktionen liefern Messwerte über die Ausführung der wissenschaftlichen Applikation. • Standalone Mode: Mit der Funktion int boinc_is_standalone () kann geprüft werden, ob die wissenschaftliche Applikation außerhalb der Kontrolle des BOINC Client gestartet ist. Dieser Modus dient dem Testen und Überprüfen der Funktionen einer wissenschaftlichen Applikation. • Registering a Timer Handler: Wiederkehrende Funktionen können während der Ausführung im BOINC Framework registriert werden. Diese registrierten Funktionen werden mit einem Intervall von einer Sekunde ausgeführt. • Requesting Network Connection: In der Ausführung der wissenschaftlichen Applikation kann dem BOINC Client übermittelt werden, dass eine Netzwerkverbindung zur Verfügung gestellt werden muss, z.B. um Ergebnisse zu versenden. • Diagnostic: Bei der Entwicklung einer Applikation können plattformspezifische Fehler bei den Projektteilnehmern auftreten. Wenn eine wissenschaftliche Applikation abstürzt oder abgebrochen wurde, werden der Stacktrace15 und Informationen über die Ausführung (Wert der Beendigung, Signalidentifikationen, Plattforminformationen und die Datei für die Standardfehlerausgabe) an den Projektserver gesendet. Es kann vom Entwickler der wissenschaftlichen Applikation festgelegt werden, welche Informationen gesendet werden sollen. • Long-Running Applications: Wissenschaftliche Applikationen können mehrere Wochen oder Monate laufen. Damit der Projektserver ein Arbeitspaket nicht bei einem Teilnehmer abbricht, werden durch sogenannte Trickle-Messages während der Ausführung, der aktuelle Stand (CPU Nutzung, Zusammenfassung der Ergebnisse, Befehle die für die Ausführung Bedeutung haben) zwischen dem Teilnehmer und dem Projektserver ausgetauscht. • Graphics: Die wissenschaftliche Applikation kann um die Möglichkeit eines Bildschirmschoners (engl. Screensaver) erweitert werden. Zu diesem Zweck existiert eine Grafikschnittstelle, die vom Entwickler zu implementierende Funktionen definiert. 14 Bei BOINC die Anzahl der Fließkomma- und Ganzzahloperationen für die Lösung einer Rechenaufgabe. und Interpretation des Inhalts des Stacks. 15 Ausgabe 17 2.4 Berkeley Open Infrastructure for Network Computing (BOINC) Grundlagen Abbildung 2.6: Der BOINC Server besteht aus einzelnen Komponenten und diese Komponenten teilen sich einen Speicherort - (engl. A BOINC server consists of several components, sharing several forms of storage) - Quelle: [5] • Graphics Processing Unit (GPU): Die Ausführung auf einer GPU beschleunigt die Ausführungszeit um mindestens einen Faktor zwischen zwei und zehn. Ab der BOINC Client Version 6.10.10 werden neben NVidia auch ATI Grafikkarten unterstützt. 2.4.3 BOINC Architektur und Prinzipien In Abbildung 2.6 und 2.7 ist die Architektur eines BOINC Projekts aufgeführt [5]. BOINC Projekte sind autonom. Jedes Projekt basiert aus verschiedenen Komponenten: Webschnittstelle (engl. web interface), Aufgabenserver (engl. task server) und Datenserver (engl. data server). Diese Komponenten teilen sich Daten aus der Datenbank und der Download-/Upload-Dateiordner. Jeder Client verbindet sich periodisch zum Aufgabenserver um fertige Arbeitspakete zu melden und um neue herunterzuladen. Das mittlere Element „task server“ aus Abbildung 2.6, wird in Abbildung 2.7 näher beschrieben. Den Kern bildet die MySQL Datenbank. Die einzelnen Komponenten arbeiten in eigenen Prozessen und tauschen ihre Daten mit Unterstützung der MySQL Datenbank aus. Dieser Datenaustausch betrifft die beschreibenden Daten eines Arbeitspakets. Konfigurationen der Anwendungen oder Informationen zur Prozessindentifikation, werden nicht in der Datenbank abgespeichert. Solche Informationen werden in Dateien im Dateisystem abgelegt. Die zwei Prozesse links im Bild, kommunizieren über eine Shared-Memory (SHM) Speicherstelle. Die Clients verbinden sich zum „scheduler“, senden Ergebnisse vorheriger Arbeitspakete und erfragen neue Arbeitspakete. Der „scheduler“ ist die Intelligenz eines BOINC Projekts. Dieser steuert welche Arbeitspakete an welchen Client gesendet werden und speichert Ergebnisse zur Überprüfung ab. Die Abbildung 2.8 zeigt, wie eine Installation eines BOINC Projekts in der Laufzeit aussehen kann. Der untere rechte Teil beschreibt eine BOINC Projektinstallation auf einer Unix/Linux Arbeitsmaschine. Die dunklen, vertikalen Elemente sollen Computer beschreiben, die am BOINC Projekt registriert sind. Diese Computer können überall auf der Welt stehen und benötigen nur eine Verbindung zum Projektserver. Es ist unerheblich, ob die Rechner sich direkt am Projektserver anmelden oder ob diese durch ein Firmennetzwerk/privates Netzwerk verbunden sind. BOINC verwendet das TCP/IPSystem16 und kann dadurch auch eine Verbindung zu Computern auf dem Mond herstellen, falls dort welche installiert sein sollten. 16 Transmission 18 Control Protocol/Internet Protocol (TCP/IP) Grundlagen 2.5 Qt Development Framework Abbildung 2.7: Elemente des Aufgabenservers (engl. Components of a BOINC task server) - Quelle: [5] Abbildung 2.8: Darstellung einer Möglichkeit zur Nutzung von BOINC 2.4.4 BOINC Manager Der BOINC Manager ist die direkte Schnittstelle zum Projektteilnehmer und ist eine grafische Anwendung. Mit dieser Anwendung kann der Projektteilnehmer sich an verschiedenen BOINC Projekten anmelden. Diese grafische Komponente ermöglicht das schnelle Einstellen von BOINC Einstellungen, z.B. wie viele Prozessoren generell verwendet werden dürfen, oder wie viel Rechenzeit für die wissenschaftlichen Applikationen zur Verfügung steht. Das Einstellen der Anzahl der Prozessoren kann nicht für bestimmte wissenschaftliche Applikationen vorgenommen werden, d.h. eine Applikation kann nicht x viele Prozessoren für die Ausführung reservieren. Wenn im BOINC Manager drei Prozessoren zur Verwendung freigegeben sind, dann werden diese durch drei verschiedene Arbeitspaketberechnungen der wissenschaftlichen Applikationen genutzt. Es ist unerheblich, welche wissenschaftliche Applikation genutzt wird. 2.5 Qt Development Framework Qt ist ein Framework zur Erstellung von grafischen Benutzeroberflächen für Computersysteme [32, 7]. Das Qt (lies engl. cute, Aussprache [kju:t]) Framework ist für die Plattformen: Embedded Linux, Mac OS X, Windows, Linux/X11, Windows CE/Mobile, Symbian und Maemo verfügbar. Es 19 2.6 Programmiersprachen Grundlagen sind Werkzeuge zur Erstellung von grafischen Formularen vorhanden, die direkt in einem SyntaxHighlighted Editor mit Programmlogik gefüllt werden können. Das Framework liefert einen hohen Funktionsumfang. Die Funktionen decken folgende Bereiche ab: 3D Grafik mit OpenGL17 , Multi-Thread Anwendungen, eingebettete Fenstersysteme, Inter-Objekt Kommunikation, 2D Grafik Darstellung, Multimedia Unterstützung, HTML Render Engine (WebKit), Netzwerkkonnektiviät, XML Unterstützung, Werkzeuge um Skripts für Qt Anwendungen zu schreiben, Datenbankkonnektivitäten, Unterstützung für verschiedene Sprachen Qt kann auf unterschiedliche Weise installiert werden. Die Firma Nokia, die seit 2008 im Besitz von Qt ist, stellt die Quelltextdateien zur Verfügung. Mit diesen Quellen kann eine ganz persönlich angepasste Installation erfolgen. Weiterhin werden Installationspakete angeboten, die eine Übersetzung der Quellen für die unterschiedlichen Rechnerplattformen und verschiedenen Betriebssysteme beinhalten. Durch diese kann eine sofortige Installation erfolgen und das Qt Framework genutzt werden. In dieser Arbeit wird Qt für die grafische Oberfläche von ComsolGridQt verwendet. Die Version der verwendeten Qt Installation ist 4.7.0 mit der Revisionsnummer 1c0f52a091. 2.6 Programmiersprachen Um diese Arbeit verstehen zu können, muss der Leser ein wenig Programmiererfahrung mitbringen. Es ist wünschenswert, wenn der Leser sich mit objektorientierter Programmierung (OOP) auskennt. Es ist nicht verkehrt, ein Basiswissen über Thread-Programmierung zu haben [31, 8]. Für die Leser, die eventuell das ComsolGrid Framework verwenden wollen, wäre es gut zu wissen, wie ein Makefile erstellt und angewendet wird [24]. Die Quellen dieser Arbeit können mit den Compilern gcc bzw. g++ compiliert werden [15]. Sprachdialekte wie Extensible Markup Language (XML) und HyperText Markup Language (HTML) sollten zumindest ansatzweise bekannt sein. Ein Wissen über Unterschiede einer 32-Bit und 64-Bit Rechnerplattform ist hilfreich, um zu erkennen wieso verschiedene Plattformdefinitionen in dieser Masterarbeit von Belang sind. 17 http://www.opengl.org 20 - Ein Industriestandard für Grafikbearbeitungen in 3D. Kapitel 3 Bisherige Arbeiten auf diesem Gebiet Gehirn: ein Organ, mit dem wir denken, dass wir denken. Ambrose Bierce In diesem Kapitel wird kurz auf bisherige Arbeiten eingegangen. Diese Arbeiten beschäftigen sich mit dem Thema BOINC, BOINC Wrapper und verteilten Applikationen. Es wird erwähnt ob von bisherigen Arbeiten partizipiert werden kann. 3.1 Wrapper Implementierungen Das BOINC Framework liefert ein Beispiel für eine Wrapper Implementierung. Dieser Wrapper liest aus einer Datei die Aufgaben (engl. Tasks) und führt diese Tasks sequentiell aus. Der Wrapper unterstützt die Erstellung einer Checkpoint Datei. Das Problem bei dieser Checkpoint Datei ist, dass der Wrapper nur die einzelnen Schritte zwischen mehreren Tasks erkennt und diese in der Checkpoint Datei als Status speichern kann. Das heißt, falls z.B. drei Tasks in der Datei vorhanden sind und der erste Task benötigt durchschnittlich fünf Minuten zur Lösung, der zweite Task 54 Minuten und der letzte Task eine Minute, dann ist es wahrscheinlich, dass der zweite Prozess sehr oft unterbrochen wird. Ob ein Prozess unterbrochen wird oder nicht, liegt am Nutzerverhalten der Anwender und wie die Anwender die Einstellungen im BOINC Manager vorgenommen haben. Weiterhin könnte es sein, dass der Task unterbrochen werden muss, da eventuell das Pausieren nicht für den Task ausgeführt werden kann. Unter Umständen wird der Task alle zehn Minuten abgebrochen und neu gestartet. Dieser Task könnte dann zu einer Langzeitaufgabe mutieren, wie sie bisher nur aus Klimaberechnungsmodellen bekannt sind1 . Dieser BOINC Wrapper leitet die Ausgaben in Dateien um, auch die Eingaben für ein Programm werden umgeleitet. Wenn eine Applikation eine Eingabe benötigt, muss diese vorher in einer Datei zeilenweise aufgeführt werden. Die Applikation liest diese Zeilen als einzelne Eingabebefehle ein. Dies ist ein sehr fehleranfälliges Verfahren. Wenn z.B. Zahlen als Eingabe erwartet werden, dann können Zeicheneingaben den Task zum Absturz bringen. Noch schlimmer, es könnten falsche Ergebnisse berechnet werden. Weiterhin existiert ein zweiter Wrapper mit dem Namen GenWrapper [23]. Dieser kann wie der BOINC Wrapper mehrere Tasks aufnehmen, welche in einem Shell-Skript aufgeführt sind und in einer virtuellen Maschine ausgeführt werden. In dieser virtuellen Maschine sind Linux Standardwerkzeuge enthalten, u.a. tar, awk, sed, zip, etc. Durch diese Werkzeuge können viele kleine Aufgaben bewerkstelligt werden. Wenn eine Berechnung z.B. Dateien aus einem Archiv erhält, können diese entpackt und zur Simulation hinzugefügt werden. Dem GenWrapper ist es egal welche Tasks in dem Shell-Skript definiert sind, sie werden einfach ausgeführt und nach jedem Schritt kann eine 1 http://climateprediction.net - Ein BOINC Projekt um Wettervorhersagen zu berechnen. 21 3.2 Matlab und BOINC Bisherige Arbeiten auf diesem Gebiet Checkpoint Datei erstellt werden. Dieser Wrapper hat auch wie beim ersten Wrapper das Problem, das Arbeitspakete zu Langzeitsimulationen mutieren können. 3.2 Matlab und BOINC In der Vergangenheit wurden Anstrengungen betrieben Matlab mit BOINC zu verheiraten [6]. Es wurde ein System entwickelt mit dem es möglich ist sequentiell arbeitende Matlab Programme auf eine parallel arbeitende und verteilte Infrastruktur zu portieren. Dies wurde erfolgreich für ein Videound Bildverarbeitungssystem durchgeführt. In [14] wird ein Projekt vorgestellt, dass sich zur Aufgabe gemacht hat ein Programm zu schaffen, dass es ermöglicht verschiedenste Legacy Applikationen innerhalb eines BOINC Projekts auszuführen. Es gibt erste Ergebnisse und Kennziffern über die Performance, allerdings keine öffentlich zugängliche Version bzw. Auflistung über die unterstützten Legacy Applikationen. 22 Kapitel 4 ComsolGrid Framework Größte Anstrengungen führen nicht zum Ziel, wenn sie nicht von umfassendem Wissen geleitet werden. Denn was man nicht versteht, lässt sich auch nicht verbessern. W. Edwards Deming 4.1 Grundidee Abbildung 4.1 zeigt die Grundidee von dem ComsolGrid Framework. Das Grundprinzip des BOINC Framework wird übernommen, so dass das System im Prinzip jederzeit mit weiteren wissenschaftlichen Applikationen gestartet werden kann. Die linke Seite in der Abbildung 4.1 zeigt die Systemkomponenten der Serverinstallation (nachfolgend „Projektserver“ genannt). Der Projektserver beinhaltet das BOINC Projekt „Comsolwrapper“. Weiterhin ist der Apache Webserver für die Verarbeitung der Benutzeranfragen, die Schnittstelle ComsolGridFCGI zur Projektadministration und eine MySQL Datenbank für die Datenverwaltung vorhanden. Der Projektserver besitzt eine klare Struktur der Kommunikationswege. Die Datenbank kann nur gelesen und zur Speicherung von Daten genutzt werden. Sie selber besitzt keine „Intelligenz“ oder aktiven Komponenten um Zugriffe nach Außen zu ermöglichen. Der Apache Webserver greift als einzelne Instanz auf die Daten im BOINC Projekt zu, d.h. die Webserverkomponente dient lediglich als Schnittstelle zum BOINC Projekt. Das BOINC Projekt besitzt eigene Programmskripts und Dateien um eine Webseite darzustellen und um die Administration durch eine Webschnittstelle zu ermöglichen. Mit den Programmskripts aus dem BOINC Projekt, kann auf die Datenbankeinträge zugegriffen und diese editiert oder gelöscht werden. ComsolGridFCGI ist die Schnittstelle zum Simulanten. Im Abschnitt 4.6 wird näher auf die Schnittstelle ComsolGridFCGI eingegangen. Die rechte Seite der Abbildung 4.1, zeigt die Komponenten der zum Projektserver verbundenen Benutzer. Beim Benutzer ist mindestens der BOINC Client zu installieren. Der BOINC Manager ist optional, wird aber empfohlen um eine bessere Kontrolle des BOINC Clients zu haben [2, 1]. Um eine erfolgreiche Zusammenarbeit mit dem Projektserver zu ermöglichen, sind Änderungen am BOINC Manager vorgenommen worden. Die Programmlogik wurde um die Möglichkeit erweitert, dass automatisch die installierten COMSOL Multiphysics Versionen ermittelt werden. Dadurch erhält der Benutzer vom Projektserver die passenden Arbeitspakete. Auf diese Modifikationen wird in Abschnitt 4.11 in mehr Detail eingegangen. Die Softwarekomponenten ComsolGridStarter (vgl. Abs. 4.7) und ComsolGridQt (vgl. Abs. 4.16) sind in dieser Arbeit konzipiert und implementiert worden. Die Kommunikation zwischen den Benutzern und dem Projektserver kann auf einer unsicheren (unverschlüsselten) oder abgesicherten (verschlüsselten) Verbindung statt finden. Prinzipiell findet die Kommunikation mit dem Hypertext Transfer Protocol (HTTP) statt. Das HTTP ist im ISO/OSI 23 4.2 Automatische Installation eines BOINC Projekts ComsolGrid Framework Abbildung 4.1: Verteilungsdiagramm mit einem Blick auf die ComsolGrid Komponenten Schichtenmodell in der Anwendungsschicht angesiedelt und kann durch geringen Programmieraufwand und der Einbindung von vorhandenen Programmierbibliotheken verwendet werden. In dieser Arbeit wird die FastCGI Bibliothek verwendet. Diese Bibliothek ermöglicht eine einfache Definition und Erstellung einer HTTP-Kommunikation [29, 30, 10]. Der Apache Webserver wird für die unsichere und sicherere Kommunikation konfiguriert. Für diesen Zweck wird das Secure Socket Layer (SSL) zum Webserver hinzugefügt. Die Idee ist, dass die Benutzer über die unsichere Verbindung und die Anwender und Simulanten über die sicherere Verbindung mit dem Projektserver kommunizieren. Im Abschnitt 4.16 wird auf die Beweggründe eingegangen, weshalb die Anwender und Simulanten eine sichere Verbindung verwenden sollen. Die Benutzer benutzen die unsichere Verbindung, da keine sicherheitsrelevanten Daten transferiert werden müssen. Das BOINC Framework versendet nach der ersten Anmeldung per Definition, keine Namen oder Passwörter zwischen dem BOINC Client und den BOINC Projektservern. Auf diese Besonderheit wird in Abschnitt 4.3 eingegangen. In dieser Arbeit wurde die erfolgreiche Umsetzung mit dem Betriebssystem Linux erreicht. 4.2 Automatische Installation eines BOINC Projekts Die Installation eines BOINC Projekts ist sehr zeitaufwändig und fehleranfällig. Die Hauptentwickler des BOINC Frameworks liefern ein Programm mit, durch dessen Aufruf und der Angabe von verschiedenen Parametern, eine Grundinstallation eines BOINC Projekts durchgeführt wird. Das Programm trägt den Namen $make_project und befindet sich im Unterordner tools/ der BOINC Quellen. Die nachfolgenden Einstellungen sind dabei am wichtigsten: 1. Datenbankzugriffsdaten (Benutzername, Zugriffspasswort), Name der zu installierenden oder vorhandenen Datenbank, 2. der Name des Computers/Hosts, der einmalig sein muss und am besten ein Fully-Qualified Domain Name (FQDN) sein sollte. Nur der lokale Knotenname ohne Vaterdomain kann zu Problemen führen1. 1 Es hat sich gezeigt, dass die Verwendung von einer IP-Adresse oder FQND fehlerfrei funktioniert. Es ist zu beachten, dass dieser gewählte FQND Eintrag in einigen Dateien übernommen wird. Der FQND Eintrag sollte mit Bedacht gewählt sein, eine spätere Änderung kann zu Laufzeitfehlern im Projekt führen. 24 ComsolGrid Framework 4.2 Automatische Installation eines BOINC Projekts 3. Weiterhin muss ein Standardbenutzer, der als Hauptadministrator dient und für die spätere BOINC Administrationsseite eines Projekts benötigt wird, angegeben werden. 4. Das Zielverzeichnis des BOINC Projekts, auf dem Serverknoten, sollte definiert sein und 5. weiterhin können nicht kritische Werte angegeben werden. Diese Werte betreffen eine optional zu installierende Testapplikation, den Ordnernamen der Administrationsseite und den Webnamen zum Zugreifen auf den BOINC Projektscheduler. Die oben Punkte eins bis vier sind immer zu beachten und haben einen Einfluss auf die Integrität eines BOINC Projektes, d.h. die Werte müssen zueinander passen und valide sein. In dieser Masterarbeit wird auf diese Werte nicht näher eingegangen, diese liegen nicht im Fokus dieser Ausarbeitung. Es ist nicht ergiebig, die Webseiten für die Administration oder der Schedulerprogramme eines BOINC Projektes an einem nicht Projekt bezogenen Ort zu installieren2 . In dieser Arbeit wurde ein Programm zur Erstellung einer Standardinstallation implementiert. Dieses Programm ist als Skript für die Bash-Konsole umgesetzt (vgl. Anhang B.2). Der Aufruf dieses Programms ist trivial und wird durch den Befehl $./make_wrapper_project comsolwrapper initiiert. comsolwrapper ist in diesem Fall der Name des Projekts, das installiert wird. Das Programm nimmt folgende Einstellungen vor: • Die Projektwebseite ist unter der Adresse http://192.168.1.200/comsolwrapper zu erreichen. • Die Adresse http://192.168.1.200/comsolwrapper_ops wird für die Projektadministration verwendet. • Scheduleranfragen werden an ein Unterprogramm, im Ordner der Adresse http://192.168.1.200/comsolwrapper_cgi, gestellt. • Die Konfigurationsdateien sind angepasst und für eine wissenschaftliche Applikation mit dem Namen comsolstarter vorbereitet. • Plattformdefinitionen werden zum Projekt hinzugefügt, z.B. x86_64-pc-linux-gnu für eine Intelarchitektur mit 64-Bit Linux Betriebssystem. • Applikationen im Dateiordner $ROOTPRE/sources/comsol_wrapper/apps/comsolstarter/ werden zum Projekt hinzugefügt. • Eingabe-/Ergebnisschablonen aus dem Ordner $ROOTPRE/sources/comsol_wrapper/templates/ werden hinzugefügt. • Sicherheitsmechanismen im Webseitenordner des Projekts werden angepasst, so dass eine Anmeldung auf der Administrationsseite ermöglicht wird und u.a. Aktionen wie das Abbrechen von Arbeitspaketen möglich ist. • Es werden die Dateiordner mit den richtigen Zugriffsrechten gesetzt. Das Programm erstellt beim Aufruf automatisch eine Apache Webserver Konfiguration. Diese erstellte Datei enthält die Aliase zu den oben erwähnten Adressen: Web-, Administration- und Schedulerseite. Eine manuelle Übernahme dieser Eintragungen, in die Apache Webserver Konfiguration, ist notwendig. In den meisten Fällen reicht ein kurzer Aufruf wie $sudo cat comsolwrapper.httpd .conf » /etc/apache2/httpd.conf. Mit diesem Aufruf wird der Inhalt der Datei zu der Apache Webserver Konfiguration hinzugefügt. Dieser Aufruf muss ggf. an die eigenen Bedürfnisse und Wünsche angepasst werden. Eine Installationsanleitung ist auf einschlägigen Webseiten zu finden [33, 34]. 2 Das dies auch anders sein kann, zeigt Abbildung 2.6. Der Webserver und der Scheduler können auf unterschiedlichen Systemen installiert sein. 25 4.3 Sicherheitsaspekte und Authentifizierung ComsolGrid Framework 4.3 Sicherheitsaspekte und Authentifizierung Die Kommunikation zwischen den Benutzern, Simulanten und Anwendern zum Projektserver, findet auf zwei Wegen statt. Zum einen existiert eine Konfiguration für eine sichere Verbindung, durch das Hinzufügen des SSL zum Apache Webserver. SSL wird in diesem Fall als Modul hinzugefügt und kann sofort für die gesamte Webserverkommunikation verwendet werden [36, 37]. Zum anderen findet eine unverschlüsselte Kommunikation statt, die für die Benutzer vorhanden ist. Die sichere Verbindung dient der Erstellung von Parameterstudien. Das Erstellen von Parameterstudien bedarf besonderer Zugriffsrechte, weshalb Authentifizierungsdaten zwischen dem Simulanten und dem Projektserver transferiert werden. Das HTTP ist ein Klartextprotokoll, d.h. jeder der auf der Netzwerkverbindung den Datentransfer abhört, kann diese Authentifizierungsdaten mitlesen und für sich verwenden und so das System korrumpieren. Die Benutzer benötigen keine sichere Verbindung. Das BOINC Framework ist von der Architektur so beschaffen, dass keine sicherheitskritischen Daten versendet werden. Jeder am BOINC Projekt teilnehmende Benutzer, wird durch einen Hash-Wert3 eindeutig beschrieben. Durch diesen HashWert kann ein Host in Kombination mit der E-Mail Adresse des Benutzers, respektive die des Simulanten bei vorgegebener Installation, eindeutig als Benutzer innerhalb eines Projekts zugewiesen werden. Sollte der Wert nicht zu dem in der Datenbank passen, wird der Zugriff zum Projektscheduler abgelehnt. Dadurch ist die Sicherheit gegen unerlaubte Zugriffe gewährleistet. Der Simulant muss bei der Erstellung einer Parameterstudie, in der Anwendung ComsolGriQt seinen Benutzernamen, seine E-Mail Adresse und das passende Passwort angeben. Das Passwort eines Simulanten und denen der Anwender/Benutzer wird im BOINC Framework durch einen HashWert gebildet. Dieser Hash-Wert ist ein Message Digest 5 (MD5) Wert [21] und wird aus der zusammengesetzten Zeichenkette aus Passwort und E-Mail Adresse gebildet. Das Listing 4.1 zeigt den C++-Programmausschnitt zur Erstellung dieses Hash-Wertes. Zeile 12 zeigt außerdem, wie dieser Wert in Verbindung des Benutzernamens zur Authentifizierung des Benutzers durch eine SQLAbfrage realisiert wird. Der Simulant muss nicht für alle Anfragen die Authentifizierungsdaten mitgeben. Bei falschen Authentifizierungsdaten wird eine entsprechende Fehlermeldung ausgegeben. Diese weist allerdings nur darauf hin, dass die Kombination aus Benutzernamen, E-Mail Adresse und Passwort nicht mit den Daten in der Datenbank übereinstimmt. Welche Anfragen diese Authentifizierungsdaten benötigen, wird in Abschnitt 4.12 beschrieben. Weitere Sicherheitsrestriktionen sind denkbar. Der Netzwerkadressbereich für die Simulanten könnte eingeschränkt werden, so dass nur bestimmte Abteilungen in einer Firma oder Institution auf die Administrationsschnittstellen zugreifen können. Diese Art der Absicherung wurde in dieser Masterarbeit nicht weiter beachtet. Dies hat nichts mit dem ComsolGrid Framework zu tun, sondern kann durch weitere Funktionen abgedeckt werden, u.a. Betriebssystemfunktionen wie $ipchains oder $iptables [25]. 1 2 3 4 ... r e m o v e _ q u o t e s ( u s er n am e ) ; remove_quotes ( email ) ; remove_quotes ( password ) ; 5 6 7 8 9 10 h a s h w r a p p e r ∗ h = new md5wrapper ( ) ; i f ( h == NULL) { return 0; } p a s s w o r d = h−>g e t H a s h F r o m S t r i n g ( p a s s w o r d+ e m a i l ) ; 11 3 Dieser Hash-Wert bildet sich aus dem Domainnamen, der IP-Adresse, dem freien Speicherplatz auf der Festplatte und der aktuellen Zeit. 26 ComsolGrid Framework 12 13 4.4 Benutzerrollen und deren Definitionen s t d : : s t r i n g q= " where name = ’ " + u s er n am e + " ’ and p as s w d _ h as h = ’ " + p a s s w o r d+ " ’ " ; ... Listing 4.1: Bildung des Passwort Hash-Wertes für die Authentifizierung an einem BOINC Projekt 4.4 Benutzerrollen und deren Definitionen Jeder Simulant und Anwender erhält innerhalb eines Projekts eine Benutzerrolle. Benutzerrollen beschreiben Regelsätze, um Zugriffe auf Ressourcen zu regulieren, z.B. der Simulant XY darf nur Arbeitspakete für das Projekt IJ erstellen. 1 2 3 4 5 6 7 CREATE TABLE ‘ co m s o lw r ap p er ‘ . ‘ c o m s o l g r i d _ r o l e s ‘ ( ‘ id ‘ INT NOT NULL AUTO_INCREMENT PRIMARY KEY , ‘ u s e r i d ‘ INT NOT NULL , ‘ ap p id ‘ INT NOT NULL , ‘ r o l e ‘ INT ( 5 ) NOT NULL , ‘ d e s c r i p t i o n ‘ VARCHAR( 254 ) NOT NULL ) ENGINE = MYISAM ; Listing 4.2: Datenbanktabelle zur Umsetzung von Benutzerrollen Benutzerrollen sind nicht bei der Grundausstattung eines BOINC Projektes vorhanden und müssen durch eigene Umsetzung beigesteuert werden. Zu diesem Zweck wurde eine neue Datenbanktabelle zur MySQL Datenbankstruktur hinzugefügt. Das Listing 4.2 zeigt das SQL-Statement, um die benötigte Tabelle in der Datenbank zu erstellen. Es werden fünf Felder erstellt, die nachfolgend beschrieben werden: id Dies ist eine eindeutige Identifikationsnummer für einen Rolleneintrag und wird automatisch bei neuen Einträgen um Eins erhöht. Dieser Wert gilt allein für eine eindeutige Zuordnung und hat keinen weiteren Einfluss auf die logische Struktur dieser Tabelle. Mit diesem Zahlenwert soll ein eindeutiges Modifizieren oder Löschen des Eintrags möglich sein. userid Der Wert in diesem Feld beschreibt die Zuordnung der Benutzerrolle zu einem registrierten Benutzer. appid Dies ist eine Identifikation des Benutzers zu einer Applikation. Dadurch können bestimmte Benutzerrollen für unterschiedliche wissenschaftliche Applikationen definiert werden. role Dieser Wert beschreibt die Benutzerrolle und ist in den ComsolGrid Quellen hard-codiert und die logische Struktur eines Werts kann zur Laufzeit des Programms nicht geändert werden. In der Testversion sind folgende Rollen definiert: (1) Administrator, (2) Developer (im Deutschen „Entwickler“ ), (3) Scientist (im Deutschen „Wissenschaftler“) und (4) Tester. Die Rollen werden in der Tabelle 4.1 näher beschrieben. description Dies ist ein beschreibender Text, mit einer festgelegten maximalen Zeichenkettenlänge. Diese Beschreibung muss kurz und prägnant sein, z.B. Benutzer dürfen Arbeitspakete für Projekt XY erstellen. Im Abschnitt 4.12 wird beschrieben, welche Kontrollbefehle in den jeweiligen Benutzerrollen ausgeführt werden können, speziell in der Testversion des ComsolGrid Framework. Zur Unterscheidung der Rollen und zur Ermöglichung einer eigenen Implementierungsstrategie, sind die Rollen mit den Standardwerten aus Listing 4.3 definiert. Es können weitere Rollendefinitionen zum ComsolGrid Framework hinzugefügt werden. Es ist eine nochmalige Kompilierung der ComsolGrid Quellen nötig, wenn an den Rollen etwas modifiziert wird. 27 4.5 ComsolGrid Framework - Architektur und Abhängigkeiten Rollenname Administrator ComsolGrid Framework Beschreibung Diese Benutzer dürfen neue Versionen von wissenschaftlichen Applikationen zu einem BOINC Projekt hinzufügen und deren Konfigurationen ändern. Benutzer mit dieser Rollendefinition dürfen alle Funktionen nutzen. Mitglieder dieser Gruppe, dürfen für die definierten wissenschaftlichen Applikationen Arbeitspakete erstellen, löschen und abbrechen. Ergebnisse dürfen von diesen Benutzern eingesehen und als brauchbar markiert werden. Diese Rolle wird hauptsächlich von einem ComsolGrid Framework Entwickler verwendet und ist nur für Testzwecke vorhanden. In einem produktiven System, sollte diese Rolle gelöscht werden. Das Testsystem enthält zum Teil Regelsätze die es erlauben, dass die Rolle Tester jeden Zugriff auf alle Funktionen erhält. Developer Scientist Tester Tabelle 4.1: Rollenbeschreibungen der Zugriffsregelungen bei einem ComsolGrid Projekt 1 2 3 4 5 6 / / Roles # d e f i n e CG_UNKNOWN # d e f i n e CG_ADMINISTRATOR # d e f i n e CG_DEVELOPER # d e f i n e CG_SCIENTIST # d e f i n e CG_TESTER 0 1 2 4 8 // // // // // 00000000 b 00000001 b 00000010 b 00000100 b 00001000 b Listing 4.3: Definition der Benutzerrollen im ComsolGrid Framework 4.5 ComsolGrid Framework - Architektur und Abhängigkeiten Alle Funktionalitäten, wenn möglich, wurden in einer Bibliothek im C++ Namensraum ComsolGrid implementiert. Die Bibliothek hat den Namen libcomsolgrid.so. Die Abhängigkeiten dieser Bibliothek zu den eingebundenen Bibliotheken und implementierten Anwendungen sind in der Abbildung 4.2 aufgestellt. Der linke obere Bereich zeigt die Bibliotheken die von dem BOINC Framework mitgeliefert werden. Oben rechts stehen Bibliotheken die entweder von den BOINC Bibliotheken oder direkt von der libcomsolgrid.so genutzt werden. Die Bibliothek libh++.so bietet Funktionen um mit MD5 Kodierungen umzugehen [16]. Der untere Bereich zeigt die Applikationen, die in dieser Arbeit implementiert sind oder modifiziert worden. Die Applikationen ComsolGridFCGI, ComsolGridStarter, ComsolGridQt und BOINC Manager benötigen die Bibliothek libcomsolgrid.so um lauffähig zu sein, deshalb ist in der Abbildung eine Komposition als Assoziation gezogen. Der ComsolValidator und ComsolAssimilator sind in der aktuellen Testversion nicht von der Bibliothek abhängig, dies kann sich in weiteren Entwicklungen ändern. Die Bibliothek libcomsolgrid.so besitzt einige Implementierungen, die dem Entwickler bei der Erstellung einer neuen wissenschaftlichen Applikation eine Erleichterung bieten. In Listing 4.5 sind die Prototypen der Implementierungen aufgelistet und jeweils eine kleine Erläuterung dazu aufgeführt. Für eine komplette Referenz, inklusive Funktionsaufrufgraphen oder Abhängigkeitsdiagrammen der einzelnen Elemente, wird auf die Quellen des ComsolGrid Frameworks verwiesen. Die Quellen wurden mit einer Doxygen4 Formatierung ausgestattet. Mit dieser Formatierung wird eine 4 http://www.doxygen.org 28 - Ein Dokumentationssystem für die Programmiersprachen C/C++, Java und IDL. ComsolGrid Framework 4.5 ComsolGrid Framework - Architektur und Abhängigkeiten Abbildung 4.2: Architektur des ComsolGrid Frameworks und den implementierten Anwendungen sehr gut strukturierte Dokumentation generiert, verschiedene Ausgangsformate können als Zielformat ausgewählt werden, z.B. HTML oder Manpages. Es gilt zu beachten, dass einige in Listing 4.5 erwähnten Prototypen, in den nachfolgenden Abschnitten erläutert werden und daher nicht mit einer hohen Detailtiefe beschrieben sind. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 / ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ S t r u k t u r e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗ ∗ / / / S t e l l t e i n e B e n u t z e r r o l l e dar . s t r u c t COMSOL_ROLES {} / / E r l e i c h e r t den Z u g r i f f a u f d i e B e n u t z e r o l l e n d e f i n i t i o n e n i n d e r D a ten b a n k . s t r u c t DB_COMSOL_ROLES {} / / S t r u k t u r zum E i n l e s e n d e r ’ co m s o l . xml ’ D a t e i i n d e r C o m s o l G r i d S t a r t e r Implementierung . s t r u c t ComsolXML {} / / P a r s t e i n e A u f l i s t u n g von COMSOL M u l t i p h y s i c s V e r s i o n e n a u s ein em XML−Baum . s t r u c t VersionXML {} / / P a r s t e i n e A u f l i s t u n g von P l a t f o r m d e f i n i t i o n e n a u s ein em XML−Baum . s t r u c t PlatformXML {} / / P a r s t e i n e L i s t e von AppXML E l e m e n t e n . s t r u c t AppsXML {} / / P a r s t e i n e A u f l i s t u n g von A p p l i k a t i o n s d e f i n i t i o n e n a u s ein em XML−Baum . s t r u c t AppXML {} / / Parst d ie I n fo r m a tio n en ueber P r o z es s in fo r m a tio n en . s t r u c t StatusXML {} / / E n th a elt I n fo r m a tio n en ueber einen Parametersatz , wich tig fu er ein e Parameterstudie . s t r u c t P a r a m e t e r {} / / E n t h a e l t d i e I n f o r m a t i o n e n beim H o ch la d en e i n e r n eu en P a r a m e t e r s t u d i e . s t r u c t ComsolStudyXML {} 24 25 26 27 28 29 30 31 32 33 / ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ K l a s s e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗ ∗ / / / Uebernimmt d i e K o n t r o l l e e i n e s P r o z e s s e s und v e r a r b e i t e t g e s e n d e t e S i g n a l e w ie SIGSTOP , SIGUSR , SIGCONT . c l a s s Task {} / / E r s t e l l t e i n e n T h r ea d d e r I n f o r m a t i o n e n u e b e r P r o z e s s e e i n h o l t . c l a s s I n f o s {} / / E r m i t t e l t d i e V e r s i o n s d e f i n i t i o n e n a u s e i n e r V e r s i o n s z e i c h e n k e t t e von COMSOL Multiphysics . c l a s s V e r s i o n s {} 34 29 4.5 ComsolGrid Framework - Architektur und Abhängigkeiten 35 36 37 38 39 40 41 42 43 44 45 46 47 ComsolGrid Framework / ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗ T y p d e f i n i t i o n e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ / /∗ ∗ L i s t e n d e f i n i t i o n e n um m eh r er e E l e m e n t e a b s p e i c h e r n ∗ z u ko en n en . ∗/ typedef s td : : vector < s td : : s tring > S t r i n g L i s t ; t y p e d e f s t d : : v e c t o r <PlatformXML > P l a t f o r m L i s t ; typedef s t d : : vector <Versions > V e r s i o n s L i s t ; t y p e d e f s t d : : v e c t o r < P a r a m e t e r > Range ; t y p e d e f s t d : : v e c t o r <Range > Ranges ; t y p e d e f s t d : : v e c t o r <AppXML> A p p L i s t ; 48 49 50 51 52 53 54 55 56 57 / ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗∗ ∗ ∗ ∗∗ ∗ ∗ / / / E r m i t t e l t d i e B e n u t z e r r o l l e e i n e s B e n u t z e r s , S i m u l a n t e n und Anwenders . i n t r o l e _ u s e r ( DB_USER u s e r , DB_COMSOL_ROLES &r o l e , FCGI_FILE ∗ l o g f i l e ) / / P r u e f t ob d e r B e n u t z e r , S i m u l a n t o d e r Anwender s i c h r i c h t i g a u t h e n t i f i z i e r t . i n t a u t h e n t i c a t e _ u s e r ( DB_USER &u s e r , s t d : : s t r i n g username , s t d : : s t r i n g em ail , s t d : : s t r i n g p as s w o r d , FCGI_FILE ∗ l o g f i l e =NULL) / / P a r s t den XML−Baum m i t A u t h e n t i f i z i e r u n g s d a t e n . i n t p a r s e _ a u t h ( FILE ∗ in , DB_USER &u s e r , FCGI_FILE ∗ l o g f i l e ) 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 / ∗ ∗∗∗∗∗∗∗∗∗∗ ∗ F u n k t i o n e n f u e r C o m s o l G r i d S t a r t e r und dem BOINC Manager ∗∗∗∗∗∗∗∗∗∗ ∗ / / / E r m i t t e l t d i e PID d e s e r s t e n K i n d p r o z e s s e i n e r b e s t i m m t e n P r o z e s s i d e n t i f i k a t i o n s n u m m e r ( PID ) . p i d _ t g e t F i r s t C h i l d r e n ( p i d _ t p id , u i d _ t u id , char ∗ p a t t e r n ) / / S u c h t nach a u s f u e h r b a r e n COMSOL M u l t i p h y s i c s A p p l i k a t i o n e n . V e r s i o n s L i s t lookup ( ) / / S u c h t nach a u s f u e h r b a r e n COMSOL M u l t i p h y s i c s A p p l i k a t i o n e n . s t d : : s t r i n g l o o k u p ( ComsolGrid : : ComsolXML ∗ cxml ) / / Kopiert eine Datei . i n t f i l e c o p y ( s t d : : s t r i n g src , s t d : : s t r i n g dest ) / / S p e i c h e r t Daten i n e i n e r D a t e i . i n t s t o r e ( char ∗ d a t a , i n t l e n , s t d : : s t r i n g d e s t ) / / E r m i t t e l t den Typ d e r A n f r a g e vom B e n u t z e r , S i m u l a n t e n . i n t cxmlMode ( char ∗ l i n e ) / / E r m i t t e l t den Typ e i n e r D a t e i . i n t f i l e _ t y p e ( s t d : : i f s t r e a m &i f s ) / / E r m i t t e l t den ’ f r a c t i o n _ d o n e ’ Wert d e r d u r c h f u e h r e n d e n S i m u l a t i o n . char ∗ g e t P r o c e s s ( char ∗ p e r c e n t , i n t b u f s i z e , FILE ∗ f d ) /∗ ∗ E r m i t t e l n d i e P a r a m eter d i e e v e n t u e l l i n e i n e r ∗ S i m u l a t i o n s d a t e i vo r h a n d en s i n d . ∗/ i n t p a r a m e t e r _ c o m s o l _ g e n e r a l ( s t d : : i f s t r e a m &i f s , s t d : : s t r i n g f i l e n a m e ) S t r i n g L i s t p a r a m e t e r _ c o m s o l 3 5 ( s t d : : i f s t r e a m &i f s , s t d : : s t r i n g f i l e n a m e ) S t r i n g L i s t p a r a m e t e r _ c o m s o l 4 0 ( s t d : : i f s t r e a m &i f s , s t d : : s t r i n g f i l e n a m e ) S t r i n g L i s t parameter_comsol ( s td : : s t r i n g filename ) 86 87 88 89 90 91 92 93 94 30 / ∗ ∗∗∗∗∗∗∗∗∗∗ ∗ Funktionen fuer Z eichenketten ∗∗∗∗∗∗∗∗∗∗ ∗ / / / T e i l t e i n e Z e i c h e n k e t t e in E i n z e l e l e m e n t e , ’ elems ’ i s t das Trennwort . S t r i n g L i s t& s p l i t ( s t d : : s t r i n g &s , char d elim , S t r i n g L i s t &elem s ) / / T e i l e e i n e Z e i c h e n k e t t in E i n z e l e l e m e n t e , ’ delim ’ i s t das T r ennz eichen . S t r i n g L i s t s p l i t ( s t d : : s t r i n g &s , char d e l i m ) / / W a n d elt S c h r a e g s t r i c h e i n G e g e n s c h r a e g s t r i c h e um , von BOINC uebernommen . ComsolGrid Framework 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 4.6 ComsolGridFCGI - Serverschnittstelle für Parameterstudien v o i d s l a s h 2 b a c k s l a s h ( char ∗ p ) / / E n t f e r n t G a e n s e f u e s s c h e n , von BOINC uebernommen . v o i d r e m o v e _ q u o t e s ( s t d : : s t r i n g &p ) / / E r m i t t e l t d ie P o s i t i o n ein er Z e i c h e n k e t t e in ein er anderen Z e i c h e n k e t t e . i n t s t r p o s ( char ∗ h a y s t a c k , char ∗ n e e d l e ) / / L i e s t d i e n a e c h s t e Z e i l e a u s ein em S p e i c h e r p l a t z , Z e i l e n s i n d d e f i n i e r t m i t dem Ende ’ n e e d l e ’ . char ∗ l i n e ( char ∗ buf , i n t l e n , c o n s t char ∗ x m l p a r t , char ∗ n e e d l e ) / / E n t f e r n t a l l e Zeichen ’ elem en ts ’ auf der l i n k e n S e i t e der Z e i c h e n k e t t e ’a ’ . s t d : : s t r i n g l t r i m ( s t d : : s t r i n g &a , s t d : : s t r i n g e l e m e n t s ) / / E n t f e r n t a l l e Zeichen ’ elem en ts ’ auf der r ech ten S e i t e der Z e i c h e n k e t t e ’a ’ . s t d : : s t r i n g r t r i m ( s t d : : s t r i n g &a , s t d : : s t r i n g e l e m e n t s ) / / R u f t ’ l t r i m ’ und ’ r t r i m ’ n a c h e i n a n d e r a u f . s t d : : s t r i n g t r i m ( s t d : : s t r i n g &a , s t d : : s t r i n g e l e m e n t s ) / / E n t f e r n t d i e Z eichen aus ’ c h a r a c t e r ’ in der Z e i c h e n k e t t e ’ t e x t ’ . v o i d r e m o v e _ c e r t a i n _ c h a r a c t e r s ( s t d : : s t r i n g &t e x t , c o n s t char ∗ c h a r a c t e r ) / / E n t f e r n t a l l e Z eichen aus s er d i e aus ’ c h a r a c t e r ’ in der Z e i c h e n k e t t e ’ t e x t ’ . v o i d n o t _ r e m o v e _ c e r t a i n _ c h a r a c t e r s ( s t d : : s t r i n g &t e x t , c o n s t char ∗ c h a r a c t e r ) / / E n t f e r n t a l l e Z eichen aus s er d i e aus ’ c h a r a c t e r ’ in der D a t e n k e t t e ’ data ’ . v o i d n o t _ r e m o v e _ c e r t a i n _ c h a r a c t e r s ( c o n s t char ∗ d a t a , c o n s t i n t s i z e , char ∗ r e s u l t _ d a t a , i n t ∗ r e s u l t _ s i z e , c o n s t char ∗ c h a r a c t e r ) / / E r m i t t e l t d i e E r w e i t e r u n g e i n e s D a tein a m en s . s t d : : s t r i n g f i l e _ e x t e n s i o n ( s t d : : s t r i n g name ) 116 117 118 119 120 121 / ∗ ∗∗∗∗∗∗∗∗∗∗ ∗ F u n k t i o n e n f u e r ComsolGridFCGI ∗∗∗∗∗∗∗∗∗∗ ∗ / / / E r s t e l l t d ie Eingabedaten fu er A r b e i t s p a k e t e . S t r i n g L i s t c r e a t e _ i n f i l e s ( SCHED_CONFIG ∗ c o n f i g , char ∗ n am etp l , i n t s i z e , Ranges ∗ r a n g e s , i n t ∗ e r r o r , FCGI_FILE ∗ l o g f i l e , i n t ap p id , i n t w u _ h i g h e s t _ i d ) 4.6 ComsolGridFCGI - Serverschnittstelle für Parameterstudien Die Applikation ComsolGridFCGI (nachfolgend „ComsolGridFCGI“ oder „Anwendung“ genannt) ist nach dem ComsolGridStarter in Abschnitt 4.7, das zweit wichtigste Element im ComsolGrid Framework. ComsolGridFCGI verarbeitet die eingehenden HTTP/XML-Requests der Simulanten und erstellt die passenden Antworten (vgl. Abs. 4.12). Die Anwendung ist in C++ geschrieben, verbindet sich zum Datenbankserver, verarbeitet XML-Bäume (vgl. Abs. 4.12), protokolliert die Ereignisse in einer Protokollierungsdatei, läuft als Prozess im Apache Webserver, übernimmt die Arbeitspaketerstellung (vgl. Abs. 4.14), liefert Informationen über Prozesse (vgl. Abs. 4.13), gibt Auskunft über die installierten wissenschaftlichen Applikationen (s. Listing 4.18) und liefert bei Fehler oder Erfolg der Verarbeitung, die richtigen Fehlernummern (s. Listing 4.21). In Abbildung 4.3 ist das Zustandsdiagramm von ComsolGridFCGI abgebildet. Dies ist eine abstrakte Sichtweise auf die implementierte Struktur und enthält nicht alle Zustände, sondern nur die für die Grundstruktur elementaren Zustände. Der linke Bereich in der Abbildung stellt den Startprozess von ComsolGridFCGI dar. Argumente, die beim Starten angegeben sind, werden verarbeitet und die Konfigurationsdatei wird eingelesen. Mit den Daten aus der Konfigurationsdatei wird eine Datenbankverbindung hergestellt. Dies ist die Datenbank des BOINC Projekts, daher müssen in der Konfiguration die selben Daten wie bei der BOINC Projektkonfiguration angeben sein. Eine Erleichterung ist implementiert, es wird standardmäßig die selbe Konfigurationsdatei geöffnet wie sie auch beim BOINC Projekt verwendet wird. Der Standarddateiname der Konfigurationsdatei lautet project.xml und daher reicht ein symbolischer Link auf diese Datei. Dieser symbolische Link wird muss von der Konfigurationsdatei zu dem Dateiordner gesetzt werden, in dem sich ComsolGridFCGI befindet. Bevor auf eingehende Webanfragen reagiert wird, muss der Prozess für die Prozessinformationsbeschaffung erstellt werden. In Abschnitt 4.13 wird erläutert, dass der Prozess 31 4.6 ComsolGridFCGI - Serverschnittstelle für Parameterstudien ComsolGrid Framework Abbildung 4.3: Das Zustandsdiagramm von ComsolGridFCGI in einem eigenen Thread abläuft und kontinuierlich Informationen über definierte Prozesse einholt. Somit stehen die Informationen sofort zur Verfügung, egal wann der Simulant oder Anwender diese erfragt. Nach den oben erwähnten Schritten, geht ComsolGridFCGI in den Wartezustand. Im Wartezustand wartet der Prozess auf eingehende Webanfragen, dies wird durch eine Dauerschleife realisiert und die Funktion FCGI_Accept() liefert einen Wert ≥ 0 wenn eine Verbindung akzeptiert wurde. Wenn eine Verbindung akzeptiert wurde, werden die Daten des Simulanten oder Anwenders gelesen und der Typ der Anfrage ermittelt. Der Zustand „Anfrage Verarbeiten“ ist als Switch-Case Konstrukt aus mehreren If-Else Elementen implementiert. Für jeden Typ der Anfrage existiert ein Unterzweig. In diesen Unterzweigen wird die richtige Verarbeitung durchgeführt und eine Antwort für den Simulanten oder Anwender erstellt. Folgende Dinge müssen bei der Verwendung von ComsolGridFCGI beachtet werden! Wenn ComsolGridFCGI innerhalb eines Apache Webserver gestartet ist, dann müssen Zugriffsbeschränkungen auf Verzeichnisse innerhalb des BOINC Projektes geändert werden. ComsolGridFCGI läuft in diesem Fall mit der Benutzer- und Gruppenzugehörigkeit des Apache Webserver. Bei einer Linux Ubuntu Systemumgebung ist das der Benutzer www-data und die Gruppe www-data. Ein BOINC Projekt sollte, nach den Vorschlägen aus der BOINC Internetgemeinde, mit dem Benutzer boincadm und der Gruppe boincadm gestartet werden. Weiterhin erstellt ComsolGridFCGI bei der Verarbeitung zur Erstellung von Parameterstudien Dateien, die für Arbeitspakete relevant und benötigt werden. Diese haben bei der Erstellung den Benutzereigentümer und die Gruppenzugehörigkeit www-data. Wenn diese Dateien in einem Unterordner des BOINC Projektes mit Zugriffsbeschränkung erstellt werden sollen, dann funktioniert dies nicht, aufgrund der Tatsache, dass die Zugriffsrechte dies nicht zulassen. Somit können keine Parameterstudien angelegt werden. Es gibt mehrere Möglichkeiten dieses Problem zu beheben: 1. Der Benutzer boincadm wird zu der Gruppe www-data hinzugefügt und die Gruppenrechte für die Up-/Download-Dateien auf Lesen+Schreiben gesetzt, oder 2. der Apache Webserver läuft mit den selben Benutzer- und Gruppenidentifikationen wie das BOINC Projekt. Es ist schwer zu sagen welche Möglichkeit die bessere ist. Dies wird dem Administrator oder den Restriktionen der Firma überlassen. Für die Testzwecke in dieser Masterarbeit ist die erste Möglichkeit gewählt worden. 32 ComsolGrid Framework 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL ComsolGridFCGI liest eine Konfigurationsdatei ein, diese hat den Namen comsol_fcgi.xml. In dieser Datei können Angaben zum Speicherort der hoch geladenen Dateien gemacht werden. Dadurch können die oben genannten Probleme umschifft werden, da ein Zielverzeichnis mit passenden Zugriffsrechten definiert sein kann. Die unterstützten Parameter sind im Listing 4.4 aufgelistet. 1 2 3 4 5 6 7 <comsol_fcgi > < l o g f i l e > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / l o g _ v i s u a l g r i d −1/ c o m s o l _ f c g i . lo g </ l o g f i l e > < u p lo a d d ir > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / c o m s o l g r i d _ u p l o a d / < / u p lo a d d ir > < u p l o a d d i r t p l > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / t e m p l a t e s / < / u p l o a d d i r t p l > < i n f o _ r e f r e s h _ i n t e r v a l >10 </ i n f o _ r e f r e s h _ i n t e r v a l > <wu_name_tpl > w u _ co m s o lg r i d _%d_%05d < / wu_name_tpl > </ c o m s o l _ f c g i > Listing 4.4: Beispielkonfiguration der Applikation ComsolGridFCGI Die einzelnen Parameter in der Konfigurationsdatei haben folgende Bedeutungen: <comsol_fcgi> Dieser XML-Tag umschließt die Konfigurationseinstellungen und muss mit </comsol_fcgi> beendet werden. <logfile> Definiert die Protokollierungsdatei, in die Meldungen über Aktionen während der Laufzeit von ComsolGridFCGI geschrieben werden. <uploaddir> Setzt den Ordnernamen oder Pfad in dem die Simulationsdateien beim Hochladen zwischengespeichert sind. Der Benutzer mit dem der Apache Webserver läuft, muss die Rechte zum Erstellen von Dateien in diesem Ordner haben. <info_refresh_interval> Das Zeitintervall indem die Prozessinformationen aktualisiert werden. <wu_name_tpl> Dieses XML-Tag beschreibt das Format der Namen der Arbeitspakete (engl. Workunit, WU). Das Format kann durch Standardformatierungselemente beschrieben sein, z.B.%d für eine Dezimalzahl oder %s für eine Zeichenkette. Diese Elemente können z.B. in den Manpages zu den Standard C-Funktionen $man 3 printf nachgelesen werden5. Die Implementierung von ComsolGridFCGI muss an das Format angepasst sein. Grundsätzlich wird bei der Erstellung von Arbeitspaketen die Identifikationsnummer der wissenschaftlichen Applikation und eine inkrementierende Identifikationsnummer für jedes Arbeitspaket erstellt. Es wird daher empfohlen den hinteren Teil, des im Listing 4.4 gezeigten Formats, zu übernehmen _%d_%05d. 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL Der Kern dieser Arbeit ist die Wrapper Implementierung „ComsolGridStarter“. Durch diese Implementierung wird es erst ermöglicht, dass die COMSOL Multiphysics Simulationssoftware mit BOINC gestartet und durch das BOINC Framework gesteuert werden kann. Die Implementierung ist in der Testversion vom ComsolGrid Framework nur auf Linux Systemen vorhanden und getestet. 4.7.1 COMSOL Multiphysics Prozesskontrolle Die Abbildung 4.4 enthält das abstrakte Aktivitätendiagramm der ComsolGridStarter Implementierung und gibt einen Überblick über die Komplexität der darunterliegenden Architektur. Die Architektur kann grob in drei Bereiche unterteilt werden: 5 Die meist genutzten Elemente sind: %d=Dezimalzahl, %f=Fließkommazahl (float), %lf=Fließkommazahl (double) und %s=Zeichenkette (char*). 33 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL ComsolGrid Framework 1. Dem BOINC Manager, der das Starten und Steuern von ComsolGridStarter übernimmt, 2. der Implementierung des Wrapper „Comsolstarter“ selbst und 3. die COMSOL Multiphysics Simulationssoftware und der damit einhergehenden virtuellen Java Maschine6 . COMSOL Multiphysics ist durch die Nutzung von Java unabhängig von der Plattform ausführbar. Diese Unabhängigkeit wird durch das Verwenden einer virtuellen Maschine erreicht, die zwischen den Programmbefehlen der Ausführung und der Plattformarchitektur gestartet wird und die Umsetzung der Programmbefehle zu den plattformspezifischen Instruktionen übernimmt. Das ist auch schon das Problem der eingangs erwähnten Wrapper Implementierungen aus Abschnitt 3.1, mit denen die COMSOL Multiphysics Simulationssoftware nicht steuerbar ist. Listing 4.5 zeigt die Prozessstruktur einer COMSOL Multiphysics Ausführung der Major Release Version 3.5x und das Listing 4.6 zeigt die Prozessstruktur eines Major Release in Version 4.0a. Die Zahlen in den Klammern sind die Prozessidentifikationsnummern (PID). Es ist zu sehen, dass COMSOL mit der PID(30521) läuft und als Kindprozess eine Java Instanz mit der PID(30674) besitzt. Diese Java Instanz besitzt weitere Java Kindprozesse. Die vorhandene Wrapper Implementierung [23] arbeitet mit der PID(30521), um das Programm zu steuern. Wenn der Prozess mit der PID(30521) das Signal SIGSTOP empfängt, würde dieser Prozess stoppen, aber der Java Prozess mit der PID(30674) und die Kindprozesse arbeiten in diesem Fall weiter. Für das weitere Verständnis ist es wichtig zu wissen, dass das Signal SIGSTOP nicht den Prozess so stoppt, dass dieser beendet ist. Dieses Signal pausiert die Ausführung, die zu einem späteren Zeitpunkt wieder aufgenommen werden kann. Der pausierte Prozess verbleibt während dieser Zeit im Speicher. Bei der COMSOL Multiphysics Version 4.0a verhält es sich gleich. Ein SIGSTOP für den Prozess PID(15895) stoppt nicht den gesamten Prozess, es wird die PID(15919) benötigt. Der COMSOL Multiphysics Prozess ist somit nicht auf diesem Wege steuerbar. Wenn allerdings der Java Prozess mit der PID(30674) ein SIGSTOP empfängt, dann wird der Prozess inklusive der Kindprozesse gestoppt. 1 2 3 s u ( 3 0 4 4 3 )−−−b a s h ( 3 0 4 5 2 )−−−comsol ( 3 0 5 2 1 )−−−j a v a ( 3 0 6 7 4 )−+−{j a v a } ( 3 0 6 7 5 ) | −{ j a v a } ( 3 0 6 7 6 ) ‘ −... Listing 4.5: Prozessstruktur von COMSOL Multiphysics 3.5x nach dem Start An dieser Problematik setzt die Implementierung von ComsolGridStarter an und ermittelt nach dem Starten von COMSOL Multiphysics diese relevante PID des Java Prozesses und schickt die Steuerungssignale an diesen Prozess. Zu diesem Zweck wurde die Klasse ComsolGrid::Task zur Steuerung des Prozesses entwickelt. 1 2 3 4 s u ( 1 3 5 6 4 )−−−b a s h ( 1 3 5 7 6 )−+−comsol ( 1 5 8 9 5 )−−−co m s o lla u n c h e r ( 1 5 9 1 9 )−+−{co m s o lla u n c h e r } | | −{ co m s o lla u n c h e r } | | −{ co m s o lla u n c h e r } | ‘ −... Listing 4.6: Prozessstruktur von COMSOL Multiphysics 4.0a nach dem Start Anwendungen die durch den BOINC Client (nachfolgend „BC“ genannt) gestartet werden, stehen mit dem BC in Kontakt. Der BC steuert das gestartete Programm durch Statusnachrichten. Dafür ist ein Kommunikationskanal vorhanden, der zwischen dem BC und dem Wrapper Daten austauscht und dabei Shared-Memory (SHM) verwendet [2]. Diese Informationen können kontinuierlich abgefragt werden, wenn vorher konfiguriert wurde, dass diese vom Entwickler zu handhaben sind. 6 Die 34 COMSOL Multiphysics Simulationssoftware ist in Java programmiert. ComsolGrid Framework 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL Die bis hier erwähnten Charakteristika über die Prozessstruktur und implementierten BOINC Funktionalitäten werden in Listing 4.7 angewendet. Das Listing 4.7 enthält eine gekürzte Form der ComsolGridStarter Implementierung. In der main(...)-Funktion werden im ersten Abschnitt die BOINC Optionen gesetzt, so dass der Wrapper die Prozesskontrolle übernehmen kann (Zeilen 3 − 15). Ab Zeile 17 beginnt die Funktionalität von ComsolGridStarter. Es wird eine Instanz der Prozesskontrollklasse erstellt, die Konfiguration von ComsolGridStarter in der Struktur cxml übergeben, der Pfad und die Parameter für die Ausführung von COMSOL Multiphysics angegeben und die Prozesspriorität7 gesetzt. In Zeile 22 wird COMSOL Multiphysics gestartet und ab Zeile 24 kontinuierlich geschaut, wie weit der Fortschritt der Simulation (Zeile 28 und 29) ist und welche Steuerungsbefehle vom BC geschickt werden (Zeile 31). Die Funktion aus Zeile 31 ist ab Zeile 37 aufgeführt. Sie liest den Status aus, prüft die Werte in der Status Struktur und reagiert in den Fallunterscheidungen passend auf die einzelnen Werte. Die Instanz task zur Prozesskontrolle, besitzt Methoden um den Java Prozess zu beenden (SIGKILL, SIGINT), zu stoppen (SIGSTOP) und weiterarbeiten (SIGCONT) zu lassen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 i n t main ( i n t a r g c , char ∗∗ a r g v ) { ... BOINC_OPTIONS o p t i o n s ; memset(& o p t i o n s , 0 , s i z e o f ( o p t i o n s ) ) ; / / Es h a n d e l t s i c h um d i e Hauptanwendung . o p t i o n s . m ain _ p r o g r am = t r u e ; / / P r u e f e n ob V e r b i n d u n g zum C l i e n t b e s t e h t . o p tio n s . ch eck _ h ea r tb e a t = true ; / / Der E n t w i c k l e r h a n d h a b t d i e P r o g r a m m s teu er u n g . o p tio n s . h a n d l e _ p r o c e s s _ c o n t r o l = true ; / / S t a t u s N a c h r i c h t e n s en d en , z . B . f r a c t i o n _ d o n e . o p tio n s . s en d _ s tatu s _ m s g s = true ; / / Damit d i e o b e r e n O p t i o n e n g r e i f e n ! options . di re ct_process_ac tion = false ; b o i n c _ i n i t _ o p t i o n s (& o p t i o n s ) ; ... co m s o lT as k = new ComsolGrid : : Task ( ) ; comsolTask −>setComsolXML(& cxml ) ; comsolTask −>s e t C o m s o l B i n a r y ( c o m s o l B i n a r y , &a r g s ) ; comsolTask −> s e t P r i o r i t y ( PROCESS_IDLE_PRIORITY ) ; 21 i f ( ! comsolTask −>r u n ( ) ) { / ∗ E r r o r h a n d l i n g ∗ / } 22 23 w h i l e ( comsolTask −>i s R u n n i n g ( ) ) { / / r e a d o u t t h e f r a c t i o n done −> BOINC c l i e n t f r a c t i o n D o n e = comsolTask −>g e t F r a c t i o n D o n e ( ) ; 24 25 26 27 boinc_fraction_done ( fractionDone ) ; boinc_report_app_status ( 0.0 , 0.0 , fractionDone ) ; 28 29 30 p o l l _ b o i n c _ m e s s a g e s ( co m s o lT as k ) ; 31 32 boinc_sleep (1. 0) ; 33 } 34 35 } 36 37 38 39 40 v o i d p o l l _ b o i n c _ m e s s a g e s ( ComsolGrid : : Task ∗ t a s k ) { ... BOINC_STATUS s t a t u s ; b o i n c _ g e t _ s t a t u s (& s t a t u s ) ; 41 42 i f ( s t a t us . no_heartbeat ) { t a s k −> k i l l ( ) ; e x i t ( 0 ) ; } 7 Nähere Informationen zu diesem Parameter sind in den Manpages der Funktionen getpriority und setpriority zu finden, $man 2 setpriority. 35 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL ComsolGrid Framework i f ( s t a t u s . q u i t _ r e q u e s t ) { t a s k −> k i l l ( ) ; e x i t ( 0 ) ; } i f ( s t a t u s . a b o r t _ r e q u e s t ) { t a s k −> k i l l ( ) ; e x i t ( 0 ) ; } 43 44 45 / / COMSOL M u l t i p h y s i c s p a u s i e r e n o d e r / / weiterlaufen lassen . i f ( s t a t u s . suspended ) { i f ( ! t a s k −>i s S u s p e n d e d ( ) ) { t a s k −> s t o p ( ) ; } } else { i f ( t a s k −>i s S u s p e n d e d ( ) ) { t a s k −>r es u m e ( ) ; } } 46 47 48 49 50 51 52 53 54 55 56 57 } Listing 4.7: Aktivierung der implementierten Prozesskontrollmechanismen Das Aktivitätendiagramm in Abbildung 4.4 verdeutlicht den Verlauf und die Prinzipien der Implementierung von ComsolGridStarter. Mit dem BOINC Manager können Befehle über den BC an den ComsolGridStarter geschickt werden. Es wird kontinuierlich geprüft ob Arbeitspakete (engl. Workunits) vorhanden sind, falls ja wird geschaut wo auf dem System die COMSOL Multiphysics Simulationssoftware installiert ist und dann ausgeführt. Der ComsolGridStarter erstellt einen zweiten Prozess. Dieser führt die COMSOL Multiphysics Simulationssoftware aus. COMSOL Multiphysics startet eine virtuelle Java Maschine um die Simulation durchzuführen (oberer Kasten „InitializeComsol()“). Der Speicherbereich dieser Startfunktion wird durch COMSOL Multiphysics ersetzt. Die PID des Prozesses von COMSOL Multiphysics wird an die „HandleBOINCStuff()“ Darstellung weitergegeben. Diese sucht im Prozessbaum nach der PID der virtuellen Java Maschine und hält diese für spätere Aktivitäten des Benutzers bereit. Wenn der Benutzer die Durchführung stoppen (Aktivität „User_Stop()“), weiterführen (Aktivität „User_Resume()“) oder beenden (Aktivität: „User_Abort()“) will, wird diese PID verwendet und das passende Signal an den richtigen Prozess geschickt und eine volle Kontrolle der Durchführung der COMSOL Multiphysics Simulationssoftware ist möglich. Weiterhin ist eine manuelle Steuerung der ComsolGridStarter Applikation möglich, wenn diese nicht in Verbindung mit dem BC ausgeführt werden soll. Dafür musste das Signal SIGSTOP umdefiniert werden. Das Signal kann nicht mit einem Signalhandler abgefangen werden, so dass die Ausführung einer Applikation immer sofort zur Beendigung führt. Wenn die Applikation ComsolGridStarter pausiert werden soll, muss nach Definition das Signal SIGUSR1 verwendet werden. Das Signal zum Fortführen der Ausführung SIGCONT ist ohne Probleme anwendbar. Die Implementierung des Signalhandler für die manuelle Verwendung ist in Listing 4.8 nachzulesen. 1 2 3 4 5 6 7 8 9 void s i g n a l _ h a n d l e r ( i n t s i g n r ) { i f ( co m s o lT as k ! = NULL) { i f ( s i g n r == SIGUSR1 | | s i g n r == SIGCONT | | s i g n r == SIGSTOP ) { comsolTask −> s i g n a l H a n d l e r ( s i g n r ) ; } } } Listing 4.8: Signalhandler für die manuelle Signalverarbeitung 4.7.2 COMSOL Multiphysics Start- und Simulationsparameter COMSOL Multiphysics kann unter verschiedenen Betriebssystemen und Systemarchitekturen gestartet werden. Es werden von der Firma COMSOL hauptsächlich die Betriebssysteme Linux, Win36 ComsolGrid Framework 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL Abbildung 4.4: Ablaufdiagramm der Implementierung von ComsolGridStarter dows und Mac OS unterstützt, jeweils in der 32-Bit und 64-Bit Version. Die Systemarchitektur kann beim Starten von COMSOL Multiphysics angegeben werden. Dies wird empfohlen um eine höhere Ausführungsgeschwindigkeit zu erzielen. Bei der Ausführung von ComsolGridStarter wird die Datei ./comsol.xml eingelesen und die darin enthaltenen Werte verarbeitet, in Listing 4.9 ist ein Beispiel dieser Datei aufgelistet. Parameter, bei denen zwischen mehreren Optionen gewählt werden kann, werden in dem Listing durch den Oder-Operator | voneinander getrennt. 1 2 OUTPUT: <output >%s < / output > 3 4 5 6 PARAMETER: <param>%s < / param> [PARAMETER] 7 8 9 10 11 GLOBALS: <globals > [PARAMETER] </ g l o b a l s > 12 13 14 15 XML_comsol_cfg : <comsol > <version >3.5 a | 4.0 | 4.0 a </ version > <!−− B e i s p i e l −−> 37 4.7 ComsolGridStarter - BOINC Wrapper für COMSOL 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <32 b i t / > | <64 b i t / > <ckl / > < co res >6 </ co res > <model > comsol . mph < / model > [OUTPUT] ? <parameters > < f i l e > comsol . t x t < / f i l e > <param>maxT < / param> <param> o b jW id th < / param> <param> o b j H e i g h t < / param> [PARAMETER] ∗ </ parameters > [GLOBALS] ? < l o g f i l e > comsol . lo g < / l o g f i l e > < s t d o u t _ f i l e n a m e > c o m s o l _ s t d o u t . lo g < / s t d o u t _ f i l e n a m e > < s t d e r r _ f i l e n a m e > c o m s o l _ s t d e r r . lo g < / s t d e r r _ f i l e n a m e > </ comsol > ComsolGrid Framework <!−− B e i s p i e l −−> <!−− B e i s p i e l −−> <!−− B e i s p i e l −−> <!−− <!−− <!−− <!−− Beispiel Beispiel Beispiel Beispiel −−> −−> −−> −−> <!−− B e i s p i e l −−> <!−− B e i s p i e l −−> <!−− B e i s p i e l −−> Listing 4.9: Struktur und Beispiel einer ./comsol.xml Konfigurationsdatei Mit dem XML-Tag <version> ermittelt der ComsolGridStarter die zur Simulationsdatei <model> passende COMSOL Multiphysics Major Version (vgl. Abs. 4.10). Das XML-Tag <ckl/> ist bei der Anwendung in der Fachhochschule Bielefeld von Bedeutung, da dort Floating-Licenses8 verwendet werden. Der XML-Tag <cores> ist in der aktuellen Testversion nicht umgesetzt, dieser soll später dazu dienen n Prozessoren für eine ComsolGridStarter Ausführung zu reservieren. Das Reservieren von Prozessoren wird von dem BOINC Framework in der verwendeten Version 6.11.0 nicht unterstützt. Durch Erstellung einer weiteren Abstraktionsschicht oder der Modifikation des BOINC Framework könnte diese Funktion implementiert werden. Mit dem XML-Tag <parameters> wird ein Bereich eröffnet, der die Simulationsparameter (vgl. Abs. 4.9) beschreibt. Die Werte der variablen Parameter eines Simulationsmodell sind in der durch <file> beschriebenen Eingabedatei enthalten. Das Format der Eingabedatei ist wichtig. Jede Zeile beschreibt die Simulationsparameter für einen Simulationslauf. Die Anzahl der zu variierenden Simulationsparameter ist gleich der Anzahl an Spalten in dieser Datei, d.h. jede Spalte symbolisiert einen Simulationsparameter. Diese Simulationsparameter sind jeweils mit einem Tabulatorsprung voneinander getrennt, es können mehrere aber mindestens einer verwendet werden. Es darf keine Leerzeile am Ende vorkommen. Im Abschnitt 4.14 wird näher auf diese Datei eingegangen. Alle weiteren Parameter werden beim Aufrufen von COMSOL Multiphysics verwendet. <logfile> gibt die Datei an, in die Protokolldaten geschrieben werden. <stdout_filename> wird verwendet, um die Standardausgaben des Programms zu speichern und <stderr_filename> enthält den Namen der Datei, die die Standardfehlerausgaben enthält. Die Log- und die Standardfehlerausgabendatei sind nicht weiter beachtenswert, bei der Standardausgabedatei ist der Fall anders. Darauf wird in Abschnitt 4.7.3 näher eingegangen. Aus den in Listing 4.9 aufgeführten Parametern mit der Markierung <!- Beispiel ->, wird folgender Befehl erstellt: /usr/local/comsol35a/bin/comsol -ckl -64 batch -input comsol.mph -paramfile comsol.txt “maxT,objWidth,objHeight“ -logfile comsol.log 8 Im Netzwerk ist ein Lizenzserver mit einer Anzahl N vorhandener Lizenzen installiert. Beim Starten einer Lizenz pflichtigen Anwendung wird eine Verbindung zu diesem Server aufgebaut und geschaut ob eine passende Lizenz vorliegt oder noch frei ist. 38 ComsolGrid Framework 4.8 COMSOL Dateiformate und Magic Numbers Abbildung 4.5: BOINC Manager mit Darstellung des fraction_done Wertes von ComsolGridStarter 4.7.3 COMSOL Multiphysics Prozessfortschritt Die Standardausgabedatei <stdout_filename> aus dem Listing 4.9, wird dazu verwendet um zu ermitteln, wie weit der Simulationsfortschritt der Ausführung ist. Eine Beispielausgabe von COMSOL Multiphysics ist in Listing 4.10 aufgeführt. 1 2 3 COMSOL B atch (64− b i t ) −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− V e r s i o n : COMSOL 3 . 5 a (COMSOL 3 . 5 . 0 . 6 0 3 ) 4 5 6 7 8 P aten t pending . C o p y r i g h t ( c ) 1998 −2008 by COMSOL AB . All r i g h t s reserved . −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 9 10 11 12 13 14 15 16 17 18 19 20 21 22 S t a r t i n g batch job . −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− S o l v e P r o b lem Current Progress : 0 % U p d a t i n g e x t e n d e d mesh Current Progress : 0 % ... ... Matrix f a c t o r i z a t i o n Current Progress : 1 % 20 2.0858 0.36232 36 9 36 2 1 21 2.4482 0.36232 37 9 37 2 1 ... 0 0 Listing 4.10: Standardausgabe bei der Ausführung von COMSOL Multiphysics im Batch-Modus Der Funktionsaufruf comsolTask−>getFractionDone() in Listing 4.7, Zeile 26, öffnet diese Datei, springt an das Ende, liest rückwärts x Bytes und sucht in diesen Daten nach der Zeichenkette Current Progress:. Bei einer gefundenen Zeichenkette, wird der Prozentwert ausgelesen und an die aufrufende Funktion zurückgegeben. Dieser Wert wird mit einer Funktion des BOINC Framework boinc_report_app_status (...) an den BOINC Client gesendet. Der Wert wird mit dem BOINC Manager ausgetauscht und dann dort in der grafischen Ausgabe angezeigt (vgl. Abb. 4.5). 4.8 COMSOL Dateiformate und Magic Numbers Dateien auf Computersystemen können durch verschiedene Verfahren unterschieden werden. Windows Anwender sehen sich mit Dateiendungen9 konfrontiert, auf Unix/Linux Systemen, sind Dateiendungen nicht unbedingt nötig, werden aber auch verwendet. Ein Verfahren, das sich etabliert hat, 9 Dateiendungen sind Erweiterungen des vergebenen Dateinamens um den Typ der Datei zu definieren, z.B. .doc für Dokumentendateien für Microsoft Office Dokumente, .exe wird bei ausführbaren Dateien verwenden. 39 4.9 Ermittlung der COMSOL Simulationparameter ComsolGrid Framework Abbildung 4.6: Magic Numbers der COMSOL Simulationsmodelldateien ist das Auslesen der sogenannten Magic Numbers in Dateien. Dabei werden die ersten N Bytes am Anfang der Datei gelesen, die den Typ einer Datei definieren sollen. Magic Numbers werden nicht nur für Dateien verwendet, sondern auch in Kommunikationsprotokollen um bestimmte Nachrichtentypen zu definieren. Sie unterstützen im Falle der Kommunikation die ordentliche Konversation. Diese Arbeit arbeitet mit Simulationsdateien von COMSOL Multiphysics. Die Dateiendung einer solchen Datei ist .mph. Die COMSOL Multiphysics Versionen unterscheiden sich in der Art des Dateiformats zur Abspeicherung von Simulationen. In der COMSOL Major Version 3.5 wird die von Java unterstütze Serialisierung verwendet [26]. Die COMSOL Major Version 4.0 verwendet hingegen Java Archive10 zur Speicherung [27]. Die Abbildung 4.6 zeigt die zwei Dateiformate einer Simulationsdatei, die als Beispielmodell bei den jeweiligen COMSOL Major Versionen vorhanden ist. Dateien, die die Java Serialisierung enthalten, besitzen immer 0xAC und 0xED als die ersten zwei Bytes am Dateianfang. Java Archive werden durch die ersten 10 Bytes einer Datei beschrieben, die Werte sind 0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x08, 0x00, 0x08 und 0x00. Das ComsolGrid Framework enthält die Funktion int ComsolGrid:: file_type ( std :: ifstream &); um den Dateityp zu ermitteln und gibt eine der folgenden drei Konstanten zurück: MAGIC_CODE_UNKNOWN Der Typ der Datei ist keine der beschriebenen Dateitypen. MAGIC_CODE_JAVA_SERIALIZATION Dieser Wert gibt an, dass es sich um eine Datei mit einer Java Serialisierung handelt. MAGIC_CODE_JAVA_ARCHIVE Die Datei ist ein Java Archiv. 4.9 Ermittlung der COMSOL Simulationparameter Durch die Ermittlung des Dateityps einer Simulationsdatei aus Abschnitt 4.8, wird die Möglichkeit geschaffen mit diesen Dateien zu arbeiten. Je nach Dateityp können diese Dateien ausgelesen und dabei evtl. vorhandene Simulationsparameter ermittelt werden. Die Abbildung 4.7 zeigt die Fenster zur Konfiguration von Simulationsparametern. Es wurden zur Verdeutlichung 5 verschiedene Konstanten bzw. Parameter definiert. Das Listing 4.12 zeigt, wie diese Parameter mit Funktionen aus 10 Java Archive sind im Grundsätzlichen ZIP-Archive [12], allerdings enthalten Java Archive eine bestimmte Struktur die von der Firma SUN definiert wurde [27]. 40 ComsolGrid Framework 4.9 Ermittlung der COMSOL Simulationparameter Abbildung 4.7: Definition von Simulationskonstanten in den COMSOL Versionen 3.5 und 4.0 dem ComsolGrid Framework gelesen werden. Die wichtige Funktion steht in Zeile 16, die Funktion ComsolGrid::parameter_comsol (...) wird aufgerufen. Diese Funktion liest die Simulationsdateien ein, deutet deren Inhalt und ermittelt die Simulationsparameter. Wie oben erwähnt, schreibt das COMSOL Release 3.5 serialisierte Java Daten in eine Datei. Das Simulationsmodell wird in einem XML-Baum abgespeichert. Dieses Modell wird von den XMLTags <model> und </model> eingeschlossen. Die Daten des XML-Baums werden im Klartext abgespeichert und der Text zwischen diesen einschließenden XML-Tags kann so direkt ausgelesen werden. Dieser Bereich mit Daten, wird nach der Zeichenkette <const type=class"> und dem abschließenden XML-Tag </const> durchsucht. Der Wert zwischen diesen XML-Tags ist ein Simulationsparameter. Bei dem COMSOL Release 4.0 wird das Simulationsmodell als Java Archiv gespeichert. Das Java Archiv der Testdatei, auf der rechten Seite in Abbildung 4.7, hat die Struktur aus Listing 4.11. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 . |−− |−− |−− |−− |−− |−− |−− |−− | | | | ‘−− geom1 . mphbin geom2 . mphbin geommanager1 . mphbin g u i m o d e l . xml mesh1 . mphbin modelimage . png model . xml <−−− e n t h a e l t d i e P a r a m e t e r savepoint1 |−− geom1 . mphbin |−− geommanager1 . mphbin |−− mesh1 . mphbin ‘−− model . xml s o l u t i o n 1 . mphbin Listing 4.11: Struktur eines COMSOL Multiphysics Java Archivs Die Datei model.xml enthält die definierten Parameter und ist im Klartext abgespeichert. In der Datei wird nach den XML-Tags <param tag=param"> und </param> gesucht. Die relevanten Simulationsparameter sind in den jeweiligen Zeilen zwischen diesen einschließenden XML-Tags aufgeführt. Die Ergebnisse der jeweiligen Suchvorgänge, werden in eine ComsolGrid:: StringList abgespeichert und können zu späteren Zeitpunkten verwendet werden, z.B. um bei der Parameterstudie automatisch die Auswahlfelder für die Parameter zu erstellen (vgl. Abs. 4.16). 1 2 3 / / / C++ # include <iostream > # include < s tring > 4 5 / / / ComsolGrid 41 4.10 Ermittlung der COMSOL Applikationen und Versionen ComsolGrid Framework Abbildung 4.8: Ermittlung der Simulationsparameter aus einem (1) COMSOL Simulationsmodell der COMSOL Multiphysics Versionen (2) 3.5 und (3) 4.0 6 7 8 # i n c l u d e < s t r u t i l . h> # i n c l u d e < m ag icco d e . h> # i n c l u d e < s i m p a r a m e t e r . h> 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 i n t main ( i n t a r g c , char ∗∗ a r g v ) { i f ( argc != 2) { s t d : : c e r r << " Usage : " << a r g v [ 0 ] << " ’COMSOL S i m u l a t i o n F i l e ( ∗ . mph ) ’ " << s td : : endl ; return 1; } try { ComsolGrid : : S t r i n g L i s t p a r a m e t e r = ComsolGrid : : p a r a m e t e r _ c o m s o l ( a r g v [ 1 ] ) ; ComsolGrid : : S t r i n g L i s t : : i t e r a t o r i t = p a r a m e t e r . b e g i n ( ) ; f o r ( ; i t ! = p a r a m e t e r . end ( ) ; i t ++) { s t d : : c o u t << " P a r a m e t e r : " << ∗ i t << s t d : : e n d l ; } } c a t c h ( s t d : : s t r i n g m es s ag e ) { s t d : : c o u t << " E r r o r −> " << m es s ag e << s t d : : e n d l ; } } Listing 4.12: C++-Quelltext zur Ermittlung der Simulationsparameter aus einer Simulationsdatei 4.10 Ermittlung der COMSOL Applikationen und Versionen Im Listing 4.13 ist eine Beispielanwendung aufgelistet, um auf einem Rechner die installierten COMSOL Ausführungsdateien inklusive der Versionen ermitteln zu können. Diese kleine Implementierung ist eine starke Abstraktion, des logischen Ablaufs für die Einholung und Verarbeitung der Information einer COMSOL Installation. Die komplette logische Struktur verbirgt sich hinter dem Methodenaufruf ComsolGrid::lookup(). Dieser Aufruf arbeitet sequentiell eine Liste von Standardbverzeichnissen ab und prüft ob dort eine ausführbare COMSOL Datei vorhanden ist. Ausführbare COMSOL Dateien werden definiert als Dateien mit dem Namen $ABSOLUTERPFAD/bin/comsol. Wenn diese Datei vorhanden ist, wird 42 ComsolGrid Framework 4.11 Modifikationen und Plattformdefinitionen des BOINC Manager versucht diese mit dem Parameter −version auszuführen. Die Zeichenkette, die durch diesen Aufruf ausgegeben wird, enthält die Versionsnummer von COMSOL. Der Aufbau dieser Zeichenkette unterscheidet sich zwischen dem Major Release 3.5 und 4.0. Die Major Version 3.5 gibt als Beispiel folgende Zeichenkette aus: COMSOL 3.5a (COMSOL 3.5.0.603, $Date: 2008/12/03 17:02:19 $). Das Major Release der 4.0 Reihe gibt nachfolgendes als Beispiel aus: COMSOL 4.0.0.925. Diese beiden Major Releases können zu hundert Prozent unterschieden werden. Bei dem Major Release 3.5 wird zuerst geprüft ob Klammerausdrücke vorhanden sind. Wenn ja, wird an die Stelle der öffnenden Klammer gesprungen, die nachfolgenden 16 Zeichen gelesen und dieser Teil passend in einzelne Elemente unterteilt. Wenn keine Klammerausdrücke vorhanden sind, dann handelt es sich um ein Major Release 4.0 und die Information kann sofort in die einzelnen Elemente aufgetrennt werden. Die zuvor genannten Schritte werden außer Acht gelassen, wenn eine der Umgebungsvariablen COMSOL_PATH_V35A, COMSOL_PATH_V40, COMSOL_PATH_40A - gesetzt ist und der Aufruf der Funktion ComsolGrid::lookup() ohne Parameter erfolgt. Es wird diesen Umgebungsvariablen vertraut und keine weitere Prüfung auf die Ausführbarkeit der COMSOL Applikation gemacht. 1 2 3 / / C++ # include <iostream > # include < s tring > 4 5 6 7 / / ComsolGrid # i n c l u d e <cxml . h> # i n c l u d e < c o m s o l b i n . h> 8 9 10 11 12 13 14 15 i n t main ( i n t a r g c , char ∗∗ a r g v ) { ComsolGrid : : V e r s i o n s L i s t v e r s i o n s = ComsolGrid : : l o o k u p ( ) ; f o r ( i n t i = 0 ; i < v e r s i o n s . s i z e ( ) ; i ++) { s t d : : c o u t << " V e r s i o n : " << v e r s i o n s . a t ( i ) . g e t V e r s i o n ( ) << " − " << " Major : " << v e r s i o n s . a t ( i ) . g e t M a j o r ( ) << s t d : : e n d l ; } } Listing 4.13: Ermittlung der COMSOL Multiphysics Major Versionen Der Aufruf für die COMSOL Major Version 3.5 kann unter Umständen eine hohe Latenzzeit haben. Das hängt damit zusammen, dass die Simulationsdatei von der ersten Byte Position bis zum Aufkommen der oben erwähnten XML-Tags durchsucht wird. Desto größer die Simulationsdatei ist, desto länger kann das Auffinden von Simulationsparametern dauern. Bei der Major Version 4.0 kann direkt auf die Information zugegriffen werden und die Zugriffszeit ist bei größer werdenden Modellen noch immer relativ schnell. 4.11 Modifikationen und Plattformdefinitionen des BOINC Manager In Abschnitt 4.10 wird gezeigt wie die installierten COMSOL Multiphysics Versionen auf einem Rechner gefunden werden. Ein ComsolGrid Projekt kann verschiedene Parameterstudien besitzen, z.B. eine Studie für einen Temperaturübergang durch Glas, jeweils in einem Modell eines COMSOL Multiphysics 3.5 oder 4.0 Major Release. Die Modelle sind untereinander nicht kompatibel und es muss für die jeweilige Datei die richtig COMSOL Version installiert sein. Der Benutzer hat eventuell nur eine von beiden installiert und kann von daher die Simulation nicht durchführen. Es ist unsinnig, dass dieser Benutzer Arbeitspakete vom Projektserver erhält, wenn er diese nicht bearbeiten kann. Um dieses Problem handhaben zu können, ist der BOINC Manager modifiziert worden. Die Quellen des BOINC Projektes enthalten im Subordner client/ u.a. die Quellen des BOINC Manager. In der Datei ./cs_platform.cpp werden die Informationen der verwendeten bzw. unterstützten Plattformen ermitteln, z.B. ob es sich um ein Linux oder Windows System handelt auf dem der 43 4.11 Modifikationen und Plattformdefinitionen des BOINC Manager ComsolGrid Framework BOINC Manager installiert ist. Diese Funktion wurde um den Teil in Listing 4.14 erweitert. Dieser kurze Teil durchläuft die gefundenen Plattformdefinitionen (gespeichert in einem C++-Container platforms ) und fügt jeweils die gefundenen COMSOL Multiphysics Versionen hinzu. 1 2 3 4 // / / Add COMSOL v e r s i o n s t o f o u n d e d p l a t f o r m s . // ComsolGrid : : V e r s i o n s L i s t v e r s i o n s = ComsolGrid : : l o o k u p ( ) ; 5 6 int s = platforms . size () ; 7 8 9 10 11 12 13 14 15 16 17 18 19 20 f o r ( u n s ig n ed i n t i = 0 ; i < s ; i ++) { s t d : : s t r i n g pname = p l a t f o r m s . a t ( i ) . name ; f o r ( u n s ig n ed i n t j = 0 ; j < v e r s i o n s . s i z e ( ) ; j ++) { s t d : : s t r i n g pname_comsol = pname ; pname_comsol += " _ co m s o l " ; s t d : : s t r i n g m ajo r = v e r s i o n s . a t ( j ) . g e t M a j o r ( ) ; / / Removes t h e ’ . ’ c h a r a c t e r , n o t s u p p o r t e d by BOINC . m ajo r . e r a s e ( 1 , 1 ) ; pname_comsol += m ajo r ; f p r i n t f ( s t d o u t , " Add p l a t f o r m : %s \ n " , pname_comsol . c _ s t r ( ) ) ; a d d _ p l a t f o r m ( pname_comsol . c _ s t r ( ) ) ; } } Listing 4.14: Modifikation am BOINC Manager zur Ermittlung der COMSOL Versionen Werden z.B. zwei Plattformen mit den nachfolgenden Definitionen gefunden i686-pc-linux-gnu x86_64-pc-linux-gnu Linux running on an Intel x86-compatible CPU Linux running on an AMD x86_64 or Intel EM64T CPU werden diese jeweils um eine Definition erweitert, wenn z.B. die COMSOL Multiphysics Version 3.5a installiert ist i686-pc-linux-gnu_comsol35a x86_64-pc-linux-gnu_comsol35a ...x86-compatible CPU with COMSOL v3.5a ...x86_64 or Intel EM64T CPU with COMSOL v3.5a Die wissenschaftlichen Applikationen müssen im Projekt mit eben diesen Plattformdefinitionen und in der Datenbank des Projekts hinzugefügt sein. In den Namen darf kein Punkt vorhanden sein, dieser wird von dem BOINC Framework als Trennzeichen erkannt. Aus diesem Grund wird im Listing 4.14 dieser Punkt mit major. erase (1,1) ; entfernt. Das Vorgehen zum Hinzufügen von Plattformdefinitionen innerhalb einer Projekts, geschieht im Projektverzeichnis durch den Befehl $./bin/xadd. In der Protokollierungsdatei stdoutdae.txt11 des BOINC Manager, wird die Meldung aus Listing 4.15 ausgegeben, um zu zeigen welche COMSOL Multiphysics Versionen gefunden wurden. 1 2 3 4 5 6 Add Add Add Add Add Add platform platform platform platform platform platform : : : : : : x86_64−pc−l i n u x −g n u _ co m s o l3 5 a x86_64−pc−l i n u x −g n u _ co m s o l4 0 x86_64−pc−l i n u x −g n u _ co m s o l4 0 a i6 8 6 −pc−l i n u x −g n u _ co m s o l3 5 a i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 a Listing 4.15: Vom BOINC Manager hinzugefügte Plattformdefinitionen 11 Diese 44 Datei wird im Ordner des BOINC Manager erstellt. ComsolGrid Framework 4.12 Kommunikationsprotokoll 4.12 Kommunikationsprotokoll Das Kommunikationsprotokoll basiert auf der Schicht 7 des ISO/OSI Referenzmodells. Es ist Klartext basierend und verwendet durchgehend einen XML Dialekt. Dieser XML Dialekt wird in HTTPRequests eingebettet und durch die Applikation ComsolGridFCGI verarbeitet. Die Kommunikation in der Testversion des ComsolGrid Frameworks findet zwischen ComsolGridQt und ComsolGridFCGI statt. Das Listing 4.16 enthält den HTTP-Request an die Applikation ComsolGridFCGI, der durch die verwendete FastCGI Bibliothek automatisch bearbeitet wird und die reinen XML Daten zur Weiterverarbeitung zur Verfügung stellt. Die drei Variablen ${HOSTNAME}, ${XMLDATENLAENGE} und ${XMLDATEN} müssen durch entsprechende Werte gefüllt werden. ${HOSTNAME} ist der FQDN oder die IP-Adresse des Hosts mit der gestarteten Applikation ComsolGridFCGI. Der Dateipfad /comsolfcgi in der ersten Zeile, beschreibt den Namen der Schnittstelle ComsolGridFCGI, durch die die Applikation mit einem HTTP-Request aufgerufen werden kann. Dieser Wert wurde für den Apache Webserver in den Einstellungen des Servers eingetragen. Im Anhang B.3 sind die verwendeten Apache Konfigurationen aufgelistet. 1 2 3 4 5 6 POST / c o m s o l f c g i HTTP / 1 . 1 \ r \ n H o s t : $ {HOSTNAME} \ r \ n User−Agent : COMSOL T e s t s u i t e \ r \ n C o n t e n t −L en g th : $ {XMLDATENLAENGE} \ r \ n C o n t e n t −Type : a p p l i c a t i o n / x−www−form−u r l e n c o d e d \ r \ n \ r \ n$ {XMLDATEN} \ r \ n \ r \ n Listing 4.16: Basis HTTP-Request der die XML Daten aufnimmt Es gilt zu beachten, dass alle einzelnen XML-Tags in einer eigenen Zeile stehen und durch folgende Zeichen voneinander getrennt werden müssen: \ r \n. Es wird empfohlen, am Ende eines HTTP/XMLRequest oder HTTP/XML-Response zwei dieser Zeichenketten zu verwenden. \ r \n sind zwei EscapeSequenzen mit den Akronymen CR (Carriage Return, ’\r’, 0x0D, 13 in dezimal) und LF (Line Feed, ’\n’, 0x0A, 10 in dezimal) in der Informationstechnik, Die hier erwähnten und aufgelisteten HTTP/XML-Requests enthalten Platzhalter in folgender Schreibweise: %s Es wird eine Zeichenkette als Füllelement erwartet. %d Diese Stelle wird durch eine ganze Zahl ersetzt. Die Tabelle 4.2 enthält die wenigen implementierten Kommunikationsdialoge im ComsolGrid Framework. Die linke Spalte „ComsolGridQt Anfrage“ enthält die Anfänge einer Konversation, zwischen den Applikationen ComsolGridQt und ComsolGridFCGI. In der mittleren Spalte „ComsolGridFCGI Antworten“, werden die passenden Antwortelemente aufgelistet. Die letzte Spalte enthält eine grobe Beschreibung der Konversation. Die einzelnen Sprachelemente werden in den nachfolgenden Listings erläutert. 4.12.1 ComsolGridFCGI - HTML/XML-Response Nachrichten Die Listings 4.17 bis 4.19 enthalten die HTTP/XML-Response Nachrichten von ComsolGridFCGI an ComsolGridQt. Es sei erwähnt, dass auch andere Programme auf ComsolGridFCGI zugreifen können, z.B. mit einem Webbrowser. Der Webbrowser muss richtige Anfragen an die Applikation senden, sonst wird immer die Nachricht aus Listing 4.20 zurückgeliefert. Es sind allgemeine Rückgabewerte definiert und hard-codiert implementiert. Diese Werte sind in Listing 4.21 aufgelistet. Das Listing 4.17 beschreibt die Antwort auf die Nachfrage nach den Prozessinformationen. Der Abschnitt 4.13 beschreibt die Implementierung zur Beschaffung der Informationen. Der HTTP/XMLResponse enthält hingegen die Informationen über die Prozesse. Eingebettete Daten wie diese Informationen, müssen in einem unterschiedlichen Darstellungsformat verwendet werden, da es sonst zu 45 4.12 Kommunikationsprotokoll ComsolGrid Framework ComsolGridQt Anfrage ComsolGridFCGI Antwort Beschreibung <comsol_put> ... </comsol_put> <comsol_error> ... </comsol_error> Die Anfrage ist zum Hinzufügen einer Parameterstudie und für das Hochladen von Simulationsund Schablonendateien gedacht. Das Format dieser Anfrage wird in Listing 4.22 gezeigt. Das Ergebnis dieser Anfrage wird mit einer Fehlernummer berichtet. Die Namensgebung „Fehlernummer“ ist für das Ergebnis evtl. irreführend, es sei angemerkt, dass auch in einem Erfolgsfall eine solche Fehlernummer gesendet wird. In Listing 4.21 sind die Fehlernummern aufgelistet. <server_major/> <version> ... </version> Die Anfrage ruft die Major Versionsnummer der Applikation ComsolGridFCGI ab. Das Ergebnis wird in Listing 4.19 beschrieben. Die Major Versionsnummer ist im Normalfall eine einzelne Ziffer. <server_minor/> <version> ... </version> Diese Anfrage ähnelt sehr der <comsol_major>Anfrage, mit dem Unterschied, dass die Minor Versionsnummer abgefragt wird. Die Antwort wird in Listing 4.19 aufgelistet. <server_release/> <version> ... </version> Das Ergebnis dieser Anfrage ist die komplette Versionsnummer der ComsolGridFCGI Applikation. Die Zeichenkette in der Antwort aus Listing 4.19 ist eine Zusammensetzung aus den Major.Minor Versionsnummern. <comsol_release/> <version> ... </version> Diese Antwort enthält alle zur Verfügung gestellten COMSOL Multiphysics Versionen. In der Testversion vom ComsolGrid Framework werden immer die folgenden drei Versionen zurückgesendet: 3.5a, 4.0, 4.0a. <status> ... </status> <status> ... </status> Der Status kann nur von autorisierten Simulanten abgefragt werden. Für diesen Zweck muss eine Authentifizierung statt finden, siehe Listing 4.24. <apps> ... </apps> <apps> ... </apps> Die Liste der wissenschaftlichen Applikationen kann nur von autorisierten Simulanten abgefragt werden. Für diesen Zweck muss eine Authentifizierung statt finden, siehe Listing 4.24. Tabelle 4.2: HTTP/XML-Request - ComsolGridQt Anfragen und zugehörige ComsolGridFCGI Antworten Verarbeitungsproblemen bei der Abarbeitung und Filterung der Informationen kommen kann. Sollten in den Daten z.B. „kleiner als“ < oder „größer als“ > Zeichen auftauchen, könnten diese auch Startpunkte oder Endpunkte eines XML-Tag sein. Durch Base64 Verschlüsselung der Daten, kann dieses Problem eliminiert werden [17, 18]. Base64 wird oft dazu verwendet binäre Daten in Textform zu bringen, wenn diese über eine Verbindung transferiert werden sollen, die z.B. ein Text basiertes Kommunikationsprotokoll verwenden. In den nachfolgenden Listings werden Base64 kodierte Daten mit der eingebetteten Funktion base64_encode(%s) beschrieben. 1 2 3 4 5 6 7 8 46 <status > <boinc > < p r o c e s s e s > b a s e 6 4 _ e n c o d e (TEXT) </ p r o c e s s e s > </ boinc > <server > <uptime > b a s e 6 4 _ e n c o d e ( ‘ uptime ‘ ) </ uptime > <meminfo > b a s e 6 4 _ e n c o d e ( ‘ c a t / p r o c / meminfo ‘ ) </ meminfo > < cp u in f o > b a s e 6 4 _ e n c o d e ( ‘ c a t / p r o c / cp u in f o ‘ ) </ cp u in f o > ComsolGrid Framework 9 10 11 12 4.12 Kommunikationsprotokoll < d i s k f r e e i n o d e > b a s e 6 4 _ e n c o d e ( ‘ d f −h −− t o t a l − i −l ‘ ) </ d i s k f r e e i n o d e > < diskfreememory > b a s e 6 4 _ e n c o d e ( ‘ d f −h −− t o t a l −l ‘ ) </ diskfreememory > </ s e r v e r > </ s t a t u s > Listing 4.17: HTTP/XML-Response - ComsolGridFCGI <status> Das Listing 4.18 beschreibt die Antwort auf den Wunsch des Simulanten, zu erfahren welche wissenschaftlichen Applikationen in welchen Versionen vorhanden sind. Der XML-Tag Bereich <version> kann dabei öfter vorkommen und wird für die jeweiligen Applikationen erstellt. Die Informationen in diesem Bereich werden direkt aus der Datenbank übernommen, dort sind diese Informationen in den Tabellen „app“, „app_version“ und „platform“ abgelegt. Die letzten zwei Zeilen der HTTP/XMLAntwort, liefern Zahlenwerte über die Anzahl der noch zu verarbeitenden Arbeitspakete und einen Wert der aussagt, wie viele Arbeitspakete schon fertig bearbeitet sind. 1 2 3 4 5 6 7 8 9 10 11 VERSION : <version > <app_id >%d < / app_id > <app_name>%s < / app_name > < a p p _ u s e r f r i e n d l y >%s < / a p p _ u s e r f r i e n d l y > < version_number>%d < / version_number > < p l a t f o r m _ i d >%d < / p l a t f o r m _ i d > <platform_name >%s < / platform_name > < p l a t f o r m _ u s e r f r i e n d l y >%s < / p l a t f o r m _ u s e r f r i e n d l y > </ v e r s i o n > [ VERSION ] 12 13 14 15 16 17 18 XML: <apps > [ VERSION ] < w o rk u n it _ co u n t>%d < / w o rk u n it _ co u n t > < r e s u l t _ c o u n t >%d < / r e s u l t _ c o u n t > </ apps > Listing 4.18: HTTP/XML-Response - ComsolGridFCGI <apps> Der Bereich XML_comsol_release in Listing 4.19 beschreibt die ComsolGridFCGI unterstützten COMSOL Multiphysics Versionen. Antworten die Informationen über Versionen enthalten, werden immer mit dem XML-Tag <version> gestartet, wie dies auch in den Beschreibungen in Listing 4.19 der Fall ist. In der aktuellen ComsolGrid Framework Testversion sind vier Antworten implementiert: 1. XML_comsol_release wie zuvor beschrieben, 2. XML_server_major, 3. XML_server_minor und 4. XML_server_release. Die Tabelle 4.2 enthält nähere Erläuterungen zu diesen Antworten. 1 2 3 RELEASE : < r e l e a s e >%s < / r e l e a s e > [ RELEASE ] 4 5 6 7 8 X M L _ co m s o l_ r eleas e : <version > <comsol_release > RELEASE 47 4.12 Kommunikationsprotokoll 9 10 ComsolGrid Framework </ c o m s o l _ r e l e a s e > </ v e r s i o n > 11 12 13 14 15 XML_server_major : <version > < s erv er_ m a j o r >%s < / s erv er_ m a j o r > </ v e r s i o n > 16 17 18 19 20 XML_server_minor : <version > < s erv er_ m in o r >%s < / s erv er_ m in o r > </ v e r s i o n > 21 22 23 24 25 XML_server_release : <version > < s e r v e r _ r e l e a s e >%s < / s e r v e r _ r e l e a s e > </ v e r s i o n > Listing 4.19: HTTP/XML-Response - ComsolGridFCGI <comsol_release> Das Listing 4.20 beschreibt die Antwort von ComsolGridFCGI, wenn während der Verarbeitung einer Anfrage ein Problem aufgetreten ist. Die Antwort enthält eine durch Doppelpunkte getrennte Information: (1) die Fehlernummer und (2) eine kleine Beschreibung des Fehlers. Es sind vordefinierte Fehlernummern im ComsolGrid Framework definiert und in dem Listing 4.21 aufgeführt. Diese Fehlernummern können abgeändert und an die eigenen Bedürfnisse angepasst werden, sie dienen der Unterstützung bei einer Konversation. Wie oben erwähnt, wird eine solche Nachricht auch dann verwendet, wenn im System alles erfolgreich funktioniert hat. In diesem Fall wird die Fehlernummer C_OK oder C_FINISHED verschickt. 1 2 3 < co m s o l_ erro r > COMDOL_ERROR_ID : COMSOL_ERROR_DESCRIPTION </ co m s o l_ erro r > Listing 4.20: HTTP/XML-Response - ComsolGridFCGI <comsol_error> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # i f n d e f __CODES_H__ # d e f i n e __CODES_H__ / / / C = COMSOL # d e f i n e C_NOCMD −1 # d e f i n e C_OK 0 # d e f i n e C_FAILED 1 # d e f i n e C_LOGINFAILED 2 # d e f i n e C_FINISHED 3 # d e f i n e C_NOFILES 4 # d e f i n e C_UDIRPERM 5 # d e f i n e C_UPLOADOK 6 # d e f i n e C_TPLINMISS 7 # d e f i n e C_TPLRESMISS 8 # d e f i n e C_WRONGROLE 9 # e n d i f / / __CODES_H__ Es i s t k e i n R e q u e s t an g eg eb en . Die V e r a r b e i t u n g v e r l i e f f e h l e r f r e i . Es i s t e t w a s s c h i e f g e l a u f e n . Der a n g e g e b e n e B e n u t z e r k o n n t e s i c h n i c h t an m eld en . G l e i c h t C_OK, a l l e r d i n g s w i r d k e i n e N a c h r i c h t g e s c h i c k t . Es s i n d k e i n e D a t e i e n zum H o ch lad en an g eg eb e n . F e h l e n d e R e c h t e zum O e f f n e n e i n e s V e r z e i c h n i s s e s . Das H o ch lad en d e r P a r a m e t e r s t u d i e v e r l i e f f e h l e r f r e i . Es f e h l t d i e E i n g a b e s c h a b l o n e n d a t e i . Es f e h l t d i e E r g e b n i s s c h a b l o n e n d a t e i . Der S i m u l a n t b e s i t z t e i n e v e r k e h r t e B e n u t z e r r o l l e . Listing 4.21: HTTP/XML-Response - ComsolGridFCGI Fehlernummern 4.12.2 ComsolGridFCGI - HTML/XML-Request Nachrichten Dieser Abschnitt enthält die komplexeren Anfragen an ComsolGridFCGI. Die Kommunikationselemente <server_major>, <server_minor>, <server_release> und <comsol_release> werden nicht näher behandelt, da diese schon in Tabelle 4.2 ausreichend 48 ComsolGrid Framework 4.12 Kommunikationsprotokoll beschrieben sind. Die Anfrage aus Listing 4.22 ist die komplizierteste aller implementierten Kommunikationselemente. Der Beginn dieser Anfrage ist <comsol_put> und muss mit einer Authentifizierung <auth> (vgl. Listing 4.24) fortgeführt werden. Zweck und Aufgabe dieser Anfrage ist das Erstellen einer Parameterstudie in einem Projekt. Eine Parameterstudie benötigt folgende Daten: 1. Eine oder mehrere COMSOL Multiphysics Simulationsdateien, 2. Parameter mit denen die Simulation durchgeführt werden soll und 3. Eingabe-/Ergebnisschablonen zum Laden und Speichern der Simulationseingabedaten und Simulationsergebnisse. Das XML-Tag <comsol> beschreibt den Bereich der Informationen, die speziell für die ComsolGridStarter Applikation verwendet werden. In Abschnitt 4.7 wird auf die Parameter eingegangen. Weiterhin haben die XML-Tags folgende Bedeutungen: name Name der wissenschaftlichen Applikation, für die die Parameterstudie erstellt werden soll. Der Name kann mehrmals vorhanden sein, weshalb zur Unterscheidung zusätzlich die appid verwendet wird. appid Dies ist die eindeutige Identifikationsnummer einer wissenschaftlichen Applikation. count Das ist die Anzahl an Simulationsdateien die hinzugefügt werden sollen, z.B. COMSOL Multiphysics Dateien (*.mph), oder Eingabedaten die von der Simulation eingelesen werden. filename Der Dateiname der Simulationsdateien. description Eine Beschreibung der jeweiligen Simulationsdateien. max_nbytes Die Größe der jeweiligen Simulationsdateien in Bytes. data Dieser XML-Tag enthält die jeweiligen Simulationsdateien in Base64 Kodierung. ranges In diesem Bereich sind Simulationsparameter definiert, die beschreiben in welchen Umfang die Parameterstudien durchgeführt werden. range Enthält eine Liste von einzelnen Simulationsparametern. parameter Definiert einen Parameter durch fünf Elemente: (1) NAME ist der Name der Variablen die beschrieben wird, (2) START ist eine Fließkommazahl die den Beginn des Simulationswertes angibt, (3) STOP ist das Gegenstück zu START und gibt das Ende des Simulationswertes an, (4) STEP beschreibt die Schrittweite zwischen START und STOP in der die Simulation durchgeführt wird und (5) DEFAULT ist ein Standardwert des Simulationswertes, wenn die Simulationsschritte dieses Parametern durchgearbeitet worden sind und weitere Variationen von anderen Simulationsparametern durchgeführt werden. Ein Beispiel ist Zaehler:1:10:1:5, hier würde die Variable Zaehler von 1 bis 10 hochgezählt werden, mit einer Schrittweite von 1, der Standardwert ist 5. Im Abschnitt 4.16 wird das Prinzip der Simulationsparameter ausführlicher beschrieben. template_input, template_output Sind die Eingabe-/Ergebnissschablonen einer Parameterstudie. Diese werden für die Erstellung von Arbeitspaketen benötigt und werden in Kapitel 2 beschrieben. 49 4.12 Kommunikationsprotokoll 1 2 3 4 5 6 7 8 9 10 ComsolGrid Framework FILE : <file > < f i l e n a m e >%s < / f i l e n a m e > < d e s c r i p t i o n >%s < / d e s c r i p t i o n > <max_nbytes >%s < / max_nbytes > <data > base64_encode ( $s ) </ data > </ f i l e > [ FILE ] 11 12 13 14 PARAMETER: <parameter >NAME: START : STOP : STEP : DEFAULT< / parameter > [PARAMETER] 15 16 17 18 19 20 RANGE: <range > [PARAMETER] </ range > [RANGE] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 XML_comsol_put : <comsol_put > [AUTH] <name>%s < / name> <appid >%d < / appid > <count >%d < / count > [ FILE ] <ranges > [RANGE] </ ranges > < t e m p l a t e _ i n p u t > b a s e 6 4 _ e n c o d e (% s ) </ t e m p l a t e _ i n p u t > < t e m p l a t e _ r e s u l t > b a s e 6 4 _ e n c o d e (% s ) </ t e m p l a t e _ r e s u l t > <comsol > <ckl / > < l o g f i l e >%s < / l o g f i l e > < s t d o u t >%s < / s t d o u t > < s t d e r r >%s < / s t d e r r > </ comsol > </ comsol_put > Listing 4.22: HTTP/XML-Request - Eine Parameterstudie erstellen Wenn der Benutzer die richtigen Authentifizierungsdaten eingibt und eine passende Rolle besitzt, erhält er durch die Anfragen aus Listing 4.23 Informationen über Prozesse und über die vorhandenen wissenschaftlichen Applikationen. 1 2 3 4 XML_status : <status > [ AUTHENTICATION ] </ s t a t u s > 5 6 7 8 9 XML_apps : <apps > [ AUTHENTICATION ] </ apps > Listing 4.23: HTTP/XML-Request - Status und Applikationen ermitteln Das Listing 4.24 enthält die Struktur der Authentifizierung. Dieser Bereich muss in Anfragen eingebettet werden und die logische Abarbeitung von ComsolGridFCGI muss für die einzelnen XMLTags erweitert werden. Die Authentifizierungsfunktionen des ComsolGrid Frameworks ermitteln 50 ComsolGrid Framework 4.13 Ermittlung von System-/Prozessinformationen aus diesen Daten automatisch die Informationen des Simulanten und die jeweils definierte Benutzerrolle. Die Daten sind im Klartext einzutragen. Sonderzeichen, die nicht nach dem XML Standard [9] verwendet werden können, müssen vermieden werden. 1 2 3 4 5 6 AUTHENTICATION : <auth > <username>%s < / username > < email >%s < / email > <password>%s < / password > </ auth > Listing 4.24: HTTP/XML-Request - Authentifizierung am Projektserver 4.13 Ermittlung von System-/Prozessinformationen Die Simulantenschnittstelle zum Erstellen von Parameterstudien, ermöglicht es dem Simulanten Informationen über den Projektserver und der durchzuführenden Parameterstudie abzufragen. Die Informationen werden im ComsolGridFCGI als statische Informationen abgespeichert. Bei Verwendung von statischen Informationen wird nicht unnötig Speicherplatz verwendet, so dass bei mehrmaliger Instantiierung des Informationsbeschaffungsprozesses (IBP), der selbige Speicherplatz verwendet wird. Abbildung 4.9 enthält ein UML2 Zustandsdiagramm. Dieses Diagramm beschreibt die Implementierung des IBP im ComsolGrid Framework. Der IBP wird auf der linken Seiten mit dem schwarzen Punkt begonnen. Der Übergang auf die Gabelung nach unten, beschreibt die Erstellung eines neuen Prozesses, welcher nach rechts verläuft und für die Aktualisierung der Informationen sorgt. Simulanten können die Informationen seit der letzten Aktualisierung abfragen, welche sich im Datenspeicher STORE befinden. Der rechte Bereich in der Abbildung 4.9 zeigt, wie die Aktualisierung der Prozessinformationen statt findet. Der Prozess kann abstrakt durch drei Schritte beschrieben werden: • Eine angegebene Zeit warten, • Systembefehle ausführen um die Informationen zu erhalten und • die Daten in den Datenspeicher STORE schreiben. Die Implementierung und die logische Struktur dieses Sachverhalts wird durch das Sequenzdiagramm in Abbildung 4.10 erläutert. Das Sequenzdiagramm zeigt drei Zeitlinien. Die linke Zeitlinie zeigt den Verlauf der Aktivitäten des Simulanten. Die mittlere Zeitlinie (Information Process Handler, nachfolgend „IPH“ genannt) beschreibt den linken Prozess aus Abbildung 4.9 und die rechte Zeitlinie (Information Process Process nachfolgend „IPP“ genannt) beschreibt die Sequenzen des rechten Prozesses aus dem Zustandsdiagramm in Abbildung 4.9. Es zeigt, dass die IPP in einer Schleife läuft und kontinuierlich die Prozessinformationen ermittelt. Die IPH wird vom Simulanten befragt, ob der IBP gestartet ist und wenn ja, werden die Informationen gelesen, wenn diese nicht im Moment aktualisiert werden. In der Testversion des ComsolGrid Frameworks werden die nachfolgenden Informationen durch ComsolGridFCGI bereitgestellt. Die Namen auf der linken Seite werden zum spezifischen Abruf der einzelnen Informationen verwendet und sind im ComsolGrid Framework hard-codiert (vgl. Listing 4.25). INFOS_BOINC_PROCESSES Durch diesen Namen werden Informationen über die BOINC Prozesse abgefragt. Diese Informationen enthalten Daten darüber ob das BOINC Projekt gestartet ist, welche Daemons verwendet werden und mit welchen Parametern diese gestartet sind. Es wird von den jeweiligen Prozessen die Prozess Identifikationsnummer (PID) angezeigt. 51 4.13 Ermittlung von System-/Prozessinformationen ComsolGrid Framework Abbildung 4.9: Der Informationsbeschaffungsprozess in einem UML2 Zustandsdiagramm Bei periodisch ausgeführten Programmen wird ausgegeben, wann diese das letzte mal ausgeführt wurden und nach welchen Zeitintervall der nächste Aufruf erfolgt. INFOS_SERVER_UPTIME Dieser Name liefert Standardinformationen über die Laufzeit des Betriebssystems. Die Ausgabe entspricht dem Format: 19:48:51 up 10:13, 7 users, load average: 0.01, 0.10, 0.14. Diese Zeichenkette enthält folgende Informationen (von links): (1) die aktuelle Uhrzeit, (2) die Zeit wie lange das System schon läuft, (3) die Anzahl der angemeldeten Benutzer und (4) die durchschnittliche Systemauslastung der aktuellen, der letzten fünf und fünfzehn Minuten. INFOS_SERVER_MEMINFO Hier werden Informationen über den verfügbaren physikalischen sowie logischen Arbeitsspeicher aufgelistet. Weiterhin wird aufgeführt wie viel Arbeitsspeicher verwendet wird. Die Informationen entsprechen der Ausgabe des Befehls $cat /proc/meminfo eines Linux System. INFOS_SERVER_CPUINFO Eine Auflistung der verfügbaren Central Processing Units (CPU) wird durch diesen Namen erreicht. Der Befehl entspricht der Ausgabe des folgenden Befehls innerhalb eines Linux Systems: $cat /proc/cpuinfo | grep -A3 model name". INFOS_SERVER_DFINODE Liefert Informationen über die freien Inodes, entspricht dem Linux Befehl $df -h -total -i. INFOS_SERVER_DFMEMORY Ermittelt den freien Speicherplatz eines Rechnersystems. Dies entspricht dem Linux Befehl $df -h -total. 1 2 3 4 5 / / ComsolGrid # i n c l u d e < i n f o s . h> / / C++ # include <iostream > # include < s tring > 6 7 8 9 10 11 12 13 14 15 52 i n t main ( i n t a r g c , char ∗∗ a r g v ) { ComsolGrid : : I n f o s i n f o ; i n f o . show ( ) ; info . se tR efr esh Int er va l (10) ; try { info . run ( ) ; } c a t c h ( s t d : : s t r i n g m es s ag e ) { s t d : : c o u t << " Could n o t s t a r t : " << m es s ag e << s t d : : e n d l ; return 1; ComsolGrid Framework } while ( inf o . isRunning ( ) ) { i f (! info . isUpdating () ) { s t d : : c o u t << " INFOS_BOINC_PROCESSES : " << i n f o . g e t I n f o ( INFOS_BOINC_PROCESSES ) << s t d : : e n d l ; s t d : : c o u t << "INFOS_SERVER_UPTIME : " << i n f o . g e t I n f o ( INFOS_SERVER_UPTIME) << s td : : endl ; s t d : : c o u t << "INFOS_SERVER_MEMINFO: " << i n f o . g e t I n f o ( INFOS_SERVER_MEMINFO) << s t d : : e n d l ; s t d : : c o u t << "INFOS_SERVER_CPUINFO : " << i n f o . g e t I n f o ( INFOS_SERVER_CPUINFO ) << s t d : : e n d l ; s t d : : c o u t << "INFOS_SERVER_DFINODE: " << i n f o . g e t I n f o ( INFOS_SERVER_DFINODE) << s t d : : e n d l ; s t d : : c o u t << "INFOS_SERVER_DFMEMORY : " << i n f o . g e t I n f o ( INFOS_SERVER_DFMEMORY ) << s t d : : e n d l ; } sleep (10) ; } info . stop () ; 16 17 18 19 20 21 22 23 24 25 26 27 28 29 4.14 Erstellung von Arbeitspaketen } Listing 4.25: Beispielanwendung zur Beschaffung von Informationen über definierte Prozesse Folgende Dinge müssen bei der Ausführung dieser Implementierung beachtet werden! Die Informationsbeschaffung dieses Prozesses läuft in der Testimplementierung innerhalb der ComsolGridFCGI und dadurch unter den Benutzerrechten des Apache Webservers www-data. Weiterhin wird ein Aufruf gestartet, der Informationen über die BOINC Prozesse ermittelt. Für diesen Zweck wird das Skript ./bin/status aufgerufen. Dieses Skript benötigt Leserechte auf die Dateien ./pid_HOSTNAME und run_state_HOSTNAME.xml, HOSTNAME ist ein Platzhalter für den eigentlichen Namen des Hosts auf dem der Projektserver installiert ist. Diese Dateien müssen durch die Befehle in Listing 4.26 geänderte Zugriffsrechte erhalten, da sonst keine Ausführung möglich ist. 1 2 3 4 5 6 7 8 9 # # # # $ $ # # # Normalerweise s in d d ie Rechte : drwxr−xr −x p i d _ S a t a r i n a −rw−r−−r−− r u n _ s t a t e _ S a t a r i n a . xml A en d er n m i t . . . chmod 775 pid_HOSTNAME chmod 664 run_state_HOSTNAME . xml . . . zu : drwxrwxr −x p i d _ S a t a r i n a −rw−rw−r−− r u n _ s t a t e _ S a t a r i n a . xml Listing 4.26: Änderung der Zugriffsrechte für das BOINC Skript ./bin/status 4.14 Erstellung von Arbeitspaketen Für die Erstellung von Arbeitspaketen bietet das BOINC Framework verschiedene Möglichkeiten. Es kann das Werkzeug ./bin/make_work verwendet oder eine eigene Implementierung durch Verwendung der BOINC Framework API (Application Programming Interface) implementiert werden. Das ComsolGrid Framework verwendet die zweite Lösung, da diese mehr Vorzüge bietet und besser an die eigenen Bedürfnisse angepasst werden kann. Die Arbeitspakete werden direkt in der ComsolGridFCGI Schnittstelle erstellt und dem entsprechenden Projekt hinzugefügt. Es werden die hoch 53 4.14 Erstellung von Arbeitspaketen ComsolGrid Framework Abbildung 4.10: Der Informationsbeschaffungsprozess in einem UML2 Sequenzdiagramm geladenen Daten aus dem XML-Baum <comsol_put> verarbeitet und daraus entsprechend die Arbeitspakete definiert und erstellt. Ein Arbeitspaket bei BOINC besteht aus ein oder mehreren Simulationsdateien und entsprechenden Parameter Eingabedateien. Diese sind für die Simulation elementar und im Falle von ComsolGrid entsprechen diese Dateien einer COMSOL Multiphysics Simulation und einer Datei, welche die Simulationsparameter (vgl. Abs. 4.9) enthält. Die Abbildung 4.11 enthält eine Beschreibung eines beispielhaften Arbeitspakets. Das Arbeitspaket hängt in diesem Fall von vier Dateien ab: 1. Zwei Schablonendateien, 2. einer COMSOL Simulationsdatei und 3. einer Datei, welche die Werte für die Simulationsparameter enthält. Bei der Erstellung eines Arbeitspakets - sei es mit dem oben genannten Werkzeug oder mit einer eigenen Implementierung - ist die Reihenfolge der anzugebenden Dateien sehr wichtig! In dem 54 ComsolGrid Framework 4.14 Erstellung von Arbeitspaketen Abbildung 4.11: Beispiel eines Komponentendiagramm für ein Arbeitspaket im ComsolGrid Framework unteren, linken Kommentar in Abbildung 4.11, ist eine Beispieldarstellung einer Eingabenschablonendatei enthalten. Dort sind zwei Dateien angegeben, die jeweils einen Index haben, beschrieben durch den XML-Parameter <number>. Die Datei comsol.mph hat die Indexnummer 0 und die Datei comsol.txt den Index 1. Das heißt für die Arbeitspaketerstellung, dass erst die comsol.mph und dann die comsol.txt Datei angegeben werden muss. Im ComsolGridStarter werden die Dateinamen comsol.mph und comsol.txt zum Öffnen der Dateien angenommen, dies sind logische Namen im BOINC Framework und werden durch die Funktion boinc_resolve_file_s(...) in die physikalischen Pfade aufgelöst. Dies sind bei BOINC die sogenannten Slots (vgl. Abs. 2). Angenommen, es befindet sich eine Simulationsdatei ./edge2d.mph und eine Parameterdatei ./wu291_values in dem Unterordner workunits2add/, dann würde die Befehlsreihenfolge in Listing 4.27 ein Arbeitspaket erstellen (die Daten sind angelehnt an die Namen in Abbildung 4.11). 1 2 3 4 5 6 7 $ cp ed g e2 d . mph ‘ b i n / d i r _ h i e r _ p a t h ed g e2 d . mph ‘ $ cp w o r k u n i t s 2 a d d / w u 2 9 1 _ v alu es ‘ b i n / d i r _ h i e r _ p a t h w u 2 9 1 _ v alu es ‘ $ . / b i n / c r e a t e _ w o r k −appname c o m s o l s t a r t e r \ −wu_name wu291 \ −w u _ t e m p l a t e . / E i n g a b e n s c h a b l o n e \ −r e s u l t _ t e m p l a t e . / E r g eb n is s ch ab lo n e \ ed g e2 d . mph w u 2 9 1 _ v alu es Listing 4.27: Manuelle Erstellung eines Arbeitspakets Die erste und zweite Zeile kopieren jeweils die Simulationsdateien in die Download-Ordnerstruktur des BOINC Projekts. Weiterhin wird in der Datenbank eine Referenz eingetragen, die die Zuordnung zwischen den Dateinamen in der Eingabeschablonendatei und der physikalischen Ordnerstruktur ermöglicht. Die dritte Zeile erstellt das Arbeitspaket, zu beachten ist die Reihenfolge der Dateien in der letzten Zeile. edge2d.mph wird im ComsolGridStarter mit ./comsol.mph geöffnet und ./wu291_values mit dem Dateinamen ./comsol.txt. Die Programmierung einer Routine zur Erstellung von Arbeitspaketen kann sehr aufwendig sein. In der Testversion dieser Masterarbeit wurde eine Routine mit geringer Fehlerbehandlung und Prüfung der Erfolge implementiert. An dieser Stelle sei erwähnt, dass die vorhandene Implementierung einer Überarbeitung bedarf, um eine höhere Performance zu erhalten und um eventuell die Redundanz zu steigern. Das BOINC Framework liefert mit den Funktionen SCHED_CONFIG::download_path( 55 4.15 Definition der Parameterstudienwerte ComsolGrid Framework char∗, char∗) und create_work (...) die Möglichkeit, eine solche Implementierung vorzunehmen. Es sind einige Schritte nötig um solch eine Implementierung durchzuführen: 1. Die Simulationsdateien müssen aus der Base64 Kodierung dekodiert und zwischengespeichert werden, 2. die Liste der Simulationsdateien muss erstellt werden und in der richtigen Reihenfolge sein (die Reihenfolge kann nicht geprüft werden, ist vom Simulanten abhängig), 3. die Parameterdateien werden erstellt, 4. die einzelnen Dateien müssen in die Download Ordnerstruktur des BOINC Projektes kopiert werden, 5. es muss eine Instanz eines leeren Arbeitspakets erstellt werden, 6. diese Instanz wird mit den vorher erstellten Dateien gefüllt, 7. die Arbeitspakete werden mit der Funktion create_work (...) erstellt und die Schritte (5) und (6) wiederholen sich so lange, wie eine Parameterdatei vorhanden ist, welche noch nicht zum Projekt hinzugefügt ist. Zum Testen der Arbeitspaketerstellung ist ein Skript in PHP implementiert (vgl. Anhang B.4). Wenn Änderungen an dem Prozess zur Erstellung von Arbeitspaketen vorgenommen werden, können diese mit dem erwähnten Skript geprüft werden. 4.15 Definition der Parameterstudienwerte Die Parameter in ComsolGridQt, auf der Reiter Study haben folgendes Format START:STOP:STEP:DEFAULT, wie dies in Abbildung 4.15 zu sehen ist. Das Kommunikationselement <comsol_put>, zur Erstellung von Parameterstudien kann mehrere dieser Parameter aufnehmen, die sich gekapselt in einem [RANGE]-Abschnitt (vgl. Listing 4.22) befinden. Das Listing 4.28 enthält ein Beispiel eines Parameter Range mit den drei Parametern maxT, objWidth und objHeight. Die Werte hinter den Namen in den Zeilen 1 - 3 beschreiben das oben genannte Format. 1 2 3 s t r u c t ComsolGrid : : P a r a m e t e r p1 ={ " maxT " , 0.0 , 1.0 , 0.1 , 0.5 }; s t r u c t ComsolGrid : : P a r a m e t e r p2 ={ " o b j W i d t h " , 1 0 . 0 , 2 0 . 0 , 1 . 0 , 1 5 . 0 } ; s t r u c t ComsolGrid : : P a r a m e t e r p3 ={ " o b j H e i g h t " , 3 3 . 5 , 3 4 . 0 , 0 . 1 , 3 3 . 5 } ; 4 5 6 7 8 ComsolGrid : : Range r 1 ; r 1 . p u s h _ b ack ( p1 ) ; r 1 . p u s h _ b ack ( p2 ) ; r 1 . p u s h _ b ack ( p3 ) ; 9 10 11 ComsolGrid : : Ranges r a n g e s ; r a n g e s . p u s h _ b ack ( r 1 ) ; Listing 4.28: Beispiel eines Range mit drei Parametersätzen Bei der Erstellung der Parameterdateien werden alle drei Parameter einzeln für sich durchlaufen. Das bedeutet, im ersten Schritt wird der Parameter maxT variiert und von 0.0 bis 1.0 hochgezählt, als Schrittweite wird 0.1 nach jedem Schritt hinzu addiert. Bei dieser Durchführung werden die anderen Parameter auf deren Standardwert gesetzt und für jeden Durchlauf verwendet. Für den Parameter objWidth, wird der Wert 15.0 und für den Parameter objHeight wird 33.5 als Wert, in die Simulation mit einbezogen. Das bedeutet für den ersten Fall, dass 11 Parametersätze erstellt werden, die in Listing 4.29 exemplarisch aufgezeigt sind. 56 ComsolGrid Framework 1 2 3 4 5 6 7 8 9 10 11 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten 33.5 33.5 33.5 33.5 33.5 33.5 33.5 33.5 33.5 33.5 33.5 Listing 4.29: Beispiel einer Parameterdatei, die aus den Parameter Ranges erstellt wird In dem Beispiel aus Listing 4.28 werden 28 Variationen erstellt. 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten Die Anwendung ComsolGridQt ist eine grafische Benutzeroberfläche (engl. Graphical User Interface) (GUI). Durch diese kann der Simulant Parameterstudien erstellen. Alle von ComsolGridFCGI zur Verfügung gestellten Funktionen werden unterstützt. Die grafische Benutzerschnittstelle ist in sechs Reiter aufgeteilt. Die wichtigsten Reiter sind: • Die erste Reiter in Abbildung 4.12, zur Einstellung der Authentifizierungsdaten. • Die zweite Reiter in Abbildung 4.13, um Informationen der Prozesse des Projektservers zu erhalten. • Die dritte Reiter in Abbildung 4.14, um mit Hilfe der Simulationsparameter in Abbildung 4.15 eine Parameterstudie zu erstellen. • Reiter fünf (s. Abb. 4.16), um die Class-Kit License (CKL) zu aktivieren. Die Authentifizierungsdaten sind elementar für die Verwendung von ComsolGridQt und bestehen aus drei Werten wie in Abbildung 4.12 zu sehen ist. Der Benutzername (engl. Username) wird im Feld (1), die E-Mail Adresse in Feld (2) und das Passwort (engl. Password) in Feld (3) eingetragen. Wenn der Haken bei (2) angewählt wird, werden bei der Authentifizierung am Projektserver der selbe Wert für den Benutzernamen und die E-Mail Adresse übernommen. Das Passwort kann abgespeichert werden, wenn ein Haken bei (3) gemacht wird. Der untere Bereich (4) enthält einen Ausgabe, in der Informationen für das Debuggen hinzugefügt werden. Somit kann bei Problemen mit ComsolGridQt geprüft werden wo eventuell ein Fehler vorliegt. Das untere Fenster wurde in den Abbildungen 4.13 bis 4.17 entfernt, ist in der real ausführenden Version allerdings jederzeit sichtbar und gibt stetig Informationen aus. Die Abbildung 4.13 zeigt die Informationen, die mit den Kommunikationselementen aus Abschnitt 4.12 vom Projektserver erfragt werden können. Es wird die Version des Projektservers angezeigt, welche COMSOL Multiphysics Versionen unterstützt werden (hier: 3.5a, 4.0 und 4.0a) und die in Abschnitt 4.13 erwähnten Prozessinformationen werden durch Klicken auf die unterschiedlichen Subreitern angezeigt. Die Daten können jederzeit aktualisiert werden, dazu bedarf es einem Klick auf die Schaltfläche zum Erneuern „Refresh“ der Daten . Der Klick richtet sequentiell vier Anfragen an den Projektserver: 1. Ermittlung der Projektserver Version, 2. Anfrage der unterstützten COMSOL Multiphysics Versionen, 3. alle Informationen der Prozesse und 57 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten ComsolGrid Framework Abbildung 4.12: ComsolGridQt - Ansicht der Authentifizierungbereiche und dem Debug Bereich 58 ComsolGrid Framework 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten Abbildung 4.13: ComsolGridQt - Ansicht der Prozessinformationen 4. die Nachfrage der installierten wissenschaftlichen Applikationen. Die Ergebnisse werden sofort in der Darstellung übernommen und angezeigt. Die GUI Elemente in Abbildung 4.14 und 4.15 ermöglichen das Erstellen einer neuen Parameterstudie (engl. Parameter Study). Die Elemente haben folgende Bedeutungen bzw. Funktionen: (1) Dieses Auswahlfeld ermöglicht dem Simulanten das Auswählen einer wissenschaftlichen Applikation. (2) Hier können Simulationsdateien zur Parameterstudie ausgewählt werden. (3) Nach dem Auswählen einer Simulationsdatei, muss diese in die Liste der hinzugefügten Dateien (engl. Added Files), durch ein Klick auf diese Schaltfläche, übernommen werden. Beim Hinzufügen wird geprüft, ob es sich um eine COMSOL Multiphysics Simulationsdatei handelt. Falls ja, werden vorhandene Simulationsparameter ausgelesen und in die Parameterliste in Abbildung 4.15 zur Auswahl eingetragen (vgl. Abs. 4.9). (4) Eine Liste der hinzugefügten Simulationsdateien. (5) Mit den Pfeilen kann die Reihenfolge der Elemente in (4) geändert werden. Dies ist wichtig, da die Reihenfolge der Simulationsdateien mit der Dateireihenfolge aus der Eingabeschablonendatei (6) übereinstimmen muss. Bei der Erstellung der Arbeitspakete werden die Simulationsdateien in der Reihenfolge verwendet und die Assoziation zwischen virtuellen und physikalischen Namen in der Datenbank abgelegt (s. Abs. 2.4.3). Durch die Schaltfläche Remove (auf Deutsch „Entfernen“) können die selektierten Dateien aus der Liste (4) entfernt werden. (6), (7) Diese beiden Schaltflächen erlauben es dem Simulanten die Eingabe- und Ergebnisschablonendateien auszuwählen. Bei einem Klick auf die Schaltfläche (8) oder (9), wird der Inhalt 59 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten ComsolGrid Framework Abbildung 4.14: ComsolGridQt - Ansicht zur Erstellung einer neuen Parameterstudie der Dateien eingelesen, Base64 kodiert und zum XML-Baum <comsol_put> hinzugefügt (vgl. Abs. 4.12). (8), (9) Die Schaltfläche (8) öffnet das Fenster aus Abbildung 4.20 und (9) transferiert die Daten der neuen Parameterstudie an den Projektserver. Die automatisch ermittelten Simulationsparameter (vgl. Abs. 4.9) können durch eine manuelle Eingabe (2) oder durch ein Einstellungsfenster (3) erstellt werden. Bei der Nutzung über das Einstellungsfenster, werden die Änderungen sofort in der Tabelle übernommen und der Simulant kann sich sicher sein, dass die Daten das richtige Format besitzen. Einzelne Zeilen in der Liste, können durch einen Klick auf die rechte Schaltfläche (1) entfernt und durch die linke Schaltfläche neu hinzugefügt werden. In der Abbildung 4.19 werden zu der ausgewählten wissenschaftlichen Applikation, die noch ausstehenden Arbeitspakete und die schon erhaltenen Ergebnisse durch Zahlenwerte angezeigt. Dieser Dialog ist über die Klick-Wege ’Menüleiste’ -> ComsolGrid -> Workunit Status von ComsolGridQt zu erreichen. Die Abbildung 4.20 enthält ein Textelement, in der die gefüllte Struktur des XML-Baums <comsol_put> enthalten ist. Zu erkennen sind die einzelnen Werte aus den oben erwähnten Abbildungen. (1) Diese Stelle zeigt die Authentifizierungsdaten, das Passwort wurde im Nachgang entfernt. (2) Hier wird die wissenschaftliche Applikation mit Namen und der Identifizierungsnummer beschrieben. Die Parameterstudie wird zu dieser Applikation hinzugefügt. (3) Die neue Parameterstudie besitzt <count> viele Dateien. Eine Simulationsdatei mit dem Namen edge_load_2d.mph und einer Dateigröße von 106539 Bytes. Die Daten (engl. data) der Datei sind als Base64 Kodierung mit eingefügt. 60 ComsolGrid Framework 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten Abbildung 4.15: ComsolGridQt - Tabelle zum Erstellen von Simulationsparametern Abbildung 4.16: ComsolGridQt - Einstellungen für ComsolGridStarter 61 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten ComsolGrid Framework Abbildung 4.17: ComsolGridQt - Liste der unterstützten ComsolGridStarter Versionen Abbildung 4.18: ComsolGridQt - Ansicht des „Informationsfensters“ Abbildung 4.19: ComsolGridQt - Daten der Arbeitspakete (engl. Workunits) und Ergebnisse (engl. Results) 62 ComsolGrid Framework 4.16 ComsolGridQt - Benutzerschnittstelle für Simulanten Abbildung 4.20: ComsolGridQt - Ansicht der Konfiguration einer neuen Parameterstudie (4) Es wurde eine Parameterreihe erstellt, die fünf Parameter enthält. (5) Ebenso wie die Daten der Simulationsdateien, sind die Daten der Schablonendateien als Base64 Kodierung mit in den XML-Baum eingetragen. (6) Diese Parameter betreffen den ComsolGridStarter direkt, dies ist in Abschnitt 4.7.2 nachzulesen. 63 4.17 ComsolGrid Validator ComsolGrid Framework 4.17 ComsolGrid Validator In der Testversion von dem ComsolGrid Framework werden zwei Standardvalidatoren verwendet. Diese wurden direkt aus dem BOINC Framework und den beigefügten Beispielanwendungen übernommen. Es wurde der (1) trivial_validator und der (2) bitwise_validator zum ComsolGrid Framework hinzugefügt. (1) wurde umbenannt zu comsol_trivial_validator und (2) wurde zu comsol_bitwise_validator umbenannt, damit eine spätere Modifizierung ermöglicht wird und nicht in den Konfigurationen des Projektservers eingegriffen werden muss. So können neuere Versionen an die Stelle der alten Versionen kopiert und der Projektserver neu gestartet werden, so dass die Änderungen greifen. (1) Prüft nur ob eine Grenze der Rechenzeit überschritten wurde, wenn nein, dann ist das Ergebnis valide, andernfalls wird das Ergebnis als Fehler markiert. (2) Prüft zwei Ergebnisse auf gleiches binäres Format, sprich ob die Dateien bitweise gleich sind, wenn ja, ist das Ergebnis valide, andernfalls wird das Ergebnis als Fehler markiert. 4.18 ComsolGrid Assimilator Der Assimilator im Comsol Grid Framework, wurde wie die Validatoren vom BOINC Framework übernommen. Der dort beigefügte Beispielassimilator copydir_assimilator wurde zu comsol_copydir_assimilator umbenannt und dem Entwicklungszweig von dem ComsolGrid Framework hinzugefügt. Ebenso wie bei den Validatoren in Abschnitt 4.17, können Änderungen durch einfaches Ersetzen der alten Anwendung und Neustarten des Projektservers übernommen werden. Das valide Ergebnis aus der Validierung wird in einen Dateiordner kopiert, die Ergebnisse werden durchgehend mit einer Identifikation ausgestattet. Dies ist der einzige Unterschiede zum Assimilator, welcher vom BOINC Framework mitgeliefert wird. Dort werden nur Identifikationsnummern verwendet, wenn mehr als ein Arbeitspaket mit demselben Namen vorhanden ist. 64 Kapitel 5 Testlauf und Funktionsprüfung If you want and expect a program to work, you will be more likely to see a working program – you will miss failures. If you expect it to fail, you’ll be more likely to see the problems. If you are punished for reporting failures, you will miss failures. You won’t only fail to report them – you will not notice them. Kaner et al., 1999 Dieses Kapitel beschreibt Testdurchläufe, die im Rahmen dieser Masterarbeit durchgeführt worden sind. Es beinhaltet die Beschreibung einer Testumgebung, einer Darlegung der verwendeten Konfigurationen und einer Auflistung von Problemen und Fehlern die während der Tests aufkommen sind. Insgesamt wurden zwei Testdurchläufe absolviert. Die Fehlerquote des ersten Durchlaufs aus Abschnitt 5.3, wurde im zweiten Testlauf aus Abschnitt 5.4 stark verringert. 5.1 Testumgebung Die Testumgebung besteht aus drei Computersystemen, die sich im Netzbereich 192.168.1.0/24 befinden. In Abbildung 5.1 ist die Testumgebung verdeutlicht. Die drei Computersysteme sind mit einem Router verbunden. An diesen Router ist weiterhin der Projektserver angeschlossen. Es ist nicht ausgeschlossen, dass sich weitere Teilnehmer aus den Weitere Netzwerke verbinden. Der Projektserver beinhaltet die Installation der Applikation COMSOL Multiphysics. Diese Installation wird mit dem Network File System (NFS) Protokoll an die drei Teilnehmer verteilt. Die NFS Serverkonfiguration befindet sich in der Datei /etc/exports, in Listing 5.1 ist der Inhalt aufgelistet1 . Im 1 Die Manpage $man 5 exports zu dieser Datei liefert weitere Informationen über die Struktur und Parameter dieser Konfigurationsdatei. Abbildung 5.1: Struktur der ComsolGrid Testumgebung 65 5.1 Testumgebung Testlauf und Funktionsprüfung Listing sind die ersten beiden Zeilen auskommentiert. Das Simulationsmodell in diesen Testläufen ist ein COMSOL Multiphysics Version 4.0a Modell, daher sind die ersten beiden COMSOL Multiphysics Versionen nicht nötig und werden nicht an die Clients exportiert. Der zweite Parameter visualgrid-* beschreibt die Clients/Hosts, die sich die Freigaben der Applikation COMSOL Multiphysics importieren dürfen. 1 2 3 # / u s r / l o c a l / co m s o l3 5 a v i s u a l g r i d −∗(rw , f s i d = r o o t , n o _ r o o t _ s q u a s h , n o _ s u b t r e e _ c h e c k , async ) # / u s r / l o c a l / co m s o l4 0 v i s u a l g r i d −∗(rw , f s i d = r o o t , n o _ r o o t _ s q u a s h , n o _ s u b t r e e _ c h e c k , async ) / u s r / l o c a l / co m s o l4 0 a v i s u a l g r i d −∗(rw , n o _ r o o t _ s q u a s h , n o _ s u b t r e e _ c h e c k , a s y n c ) Listing 5.1: Konfiguration des NFS Server Die privilegierten Clients/Hosts sind in der Datei /etc/hosts definiert, der Inhalt ist in Listing 5.2 aufgeführt. Die Definitionen aus dem Listing sind Aliase und ermöglichen die wahlweise Nutzung der IP-Adresse oder des jeweiligen FQDN der Clients/Hosts. 1 2 3 1 9 2 . 1 6 8 . 1 . 2 0 0 v i s u a l g r i d −1 1 9 2 . 1 6 8 . 1 . 2 0 1 v i s u a l g r i d −2 1 9 2 . 1 6 8 . 1 . 2 0 2 v i s u a l g r i d −3 Listing 5.2: Hostnamen der COMSOL Multiphysics Testhosts Eingebunden wird das exportierte Verzeichnis durch den Befehl $mount in einem Linux System. Dieses kann automatisch beim Starten der Computersysteme geschehen, oder manuell durch den Benutzer des Computersystems. In Listing 5.3 ist die Konfiguration aus der Datei /etc/fstab der einzelnen Clients/Hosts aufgeführt, um durch diese Einstellungen den Ordner mit der COMSOL Multiphysics Installation zu importieren2. Die ersten zwei Zeilen sind wie in Listing 5.1 auskommentiert, da diese COMSOL Versionen nicht in dieser Testinstallation verwendet werden. 1 2 3 # 1 9 2 . 1 6 8 . 1 . 2 0 0 : / u s r / l o c a l / co m s o l3 5 a / u s r / l o c a l / co m s o l3 5 a n f s n o s u i d , s o f t , i n t r 0 0 # 1 9 2 . 1 6 8 . 1 . 2 0 0 : / u s r / l o c a l / co m s o l4 0 / u s r / l o c a l / co m s o l4 0 n f s n o s u i d , s o f t , i n t r 0 0 1 9 2 . 1 6 8 . 1 . 2 0 0 : / u s r / l o c a l / co m s o l4 0 a / u s r / l o c a l / co m s o l4 0 a n f s n o s u i d , s o f t , i n t r 0 0 Listing 5.3: Konfiguration zum Importieren des Ordner der COMSOL Multiphysics Installation Die drei Computersysteme haben folgende Eigenschaften: visualgrid-1;192.168.1.200/24 Plattform: 64 Bit-System, Prozessor: 8xIntel(R) Core(T M) i7 CPU 860 2.8GHz, Speicher: 8GB, Betriebssystem: Linux Ubuntu 10.4 LTS, Kernel: 2.6.32-22generic visualgrid-2;192.168.1.201/24 Plattform: 32 Bit-System, Prozessor: 2xIntel(R) Pentium(R) 4 CPU 3.2GHz, Speicher: 2GB, Betriebssystem: Linux Ubuntu 10.4 LTS, Kernel: 2.6.32-24-genericpae visualgrid-3;192.168.1.202/24 Plattform: 32 Bit-System, Prozessor: 2xIntel(R) Pentium(R) D CPU 3.2GHz, Speicher: 3GB, Betriebssystem: Linux Ubuntu 10.4 LTS, Kernel: 2.6.32-24-genericpae Die Eigenschaften des Servers sind bei einer geringen Anzahl von Clients/Hosts nicht relevant und müssen nicht unbedingt beachtet werden. Sollte die Anzahl der Teilnehmer allerdings in die Höhe schnellen, muss über eine angemessene Konfiguration nachgedacht werden. ComsolGridStarter wurde in einer 32-Bit und 64-Bit Version zum Projekt hinzugefügt. In Listing 5.4 werden die zwei Versionen in der Dateisystemhierarchie der Projektinstallation angezeigt. 2 Die 66 Manpages zum $mount-Befehl geben Informationen zu der Struktur der Datei /etc/fstab. Testlauf und Funktionsprüfung 5.2 Testparameter Abbildung 5.2: Ergebnis des COMSOL Multiphysics Testmodells falling_sand.mph 1 2 3 4 5 6 7 8 apps / ‘++ c o m s o l s t a r t e r ‘++ c o m s o l s t a r t e r _ 0 . 1 0 _ i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 a ‘++++ c o m s o l s t a r t e r _ 0 . 1 0 _ i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 a ++++ co m s o l . xml= co m s o l_ 0 . 1 0 _ i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 a . xml ‘++ c o m s o l s t a r t e r _ 0 . 1 0 _x86_64 −pc−l i n u x −g n u _ co m s o l4 0 a ‘++++ c o m s o l s t a r t e r _ 0 . 1 0 _x86_64 −pc−l i n u x −g n u _ co m s o l4 0 a ++++ co m s o l . xml= co m s o l_ 0 . 1 0 _x86_64 −pc−l i n u x −g n u _ co m s o l4 0 a . xml Listing 5.4: 32-Bit und 64-Bit Version von ComsolGridStarter 5.2 Testparameter Der Testdurchlauf wird mit einem COMSOL Multiphysics Simulationsmodell für das Major Release 4.0a ausgeführt. Es wurde kein eigenes Simulationsmodell erstellt. Der Testbetrieb wird mit einem Simulationsmodellbeispiel ausgeführt, welches bei der Installation von COMSOL Multiphysics mit installiert wird und hat den Namen falling_sand.mph. Dieses Simulationsmodell ist eine FluidDynamik Simulation und befindet sich in dieser Testinstallation im Dateiordner /usr/local/comsol40a/models/COMSOL\_Multiphysics/Fluid\_Dynamics/ Die Beschreibung dieser Datei steht im nachfolgenden zitierten Text, der Eins-zu-eins aus dem Modell übernommen ist. In der Abbildung 5.2, ist das Ergebnis dieser Simulation zu finden. Für weitere Erläuterungen und Informationen über das Modell, wird an dieser Stelle direkt auf die Hilfe von COMSOL Multiphysics verwiesen. In dieser Masterarbeit ist nicht das Modell relevant, sondern die Umsetzung der Parameterstudie. Terminal Falling Velocity of a Sand Grain A spherical sand grain falls in a water tank. Released from stand-still, the grain accelerates and reaches a terminal velocity. This model simulates the fluid flow in a moving coordinate system coupled to an ODE that describes the force balance on the grain. 67 5.2 Testparameter Testlauf und Funktionsprüfung Abbildung 5.3: Parameter des COMSOL Multiphysics Testmodells falling_sand.mph Für eine Parameterstudie werden Parameter benötigt. Das Modell besitzt schon sechs Parameter (vgl. Abb. 5.3), diese werden so übernommen und um zwei Parameter erweitert. Diese zwei neuen Parameter sind zum Einstellen der Geometrie gedacht. Für diesen Zweck wurden die Parametervariablen objWidth und objHeight zum Parametersatz hinzugefügt. Im Simulationsdurchlauf mit dem ComsolGrid Framework, werden diese Parameter zwischen 0.001 − 0.015 für objWidth und 0.001 − 0.025 für objHeight definiert. Die zwei Parameter werden nach dem Format aus Abschnitt 4.9 folgendermaßen variiert: objWidth 0.001:0.015:0.0005:0.006 objHeight 0.001:0.025:0.001:0.014 Insgesamt werden somit 54 Arbeitspakete erstellt, wie dies in Listing 5.5 zu sehen ist. Es werden zwei Ergebnisse für die Validierung eines Arbeitspakets verlangt, daher werden in Abbildung 5.4 (1) 108 angezeigt. Im Listing 5.5 wird die Ausgabe von ComsolGridFCGI gezeigt, wenn eine Parameterstudie vom Simulanten erstellt wird. Zeile 15 und 16 enthalten die Variationsparameter mit ihren Start-/End- und der Schrittweite. In Zeile 17 wird bekanntgegeben, dass die Arbeitspaketdateien im Downloadordner des Projektservers erstellt sind. Die Zeilen danach, geben Auskunft darüber, welches Arbeitspaket zum Server hinzugefügt wurde. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 68 ComsolStudyXML p a r s e ( ) e n t e r i n g . . . a u t h u s er n am e : boincadm@fh− b i e l e f e l d . de a u t h e m a i l : boincadm@fh−b i e l e f e l d . de a u t h p a s s w o r d : xxx U s er ( boincadm@fh−b i e l e f e l d . de ) l o g g e d i n . ComsolStudyXML p a r s e ( ) l e a v i n g . . . OK: S t o r i n g i n p u t t e m p l a t e d a t a . OK: S t o r i n g r e s u l t t e m p l a t e d a t a . OK: 1 f i l e ( s ) u p l o a d e d DEBUG: u p l o a d e d f i l e : f a l l i n g _ s a n d . mph DEBUG: u p l o a d d i r e c t o r y : / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / u p l o a d DEBUG: w o r k u n i t name : w u _ co m s o lg r i d _%d_%05d DEBUG: r a n g e c o u n t : 1 DEBUG: r a n g e w i t h 2 p a r a m e t e r : DEBUG: > p : o b j W i d t h : 0 . 0 0 1 0 0 0 : 0 . 0 1 5 0 0 0 : 0 . 0 0 0 5 0 0 DEBUG: > p : o b j H e i g h t : 0 . 0 0 1 0 0 0 : 0 . 0 2 5 0 0 0 : 0 . 0 0 1 0 0 0 DEBUG: 54 f i l e s c r e a t e d DEBUG: i n f i l e s _ l a s t _ i n d e x =1 DEBUG: f i l e n a m e ( 0 ) = f a l l i n g _ s a n d . mph DEBUG: wu f i l e n a m e = w u _ co m s o lg r id _ 1 _ 0 0 0 0 1 DEBUG: i n f i l e s _ l a s t _ i n d e x =1 DEBUG: f i l e n a m e ( 0 ) = f a l l i n g _ s a n d . mph DEBUG: wu f i l e n a m e = w u _ co m s o lg r id _ 1 _ 0 0 0 0 2 Testlauf und Funktionsprüfung 24 25 5.3 Ergebnisse des 1. Testlaufs ... ... Listing 5.5: Ausgabe der ComsolGridFCGI Applikation zur Erstellung von Arbeitspaketen In Listing 5.6 wird der Status des Projekts gezeigt. Die Prozesse zum Zuweisen von Arbeitspaketen an die jeweiligen Clients (feeder, transitioner), zum Löschen von alten und nicht mehr benötigten Dateien und Datensätzen (file_deleter, db_purge) sind gestartet. Die zwei Programme comsol_bitwise_validator (vgl. Abs. 4.17) und comsol_copydir_asssimilate (vgl. Abs. 4.18) sind dem Projekt hinzugefügt und gestartet. Diese zwei Anwendungen validieren die zurückgelieferten Ergebnisse und speichern diese im Dateisystem ab, wenn ein valides Ergebnis vorliegt. 1 BOINC i s ENABLED 2 3 4 5 6 7 8 9 DAEMON p i d 1 12846 2 12848 3 12850 4 12852 5 12854 6 12856 status running running running running running running . . . commandline . . . f e e d e r −d 2 . . . t r a n s i t i o n e r −d 2 . . . f i l e _ d e l e t e r −d 2 . . . c o m s o l _ b i t w i s e _ v a l i d a t o r −mod 2 1 −d 2 −app c o m s o l s t a r t e r . . . c o m s o l _ c o p y d i r _ a s s i m i l a t e −d 2 −app c o m s o l s t a r t e r . . . d b _ p u r g e −d 2 −m in _ ag e_ d ay s 7 −g z i p 10 11 12 13 14 15 16 17 18 TASK 1 2 3 4 5 6 7 ... ... ... ... ... ... ... ... period 5 min 5 min 5 min 5 min 5 min 1 days 1 days next run NOW NOW NOW NOW NOW NOW NOW ... ... ... ... ... ... ... ... commandline db_dump −d 2 −dump_spec . . / db_dump_spec . xml r u n _ i n _ o p s . / u p d a t e _ u o t d . php r u n _ i n _ o p s . / u p d a t e _ f o r u m _ a c t i v i t i e s . php u p d a t e _ s t a t s −u p d a t e _ u s e r s −u p d a t e _ h o s t s r u n _ i n _ o p s . / u p d a t e _ p r o f i l e _ p a g e s . php r u n _ i n _ o p s . / t e a m _ i m p o r t . php r u n _ i n _ o p s . / n o t i f y . php Listing 5.6: Projektstatus, nachdem die Parameterstudie initialisiert ist (gekürzte Ausgabe) 5.3 Ergebnisse des 1. Testlaufs Das ComsolGrid Framework funktioniert. Die Testreihe aus dem vorherigen Kapitel wurde in knapp zwei Stunden bearbeitet. In Abbildung 5.4 ist das gesamte Ergebnis der Simulationsdurchführung nachvollziehbar. Die nachfolgende Auflistung beschreibt die nummerierten Elemente in der Abbildung. (1) Anzahl der gesamten durchzuführenden Simulationen. Es wurden im vorherigen Abschnitt nur die Hälfte an Arbeitspaketen erstellt, allerdings werden zwei Ergebnisse benötigt, um das Ergebnis zu validieren. (2) Entspricht der Anzahl an erfolgreichen Simulationsdurchführungen. Somit sind 37% der Arbeitspakete erfolgreich bearbeitet worden. Es ist eine starke Erhöhung möglich, wenn die Fehler beim Herunterladen (vgl. Abb. 5.6) der Dateien nicht mehr vorkommen. (3) Anzahl der Fehler bei der Durchführung der Parameterstudie. (4) Dieser Wert ist gleich dem Vorherigen, da 34 Simulationen nicht durchgeführt wurden, müssen diese 34 Simulationen nicht durchgeführt werden. Diese könnten nicht validiert werden, da ein zweites Ergebnis fehlt. (5) Anzahl der bisher erfolgreich validierten Ergebnisse, 11 weitere Validierungen wurden übersprungen, da die zweiten Ergebnisse wohl sicherlich einen Fehler bei der Durchführung hatten. Die Summe der Ergebnisse in dieser Tabelle, entsprechen dem Wert der erfolgreichen Simulationen. 69 5.4 Ergebnisse des 2. Testlaufs Testlauf und Funktionsprüfung Es muss erwähnt werden, dass die Durchführung sicherlich eine bis zwei Stunden länger gedauert hätte, wenn nicht im Laufe der Simulation das Simulationsmodell von dem Daemon file_deleter gelöscht worden würde. Durch das vorzeitige Löschen, kam es zu 29 Fehlern beim Herunterladen der Daten (vgl. Abb. 5.6). Weiterhin sind vier Fehler vorhanden, bei denen die Grenze der erlaubten Ressourcennutzung (evtl. Ergebnisdatei zu groß, oder zu hohe Anzahl an Rechenzyklen) überschritten wurde. Der eine unbekannte Fehler liegt an einem Absturz des BOINC Managers auf dem Host visualgrid-2, während der Ausführung eines Arbeitspakets. Der BOINC Manager ist womöglich deswegen abgestürzt, da es beim Starten von COMSOL ein Problem gab. Dieses Problem konnte durch eine Änderung der COMSOL Konfiguration behoben werden. Die nachfolgende Datei enthält die COMSOL relevanten Laufzeiteinstellungen. /home/cr/.comsol/v40a/comsol.prefs Der Parameter graphics.rendering.2drend=swt musste auf diesem Client in graphics.rendering.2drend=swing geändert werden. Nach dieser Änderung, wurden die Simulationen erfolgreich gestartet und ausgeführt. SWT3 und SWIFT sind Programmbibliotheken, die das Rendering von bestimmten grafischen Elementen übernehmen. In der Abbildung 5.5 können mehr Informationen zu den Fehlern eingeholt werden. Es wird angezeigt, auf welchem Host welche Art von Fehler aufgetreten ist und wann dieser Fehler war. Durch einen Klick auf die Nummern links im Bild, wird eine Detailansicht der einzelnen Ergebnisse angezeigt. Zur Ermittlung der Fehlerquellen muss diese Detailansicht nicht in Anspruch genommen werden, da der Fehler schon im Vorfeld gefunden wurde. 5.4 Ergebnisse des 2. Testlaufs Es wurde ein zweiter Testlauf durchgeführt und die Konfiguration für diesen Testlauf wurde von der ersten Testinstallation übernommen. Eine Ausnahme wurde hinzugefügt, der Prozess zum Löschen von nicht mehr benötigten Dateien wurde in der Konfigurationsdatei config.xml deaktiviert. Das folgende Listing 5.7 beinhaltet den editierten Ausschnitt der Konfigurationsdatei: 1 2 3 4 5 6 <daemon > <cmd> f i l e _ d e l e t e r −d 2 </cmd> < d i s a b l e d > 1 </ d i s a b l e d > < o u t p u t > f i l e _ d e l e t e r . l o g </ o u t p u t > < p i d _ f i l e > f i l e _ d e l e t e r . p i d </ p i d _ f i l e > </ daemon > Listing 5.7: Konfiguration zum Deaktivieren eines Daemon Der entscheide Parameter ist in Zeile drei hinzugefügt. Der Daemon ist deaktiviert, siehe auch das nachfolgende Listing 5.8. Dieses sagt aus, dass der Daemon nicht gestartet ist und dadurch auch keine PID besitzt. 3 Das Standard Widget Toolkit (SWT) ist eine Java Bibliothek zur Erstellung von Benutzeroberflächen, http://www.eclipse.org/swt. 70 Testlauf und Funktionsprüfung 5.4 Ergebnisse des 2. Testlaufs Abbildung 5.4: Ergebnisseite des 1. Testdurchlaufs Abbildung 5.5: Fehleransicht des 1. Testdurchlaufs Abbildung 5.6: Auflistung der Fehler des 1. Testdurchlaufs 71 5.4 Ergebnisse des 2. Testlaufs Testlauf und Funktionsprüfung Abbildung 5.7: Ergebnisseite des 2. Testdurchlaufs 1 2 3 4 DAEMON p i d 1 7119 2 7122 3 0 status running running lockfile locked locked UNLOCKED disabled no no yes commandline f e e d e r −d 2 t r a n s i t i o n e r −d 2 f i l e _ d e l e t e r −d 2 Listing 5.8: Status des BOINC Projekts mit deaktiviertem file_deleter Prozess Das Ergebnis des zweiten Testdurchlaufs ist eine Erfolgsquote von 95%. Die Abbildungen 5.7 und 5.8 verdeutlichen dies. Der gesamte Testlauf benötigte 209 Minuten. In Abbildung 5.7 ist folgendes zu erkennen: (1) Es wurden 82 vollständige Simulationen erfolgreich durchgeführt. (2) Bei der Ausführung sind 5 Fehler aufgetreten. Diese sind einfach nachvollziehbar, 3 Fehler entsprechen den Fehlern beim ersten Testlauf und bei den 2 weiteren hat ein Rechner gestreikt. Dieser Rechner ist einmal abgestürzt und das zweite Problem war, dass die Benutzeroberfläche eingefroren ist und dadurch diese nicht mehr steuerbar. (3) Zum Zeitpunkt der Erstellung des Bildschirmfoto, wurden 27 Arbeitspakete erfolgreich validiert. Es wurde danach eine manuelle Validierung durchgeführt, so dass nicht auf den nächsten Validierungszeitpunkt gewartet werden musste. Die Abbildung 5.8 beinhaltet das Ergebnis der manuellen Validierung, 54 Arbeitspakete sind erfolgreich validiert worden (1). Es sind weiterhin 28 invalide Ergebnisse vorhanden, da bei der manuellen Ausführung der Validierung eine einfache Validierung gewählt, also keine zwei Ergebnisse benötigt werden. Die Ergebnisdateien sind im Ergebnisordner gespeichert. Das Listing 5.9 beinhaltet eine gekürzte Ansicht der Ergebnisse. 1 2 3 72 b o i n c a d m @ v i s u a l g r i d −s e r v e r : ~ / p r o j e c t s / c o m s o l w r a p p e r / c o m s o l g r i d _ r e s u l t s $ l −h t o t a l 97M drwxrwxr−x 2 boincadm boincadm 4 , 0K 2010−09−03 0 9 : 5 9 e r r o r s Testlauf und Funktionsprüfung 5.4 Ergebnisse des 2. Testlaufs Abbildung 5.8: Ergebnisseite des 2. Testdurchlaufs nach manueller Validierung 4 5 6 7 8 9 10 11 12 −rw−r−−r−− −rw−r−−r−− −rw−r−−r−− −rw−r−−r−− −rw−r−−r−− −rw−r−−r−− −rw−r−−r−− ... ... 1 1 1 1 1 1 1 boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm boincadm 5 , 1M 5 , 1M 5 , 1M 5 , 1M 5 , 1M 5 , 1M 5 , 1M 2010−09−03 2010−09−03 2010−09−03 2010−09−03 2010−09−03 2010−09−03 2010−09−03 11:17 10:24 10:18 10:26 11:09 10:59 11:37 wu_1_11_000000 wu_1_17_000000 wu_1_23_000000 wu_1_25_000000 wu_1_27_000000 wu_1_29_000000 wu_1_31_000000 Listing 5.9: Gekürzte Ansicht der Ergebnisdateien 73 Kapitel 6 Zusammenfassung und weitere Betrachtungen Intelligenz lässt sich nicht am Weg, sondern nur am Ergebnis feststellen. Garri Kasparov 6.1 Wissenschaftlicher Beitrag Der wissenschaftliche Beitrag ist: 1. Es wurde die Möglichkeit geschaffen, eine Legacy Applikation mit BOINC arbeiten zu lassen, ohne dass eine externe Wrapper Implementierung verwendet werden muss, mit der keine direkte Prozesskontrolle möglich ist. 2. Weiterhin können hoch-skalierbare COMSOL Multiphysics Parameterstudien in Zusammenarbeit mit BOINC durchgeführt werden. Diese Masterarbeit ermöglicht es hoch-skalierbare Langzeitsimulationen mit verschiedenen Parametern zu erstellen und unabhängig voneinander ausführen zu lassen. Dadurch können schnellere Ergebnisse durch parallele Verarbeitung erstellt werden. Diese Arbeit besitzt - wirtschaftlich gesprochen - eine hohe Rentabilität und sollte weiter verfolgt werden! 6.2 Zusammenfassung Diese Masterarbeit gab einen Überblick über die Funktionalitäten von BOINC, wofür BOINC verwendet werden kann, wie die Architektur eines BOINC Projekts und des zugehörigen Framework geschaffen ist und wie Entwickler, Wissenschaftler oder Simulanten damit arbeiten können. Im Kern dieser Arbeit wurde das ComsolGrid Framework erläutert, mit dessen Hilfe die COMSOL Multiphysics Simulationssoftware mit BOINC verheiratet wurde. Es sind die Möglichkeiten geschaffen worden, um mit einem einfach zu bedienenden grafischen Werkzeug, hoch-skalierbare Parameterstudien zu erstellen. Während der Laufzeit der Simulation, können zu jeder Zeit Informationen über die laufenden Prozesse eingeholt werden. Es ist ein eigener Wrapper entwickelt worden, der die Steuerung von COMSOL Multiphysics über das BOINC Framework ermöglicht. Der Anwender hat volle Kontrolle über die Laufzeiten der Simulationen und kann diese jederzeit pausieren, weiterführen oder abbrechen. Der Fortschritt der Simulationen, kann von den Anwendern jederzeit eingesehen werden. Es sind verschiedene COMSOL Multiphysics Versionen nutzbar. Es werden automatisch die einstellbaren Simulationsparameter ermittelt und dem Simulanten für 75 6.3 Zukünftige Arbeiten Zusammenfassung und weitere Betrachtungen Konfigurationszwecke zur Verfügung gestellt. Die ComsolGridFCGI Schnittstelle auf dem Projektserver, übernimmt die aufwendige Erstellung von Arbeitspaketen mit den unterschiedlichsten Parameterwerten. Zu guter Letzt überprüfen spezielle Validatoren und Assimilatoren die Ergebnisse und speichern diese für spätere Zugriffe ab. Eine kleine Testreihe hat bewiesen, dass das ComsolGrid Framework zuverlässig und richtig arbeitet. 6.3 Zukünftige Arbeiten Durch diese Arbeit wurde der Blickwinkel auf das BOINC Framework und die darunter liegende Architektur vergrößert. Es wurde ein Gespür für die Mächtigkeit des BOINC Frameworks entwickelt. Die Gabe einzuschätzen, mit wie vielen oder wie wenig Schritten eine Erweiterung der Funktionalität oder Abänderung der logischen Struktur von BOINC möglich ist, wurde verfeinert. Für weitere Arbeiten wäre ein neuer Ansatz einer Wrapper Implementierung denkbar. Ein Linux Kernelmodul könnte die Verwaltung der Prozesse übernehmen. Das Simulationswerkzeug zum Starten der Legacy Applikation registriert sich beim Kernelmodul und gibt an, welches Programm gestartet werden soll. Das Kernelmodul startet dieses Programm und lässt sich über ein CharacterDevice steuern und auslesen. Dadurch würde der Verwaltungsapparat für das BOINC Framework womöglich gering sein. Das ComsolGrid Framework kann durch zahlreiche Funktionalitäten erweitert werden. Im Anhang A sind Argumente aufgeführt, mit denen die COMSOL Multiphysics Simulationssoftware gestartet werden kann. Die aktuelle Wrapper Implementierung unterstützt nicht alle Argumente, diese Möglichkeiten könnten geschaffen werden. Weiterhin fehlen an einigen Stellen, in der Interna des ComsolGrid Frameworks, ordnungsgemäße Fehlerbehandlungen, z.B. bei der Erstellung von Arbeitspaketen. Bisher sind Protokollierungsdateien der beste Weg zur Analyse und Diagnose. Das gesamte Framework ist bisher nur auf Linux Systemen geprüft und ausgeführt worden. Eine Portierung auf weitere Plattformen wäre denkbar. Der Wrapper kann für weitere Legacy Applikationen umgeschrieben werden, evtl. wäre eine Implementierung als generell verwendbarer Wrapper denkbar. Dieser generelle Wrapper könnte sich adaptiv an die auszuführenden Legacy Applikationen anpassen, somit wäre eine dauerhafte Ausführung von verschiedensten Anwendungen denkbar (evtl. durch Einführung von Profilen für verschiedene Anwendungen). Weiterhin wäre eine Vereinfachung der Installation und Nutzung möglich, z.B. könnten Konfigurationen passend generiert werden. Die Installation der Grundstruktur wird bisher nur durch ein einfaches Shell-Skript zur Verfügung gestellt. An dieser Stelle ist viel Potential für Verbesserungen vorhanden, allein in Bezug auf Fehler bei der Installation, wenn Zugriffsrechte falsch gesetzt werden. 76 Literaturverzeichnis [1] D. P. Anderson, BOINC: Middleware for Volunteer Computing, Space Sciences Laboratory, University of California, Berkeley, 2010 [2] D. P. Anderson, C. Christensen, and B. Allen, Designing a Runtime System for Volunteer Computing, UC Berkeley Space Sciences Laboratory, Dept. of Physics, University of Oxford, and Physics Dept., University of Wisconsin - Milwaukee, 2006 [3] D. P. Anderson, and G. Fedak, The Computational and Storage Potential of Volunteer Computing, IEEE/ACM International Symposium on Cluster Computing and the Grid, Singapore, May, 2006 [4] D. P. Anderson, BOINC: A System for Public-Resource Computing and Storage, 5th IEEE/ACM International Workshop on Grid Computing, Pittsburgh, USA, November, 2004 [5] D. P. Anderson, E. Korpela, and R. Walton, High-Performance Task Distribution for Volunteer Computing, First IEEE International Conference on e-Science and Grid Technologies, Melbourne, December, 2005 [6] O. Baskova, O. Gatsenko, G. Fedak, O. Lodygensky, and Y. Gordienko, Porting Multiparametric MATLAB Application for Image and Video Processing to Desktop Grid for HighPerformance Distributed Computing, Poster, March, 2010 [7] J. Blanchette, and M. Summerfield, C++ GUI Programming with Qt 4, Prentice Hall Internationa, 2006 [8] R. Bless, E.-O. Blaß, M. Conrad, H.-J. Hof, K. Kutzner, S. Mink, und M. Schöller, Sichere Netzwerkkommunikation: Grundlagen, Protokolle und Architekturen, Springer, Berlin, Juni, 2005, ISBN: 978-3540218456 [9] T. Bray, J. Paoli, C. M. Sperberg-McQueen, E. Maler, and F. Yergeau, Extensible Markup Language (XML) 1.0 (Fifth Edition), W3C, Specification, 26. November 2008 [10] M. R. Brown, FastCGI Specification, Open Market, Inc., 245 First Street, Cambridge, MA 02142 U.S.A., April, 1996, URL: http://www.fastcgi.com [11] P. P. Chen, The Entity-Relationship Model: Toward a Unified View of Data, ACM Transactions on Database Systems, Volume 1, Pages 9-36, 1976 [12] P. Deutsch, GZIP file format specification version 4.3, Aladdin Enterprises, Network Working Group, RFC 1952, 1996 77 LITERATURVERZEICHNIS [13] C. Gillies, Wie wir waren. Die wilden Jahre der Web-Generation, Wiley-VCH, 1. Auflage, Juli, 2003, ISBN: 978-3527500666 [14] D. Gonzales, F. Vega, L. Trujillo, G. Olague, M. Cardenas, L. Araujo, P. Castillo, K. Sharman, and A. Silva, Interpreted Applications within BOINC Infrastructure, Presentation, May, 2008 [15] B. J. Gough, and R. M. Stallman, An Introduction to GCC, Network Theory Ltd, März, 2004, ISBN: 978-0954161798 [16] B. Grüdelbach, Programming Library: hashlib++, URL: http://hashlib2plus.sourceforge.net [17] S. Josefsson, The Base16, Base32, and Base64 Data Encodings, Network Working Group, RFC 3548, Juli, 2003 [18] S. Josefsson, The Base16, Base32, and Base64 Data Encodings, Network Working Group, RFC 4648, Oktober 2006 [19] C. Kaner, J. Falk, and H. Q. Nguyen, Testing Computer Software, Wiley, 1999, ISBN 0-47135846-0 [20] C. B. Ries, T. Hilbig, and C. Schröder, UML 2.2: Profil: Visu@lGridML, University of Applied Sciences Bielefeld, April, 2010 [21] R. Rivest, The MD5 Message-Digest Algorithm, MIT LCS & RSA Data Security, Inc., RFC 1321, April, 1992 [22] R. Saccoccio, FastCGI, O’reilly’s Open Source ’99 Conference, Monterey, CA, USA, 1999 [23] A. C. Marosi, Z. Balaton, and P. Kacsuk, GenWrapper: A Generic Wrapper for Running Lagacy Applications on Desktop Grids, 3rd Workshop on Desktop Grids and Volunteer Computing Systems (PCGrid 2009), Rome, Italy, May, 2009 [24] R. Mecklenburg, Managing Projects with GNU Make: The Power of GNU Make for Building Anything, O’Reilly, November, 2004, ISBN: 978-0596006105 [25] J. Muday, ipchains and iptables for Firewalling and Routing, Instructional Technology Consultant, Department of Biology, Wake Forest University, 2003 [26] Sun Microsystems, Inc., JavaTM Object Serialization Specification, Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, California 94303-4900 U.S.A., 2003 [27] Sun Microsystems, Inc., JAR File Specification, Oracle and/or its affiliates., 2003 [28] Canoncial Ltd., Ubuntu Team Wiki, https://wiki.ubuntu.com https://wiki.ubuntu.com [29] unknown, FastCGI: A High-Performance Web Server Interface, Open Market, Inc., 245 First Street, Cambridge, MA 02142 U.S.A., April, 1996, URL: http://www.fastcgi.com [30] unknown, FastCGI: Understanding FastCGI Application Performance, Open Market, Inc., 245 First Street, Cambridge, MA 02142 U.S.A., June, 1996, URL: http://www.fastcgi.com [31] M. Zahn, Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL, Springer, Berlin, 2006, ISBN: 978-3540002994 [32] Qt - Cross-platform application and UI framework, URL: http://qt.nokia.com 78 LITERATURVERZEICHNIS [33] BOINC - Open-source software for volunteer computing and grid computing, URL: http://boinc.berkeley.edu [34] Unofficial BOINC Wiki, URL: http://www.boinc-wiki.info [35] COMSOL Multiphysics, URL: http://www.comsol.de [36] mod_ssl - Apache HTTP Server, URL: http://httpd.apache.org/docs/2.0/mod/mod_ssl.html [37] SSL/TLS Strong Encryption: FAQ http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html Apache HTTP Server, URL: [38] MySQL 5.6 Reference Manual, URL: http://dev.mysql.com/doc/refman/5.6/en/ 79 Anhang A COMSOL Multiphysics Startparameter Diese Abschnitt beinhaltet die Parameter die beim Starten von COMSOL Multiphysics mit angegeben werden können. Für diese Masterarbeit war der Parameter batch zum Starten einer Simulation im Batch-Modus wichtig. Dieser ist in der COMSOL Multiphysics Version 4.0 fehlerhaft und funktioniert nicht mit der Class-Kit License, wie sie in der Fachhochschule Bielefeld verwendet wird. Die COMSOL Multiphysics Versionen 3.5a und 4.0a sind im Gegensatz dazu voll einsetzbar. 1 Usage : co m s o l [ o p t i o n s ] [ t a r g e t ] [ t a r g e t a r g u m e n t s ] 2 3 COMSOL t a r g e t s : 4 5 6 7 8 9 10 co m s o l co m s o l co m s o l co m s o l co m s o l co m s o l server batch compile s e r v e r matlab matlab Run COMSOL M u l t i p h y s i c s Run COMSOL M u l t i p h y s i c s Run a COMSOL j o b Compile a COMSOL Model Run MATLAB w i t h COMSOL Run MATLAB w i t h COMSOL D es k to p server java f i l e server paths 11 12 COMSOL o p t i o n s : 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 −h , −h e l p −v , − v e r s i o n −32 −64 −np <number o f p r o c e s s o r s > −mpmode < t h r o u g h p u t / t u r n a r o u n d / owner > −b l a s <{ a u t o } / mkl / acml / p a t h −b l a s p a t h <path > −i p v 6 −t m p d i r < p a t h > −nn <no . o f nodes > −n n h o s t <no . o f nodes > −m p i r o o t < p a t h > −m p i r s h < p a t h t o command> −mpi <{ a u t o } / mpich2 / i n t e l / wccs2003 / whpc2008 / u s er / path > −m p i p a t h < f i l e > −s c a l a p a c k <{ a u t o } / mkl / u s er / path > 35 36 −s c a l a p a c k p a t h < f i l e > Show t h i s h e l p m es s ag e Show v e r s i o n i n f o r m a t i o n Use a 32− b i t d a t a model i f a v a i l a b l e Use a 64− b i t d a t a model i f a v a i l a b l e S e t number o f p r o c e s s o r s S e t m u l t i p r o c e s s o r mode BLAS l i b r a r y t o u s e S e t p a t h t o BLAS l i b r a r y A c t i v a t e IPv6 s u p p o r t Path to temporary d i r e c t o r y Number o f n o d es Number o f n o d es on e a c h h o s t S e t p a t h t o MPI l i b r a r y S e t p a t h t o RSH o r SSH command MPI l i b r a r y t o u s e . p a t h r e q u i r e s e n v i r o n m e n t v a r i a b l e COMSOL_MPI_PATH t o be s e t S e t p a t h t o MPI l i b r a r y ScaLaPACK l i b r a r y t o u s e . p a t h r e q u i r e s e n v i r o n m e n t v a r i a b l e COMSOL_SCALAPACK_PATH t o be s e t S e t p a t h t o ScaLaPACK l i b r a r y 37 38 options : 81 COMSOL Multiphysics Startparameter 39 40 −open < f i l e n a m e > The i n p u t f i l e name 41 42 Example : 43 44 co m s o l −open < f i l e n a m e > Listing A.1: COMSOL Multiphysics allgemeine Startparameter - Hilfemenü Die Listing A.2 und A.3 besitzen Unterschiede in den Parameternamen. Es muss beachtet werden, dass das Angeben von Eingabe- und Ausgabedaten unterschiedlich ist. Bei der COMSOL Multiphysics Version 4.0a kann außerdem ein weiterer Parameter angegeben werden, der nicht im Listing A.3 angezeigt wird. Dieser Parameter heißt -paramfile und mit diesem kann eine Parameterdatei angegeben wird. Dies ist ähnlich wie bei der COMSOL Multiphysics Version 3.5a und wird wohl eine veraltetet Option sein. In zukünftige Arbeiten am ComsolGrid Framework sollte dieser Parameter durch -plist ersetzt werden. 1 B atch o p t i o n s : 2 3 4 5 6 7 8 9 −i n p u t −o u t p u t −p a r a m f i l e −l o g f i l e −pname −g l o b a l s −p s a v e <filename > <filename > <filename > <filename > <, separated l i s t > <, separated l i s t > <on / { o f f }> 10 11 12 −h e l p I n p u t f i l e name O u t p u t f i l e name P a r a m e t e r f i l e name Log f i l e name P a r a m e t e r names Global e x p r e s s i o n s I f o u t p u t m o d els s h o u l d be s a v e d ( i f o u t p u t f i l e name i s n o t g iv en , the input f i l e contains the r e s u l t ) Show t h i s h e l p m es s ag e 13 14 15 Example ( s o l v e t h e model i n t h e f i l e i n p u t . mph and s t o r e r e s u l t i n o u t p u t . mph ) : 16 17 co m s o l b a t c h −i n p u t i n p u t . mph −o u t p u t o u t p u t . mph Listing A.2: COMSOL Multiphysics Major Release 3.5a Startparameter - Batch Hilfemenü 1 B atch o p t i o n s : 2 3 4 5 6 7 8 9 10 11 12 −i n p u t f i l e <filename > −o u t p u t f i l e <filename > f i l e name i s u s e d ) −s t u d y < s t u d y name> −j o b < j o b name> −pname < p a r a m e t e r name> −p l i s t <parameter values > −b a t c h l o g < l o g f i l e n a m e > −c l i e n t −h o s t < hostname > −p o r t < p o r t number > The i n p u t f i l e name ( . mph o r . c l a s s ) The o u t p u t f i l e name ( i f n o t s p e c i f i e d t h e i n p u t The s t u d y t o compute The b a t c h j o b t o r u n Comma s e p a r a t e d l i s t o f p a r a m e t e r names Comma s e p a r a t e d l i s t o f p a r a m e t e r v a l u e s Fi l e to s t o r e log in Run a s c l i e n t C o n n ect t o h o s t < hostname > C o n n ect t o p o r t < p o r t number > 13 14 Example : 15 16 co m s o l b a t c h − i n p u t f i l e < p a t h > − o u t p u t f i l e < p a t h > −j o b b3 −pname v − p l i s t 10 Listing A.3: COMSOL Multiphysics Major Release 4.0a Startparameter - Batch Hilfemenü 82 Anhang B ComsolGrid Testprojekt Installationsskript Das Listing B.1 enthält ein SQL Skript, welches einen Standardbenutzer in der Datenbank einträgt. Dieses Skript wird vom Programm im Listing B.2 verwendet. Der Eintrag erstellt den Benutzer [email protected] mit dem Passwort boincadm. Diese Daten werden für das Anmelden beim Testprojekt verwendet und z.B. im BOINC Manager beim Hinzufügen des Projektes eingetragen. 1 2 3 4 5 6 7 CREATE TABLE I F NOT EXISTS ‘ co m s o lw r ap p er ‘ . ‘ c o m s o l g r i d _ r o l e s ‘ ( ‘ id ‘ INT NOT NULL AUTO_INCREMENT PRIMARY KEY , ‘ u s e r i d ‘ INT NOT NULL , ‘ ap p id ‘ INT NOT NULL , ‘ r o l e ‘ INT ( 5 ) NOT NULL , ‘ d e s c r i p t i o n ‘ VARCHAR( 254 ) NOT NULL ) ENGINE = MYISAM ; 8 9 10 11 12 INSERT INTO ‘ co m s o lw r ap p er ‘ . ‘ c o m s o l g r i d _ r o l e s ‘ ( u s e r i d , ap p id , r o l e , d e s c r i p t i o n ) VALUES ( 1, 1, 1, ’ U s er f o r e v e r y t h i n g :D ’ ); 13 14 15 16 17 18 19 20 21 22 23 24 25 LOCK TABLES ‘ u s e r ‘ WRITE ; INSERT INTO ‘ u s e r ‘ VALUES ( 1 , 1277132362 , ’ boincadm@fh− b i e l e f e l d . de ’ , ’ boincadm@fh− b i e l e f e l d . de ’ , ’ d133dda6e2737113d4f04b3f8e48c18e ’ , ’ None ’ , ’ ’ , 0 , 0 , 1 2 7 7 1 3 2 3 6 2 , NULL, ’ ’ , 0 , ’ ’ , NULL, 1 , 1 , 0 , 0 , 0 , 0 , 0 , NULL, 0 , ’ a1 b 9 9 8 9 e0 5 6 3 1 8 5 4 aa0 9 2 2 6 0 3 0 a5 3 1 9 3 ’ , ’4 c60f9cc1f51ee5a9d82853a430a1b88 ’ , 0 , 0) ; UNLOCK TABLES ; Listing B.1: ComsolGrid Standarddatenbankeintrag für ein Testprojekt 1 # ! / bin / bash 2 3 4 5 6 7 8 BOINCUSER= boincadm BOINCPW= boincadm BOINCNODE= h t t p : / / c o m s o l g r i d . fh −b i e l e f e l d . de BOINCDBUSER=YOURUSERNAME BOINCDBPW=YOURPASSWORD BOINCDBHOST= l o c a l h o s t 9 83 ComsolGrid Testprojekt Installationsskript 10 11 12 13 14 i f [ $ # −l e 0 ] t h en echo " Usage : m a k e _ p r o j e c t ’Name o f p r o j e c t ’ " exit 0 fi 15 16 PROJECTNAME=$1 17 18 19 20 21 22 23 24 ROOTPRE= / home / boincadm MAKEPROJECT=$ {ROOTPRE } / s e r v e r _ s t a b l e / t o o l s / m a k e _ p r o j e c t ROOTPROJECT=$ {ROOTPRE } / p r o j e c t s / $ {PROJECTNAME} SRCPROJECT=$ {ROOTPRE } / s e r v e r _ s t a b l e SRCAPPLICATION=$ {ROOTPRE } / s o u r c e s / c o m s o l _ w r a p p e r / a p p s / c o m s o l s t a r t e r SRCTEMPLATES=$ {ROOTPRE} / s o u r c e s / c o m s o l _ w r a p p e r / t e m p l a t e s SRCCONFIGS=$ {ROOTPRE } / s o u r c e s / c o m s o l _ w r a p p e r / c o n f i g u r a t i o n s 25 26 27 28 29 30 31 32 33 34 35 36 $ {MAKEPROJECT} −−u s er _ n am e " $ {BOINCUSER} " \ −− s r c d i r " $ {SRCPROJECT} " \ −−d e l e t e _ p r e v _ i n s t \ −−d r o p _ d b _ f i r s t \ −−p r o j e c t _ r o o t " $ {ROOTPROJECT} " \ −−u r l _ b a s e " $ {BOINCNODE} " \ −−db_name "$PROJECTNAME" \ −−d b _ u s e r "$BOINCDBUSER " \ −−db_passwd "$BOINCDBPW" \ −−d b _ h o s t "$BOINCDBHOST" \ $ {PROJECTNAME} 37 38 cd $ROOTPROJECT 39 40 41 42 43 44 45 46 # permissions chmod 02770 u p l o a d chmod 02770 h t m l / c a c h e chmod 02770 h t m l / i n c chmod 02770 h t m l / l a n g u a g e s chmod 02770 h t m l / l a n g u a g e s / c o m p i l e d chmod 02770 h t m l / u s e r _ p r o f i l e 47 48 49 # httpasswd h t p a s s w d −bc h t m l / o p s / . h t p a s s w d $BOINCUSER $BOINCPW 50 51 52 53 # a k t i v a t e auth_ops ( ) s ed − i " . bak " ’68 d ’ h t m l / p r o j e c t / p r o j e c t . i n c s ed − i " . bak " ’70 d ’ h t m l / p r o j e c t / p r o j e c t . i n c 54 55 56 # remove l i n e s t o a c t i v a t e w o r k u n i t c a n c e l a t i o n s s ed − i " . bak " ’ 5 8 , 6 6 d ’ h t m l / o p s / c a n c e l _ w u _ a c t i o n . php 57 58 59 60 # remove u n n e c e s s a r y p l a t f o r m s # s e d − i " . bak " ’ 2 , 9 d ’ p r o j e c t . xml # s e d − i " . bak " ’ 1 0 , 3 7 d ’ p r o j e c t . xml 61 62 63 64 65 66 # replace uppercase # s e d − i " . bak " ’ s / u p p e r c a s e / c o m s o l s t a r t e r / ’ p r o j e c t . xml # s e d − i " . bak " ’ s / upperCASE / ComsolGrid v0 . 1 ( p r o t o t y p e ) / ’ p r o j e c t . xml cp / home / boincadm / s o u r c e s / c o m s o l _ w r a p p e r / c o n f i g u r a t i o n s / p r o j e c t . xml / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / p r o j e c t . xml . / b i n / xadd 67 68 69 70 84 # b e a u t i f i e r f o r t h e c o n f i g . xml o f a BOINC p r o j e c t mv c o n f i g . xml c o n f i g . xml . o r i g / home / boincadm / s o u r c e s / u t i l s / b e a u t i f i e r / x m l i n l i n e c o n f i g . xml . o r i g c o n f i g . xml ComsolGrid Testprojekt Installationsskript 71 B.1 ComsolGrid Templates chmod 644 c o n f i g . xml 72 73 74 75 76 # r e p l a c e daemon c o n f i g u r a t i o n s s ed −i " . bak " ’ 7 5 , 8 6 d ’ c o n f i g . xml c a t $ {SRCCONFIGS } / daemons >> c o n f i g . xml echo " </ b o in c > " >> c o n f i g . xml 77 78 79 80 81 82 83 84 85 # i n s t a l l Validator & Assimilator cp / home / boincadm / s o u r c e s / c o m s o l _ v a l i d a t o r / c o m s o l _ b i t w i s e _ v a l i d a t o r b i n / comsol_bitwise_validator cp / home / boincadm / s o u r c e s / c o m s o l _ v a l i d a t o r / c o m s o l _ t r i v i a l _ v a l i d a t o r b i n / comsol_trivial_validator m k d ir c o m s o l g r i d _ r e s u l t s / chmod 775 c o m s o l g r i d _ r e s u l t s / m k d ir c o m s o l g r i d _ r e s u l t s / e r r o r s / chmod 775 c o m s o l g r i d _ r e s u l t s / e r r o r s / cp / home / boincadm / s o u r c e s / c o m s o l _ a s s i m i l a t o r / c o m s o l _ c o p y d i r _ a s s i m i l a t e b i n / comsol_copydir_assimilate 86 87 88 89 # Permissions to r e t r i e v e infor mation about the pr oces s es . m k d ir l o g _ v i s u a l g r i d −1 chmod 775 l o g _ v i s u a l g r i d −1 90 91 92 t o u c h r u n _ s t a t e _ v i s u a l g r i d −1. xml chmod 664 r u n _ s t a t e _ v i s u a l g r i d −1. xml 93 94 95 96 97 # i n s t a ll test application m k d ir −p a p p s / c o m s o l s t a r t e r cp −r $ {SRCAPPLICATION} / ∗ a p p s / c o m s o l s t a r t e r / . / b i n / u p d a t e _ v e r s i o n s −v −s −f 98 99 100 101 # create symbolic l i n k s to the template f i l e s l n −s f $ {SRCTEMPLATES} / w r a p p e r _ w u _ i n p u t . xml t e m p l a t e s / w r a p p e r _ w u _ i n p u t . xml l n −s f $ {SRCTEMPLATES} / w r a p p e r _ w u _ r e s u l t . xml t e m p l a t e s / w r a p p e r _ w u _ r e s u l t . xml 102 103 # 104 105 cd − 106 107 108 # i n s e r t d e f a u l t m ys q l u s e r mysql −u $BOINCDBUSER −p $PROJECTNAME < m a k e _ p r o j e c t _ m y s q l . d a t a Listing B.2: ComsolGrid Installationsskript für ein Testprojekt B.1 ComsolGrid Templates Bei der Erstellung werden Templatedateien für die Erstellung von Arbeitspaketen benötigt. In der Testumgebung wurde die Templateeingabedatei mit den Zeilen aus Listing B.3 und die Templateausgabedatei mit den Zeilen aus B.4 gefüllt. 1 2 3 4 5 6 7 8 9 10 <file_info> <number >0< / number > </ file_info> <file_info> <number >1< / number > </ file_info> <workunit> <file_ref> < f i l e _ n u m b e r >0< / f i l e _ n u m b e r > <open_name > co m s o l . mph< / open_name > 85 B.2 ComsolGrid Projektserver Konfiguration 11 12 13 14 15 16 17 18 19 20 ComsolGrid Testprojekt Installationsskript <copy_file /> </ file_ref> <file_ref> < f i l e _ n u m b e r >1< / f i l e _ n u m b e r > <open_name > co m s o l . t x t < / open_name > <copy_file /> </ file_ref> < r s c _ f p o p s _ b o u n d > 1000000000000 < / r s c _ f p o p s _ b o u n d > < r s c _ f p o p s _ e s t >1000000000000 < / r s c _ f p o p s _ e s t > </ workunit> Listing B.3: ComsolGrid Template Input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <file_info> <name><OUTFILE_0 / >< / name> <generated_locally /> <upload_when_present / > < m ax _ n b y tes >500000000 < / m ax _ n b y tes > < u r l ><UPLOAD_URL/ >< / u r l > </ file_info > <result> <file_ref> < f i l e _ n a m e ><OUTFILE_0 / >< / f i l e _ n a m e > <open_name > c o m s o l _ o u t p u t . mph< / open_name > <copy_file /> </ file_ref> </ resu lt > Listing B.4: ComsolGrid Template Result B.2 ComsolGrid Projektserver Konfiguration Das Listing B.5 enthält die Projektserver Konfiguration der Testumgebung aus Kapitel 5. Erwähnenswert sind die folgenden Parameter: <max_wus_in_progress>N</max_wus_in_progress> Es werden nur N Arbeitspakete an den Anwender gesendet, keine Weitere. <max_ncpus>N</max_ncpus> Es werden nur N Prozessoren für die Berechnung genommen, dies kann durch die Einstellungen des BOINC Manager überschrieben werden. Für die anderen Parameter wird auf das BOINC Wiki verwiesen [33]. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 86 <? xml v e r s i o n = " 1 . 0 " ?> <boinc> <config > < u p l o a d _ d i r > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / u p l o a d < / u p l o a d _ d i r > <send_result_abort> 1 </ send_result_abort> <long_name > c o m s o l w r a p p e r < / long_name > < d o w n l o a d _ u r l > h t t p : / / 1 9 2 . 1 6 8 . 1 . 1 / c o m s o l w r a p p e r / download < / d o w n l o a d _ u r l > <sched_debug_level > 3 < / sched_debug_level > <disable_account_creation> 0 </ disable_account_creation> < u l d l _ d i r _ f a n o u t > 1024 < / u l d l _ d i r _ f a n o u t > < c g i_ ur l > h t t p : / / 1 9 2 . 1 6 8 . 1 . 1 / comsolwrapper_cgi / < / c gi _ ur l > <db_user> root < / db_user> < l o g _ d i r > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / l o g _ v i s u a l g r i d −1 < / l o g _ d i r > < a p p _ d i r > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / a p p s < / a p p _ d i r > < d o w n l o a d _ d i r > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / download < / d o w n l o a d _ d i r > ComsolGrid Testprojekt Installationsskript 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 B.2 ComsolGrid Projektserver Konfiguration <fuh_debug_level > 3 < / fuh_debug_level > < m as ter _ u r l > h t t p : / / 1 9 2 . 1 6 8 . 1 . 1 / comsolwrapper / < / m as ter _ u r l > < h o s t > v i s u a l g r i d −1 < / h o s t > <db_name > c o m s o l w r a p p e r < / db_name > <shmem_key> 0 x111144e9 < / shmem_key> <show_results > 1 </ show_results > < k e y _ d i r > / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / k e y s / < / k e y _ d i r > <upload_url > h t t p : / / 1 9 2 . 1 6 8 . 1 . 1 / comsolwrapper_cgi / fi le _u pl oa d_h and le r < / upload_url > < db_passwd > xxx < / db_passwd > <min_sendwork_interval > 6 < / min_sendwork_interval > <db_host> l o c a l h o s t < / db_host> < d a i l y _ r e s u l t _ q u o t a > 500 < / d a i l y _ r e s u l t _ q u o t a > <one_result_per_user_per_wu > 0 </ one_result_per_user_per_wu > < max_wus_to_s end > 2 < / max_wus_to_s end > <max_wus_in_progress > 1 < / max_wus_in_progress > <max_wus_in_progress_gpu> 0 < / max_wus_in_progress_gpu> <max_ncpus> 1 < / max_ncpus> </ config > <tasks> <task > <cmd> db_dump −d 2 −dump_spec . . / db_dump_spec . xml < / cmd> < p e r i o d > 5 min < / p e r i o d > <disabled> 1 </ disabled> < o u t p u t > db_dump . o u t < / o u t p u t > </ task > <task > <cmd> r u n _ i n _ o p s . / u p d a t e _ u o t d . php < / cmd> < p e r i o d > 5 min < / p e r i o d > <disabled> 0 </ disabled> <output > update_uotd . out < / output > </ task > <task > <cmd> r u n _ i n _ o p s . / u p d a t e _ f o r u m _ a c t i v i t i e s . php < / cmd> < p e r i o d > 5 min < / p e r i o d > <disabled> 0 </ disabled> <output > u pd at e _f or um_ ac t i vi t ie s . out < / output > </ task > <task > <cmd> u p d a t e _ s t a t s −u p d a t e _ u s e r s −u p d a t e _ t e a m s −u p d a t e _ h o s t s < / cmd> < p e r i o d > 5 min < / p e r i o d > <disabled> 0 </ disabled> <output > u p d a t e _s t a t s . out < / output > </ task > <task > <cmd> r u n _ i n _ o p s . / u p d a t e _ p r o f i l e _ p a g e s . php < / cmd> < p e r i o d > 5 min < / p e r i o d > <disabled> 0 </ disabled> <output > update_profile_pages . out < / output > </ task > <task > <cmd> r u n _ i n _ o p s . / t e a m _ i m p o r t . php < / cmd> < p er io d > 1 days < / p er io d > <disabled> 1 </ disabled> < o u tp u t > team_import . out < / o u tp u t > </ task > <task > <cmd> r u n _ i n _ o p s . / n o t i f y . php < / cmd> < p er io d > 1 days < / p er io d > <disabled> 1 </ disabled> <output > n o t i fy . out < / output > </ task > 87 B.2 ComsolGrid Projektserver Konfiguration 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 ComsolGrid Testprojekt Installationsskript </ tasks> <daemons > <daemon > <cmd> f e e d e r −d 2 < / cmd> <output > feeder . log < / output > < p i d _ f i l e > feeder . pid < / p i d _ f i l e > < / daemon > <daemon > <cmd> t r a n s i t i o n e r −d 2 < / cmd> <output > t r a n s i t i o n e r . log < / output > < p i d _ f i l e > t r a n s i t i o n e r . pid < / p i d _ f i l e > < / daemon > <daemon > <cmd> f i l e _ d e l e t e r −d 2 < / cmd> <output > f i l e _ d e l e t e r . log < / output > < p i d _ f i l e > f i l e _ d e l e t e r . pid < / p i d _ f i l e > < / daemon > <daemon > <cmd> c o m s o l _ b i t w i s e _ v a l i d a t o r −mod 2 1 −d 2 −app c o m s o l s t a r t e r < / cmd> <output > com s ol_bitwis e_validator . log < / output > < p i d _ f i l e > com s ol_bitwis e_validator . pid < / p i d _ f i l e > < / daemon > <daemon > <cmd> c o m s o l _ c o p y d i r _ a s s i m i l a t e −d 2 −app c o m s o l s t a r t e r < / cmd> <output > comsol_copydir_ass imilate . log < / output > < p i d _ f i l e > comsol_copydir_assimilate . pid < / p i d _ f i l e > < / daemon > <daemon > <cmd> d b _ p u r g e −d 2 −m in _ ag e_ d ay s 7 −g z i p < / cmd> < output > db_purge . log < / output > < p i d _ f i l e > db_purge . pid < / p i d _ f i l e > < / daemon > < / daemons > </ boinc> Listing B.5: ComsolGrid Projektserver Konfiguration Das Listing B.6 enthält die Definitionen der Plattformen die in der Testinstallation zur Verfügung stehen. Es wird die COMSOL Multiphysics Major Release Version 4.0a mit 32 − Bit und 64 − Bit Version unterstützt. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <boinc> <platform > <name> i6 8 6 −pc−l i n u x −g n u _ co m s o l4 0 a < / name> < u s e r _ f r i e n d l y _ n a m e > L in u x r u n n i n g on an I n t e l x86−c o m p a t i b l e CPU w i t h COMSOL v40a < / u s e r _ f r i e n d l y _ n a m e > </ platform > <platform > <name>x86_64−pc−l i n u x −g n u _ co m s o l4 0 a < / name> < u s e r _ f r i e n d l y _ n a m e > L in u x r u n n i n g on an AMD x86_64 o r I n t e l EM64T CPU w i t h COMSOL v40a < / u s e r _ f r i e n d l y _ n a m e > </ platform > <platform > <name>anonymous < / name> < u s e r _ f r i e n d l y _ n a m e >anonymous < / u s e r _ f r i e n d l y _ n a m e > </ platform > <app > <name> c o m s o l s t a r t e r < / name> < u s e r _ f r i e n d l y _ n a m e > ComsolGrid v0 . 1 ( p r o t o t y p e ) < / u s e r _ f r i e n d l y _ n a m e > < / app > </ boinc> Listing B.6: Liste der Plattformen die der Projektserver zur Verfügung stellt 88 ComsolGrid Testprojekt Installationsskript B.3 1 2 3 4 5 6 B.3 Apache Webserver Apache Webserver #### # S e t t i n g s f o r BOINC p r o j e c t c o m s o l w r a p p e r #### A l i a s / c o m s o l w r a p p e r / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / h t m l / u s e r A l i a s / c o m s o l w r a p p e r _ o p s / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / h t m l / o p s S c r i p t A l i a s / c o m s o l w r a p p e r _ c g i / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / c g i −b i n 7 8 9 10 11 12 13 < D i r e c t o r y " / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / h t m l " > O p t io n s I n d e x e s F o l l o w S y m l i n k s M u ltiV iew s A llo w O v errid e A u th C o n f ig Order allo w , deny Allow from a l l </ D i r e c t o r y > 14 15 16 17 18 19 20 < D i r e c t o r y " / home / boincadm / p r o j e c t s / c o m s o l w r a p p e r / c g i −b i n " > O p t io n s ExecCGI A llo w O v errid e A u th C o n f ig Order allo w , deny Allow from a l l </ D i r e c t o r y > Listing B.7: Apache Webserver Konfiguration für die BOINC Projektnutzung 1 2 3 4 #### # C o m s o lG r id F cg i I n t e r f a c e #### S c r i p t A l i a s / c o m s o l f c g i / home / boincadm / s o u r c e s / c o m s o l _ f c g i / co m s o l . f c g i 5 6 7 8 9 10 11 < D i r e c t o r y " / home / boincadm / s o u r c e s / c o m s o l _ f c g i / co m s o l . f c g i " > O p t io n s +ExecCGI A l l o w O v e r r i d e A u th C o n f ig O r d er allo w , deny Allow from a l l </ D i r e c t o r y > 12 13 F a s t C g i S e r v e r / home / boincadm / s o u r c e s / c o m s o l _ f c g i / co m s o l . f c g i − p r o c e s s e s 1 Listing B.8: Apache Webserver Konfiguration für die FastCGI Nutzung B.4 1 2 3 4 5 6 7 Testskript für die ComsolGridFCGI Schnittstelle # ! / u s r / b i n / php <? php /∗ ∗ C h r i s t i a n B en ja m in R i e s , J u l y 2010 ∗ C h r i s t i a n _ B e n j a m i n . Ries@fh− b i e l e f e l d . de ∗ U n i v e r s i t y o f A p p l i e d S c i e n c e s B i e l e f e l d , Germany ∗/ 8 9 10 11 12 13 14 15 16 /∗ ∗ ∗ Configuration ∗/ $ a d d r p o r t = 4 4 3 ; / / 8 0 , 443 $ a d d r h o s t = " 1 2 7 . 0 . 0 . 1 " ; / ∗ !< s s l : / / o r t l s : / / ∗ / $ a d d r s r c = a rra y ( " f a l l i n g _ s a n d . mph " , ); 17 18 $ co m s o l_ u s er n a m e = " boincadm@fh−b i e l e f e l d . de " ; 89 B.4 Testskript für die ComsolGridFCGI Schnittstelle 19 20 ComsolGrid Testprojekt Installationsskript $ c o m s o l _ e m a i l = " boincadm@fh−b i e l e f e l d . de " ; $ c o m s o l _ p a s s w o r d = " boincadm " ; 21 22 23 24 25 26 27 28 29 30 $modes = a rra y ( " upload " => " u p l o a d s " smajor " => " r e t u r n s " sminor " => " r e t u r n s " s r e l e a s e " => " r e t u r n s " c r e l e a s e " => " r e t u r n s " status " => " r e t u r n s " apps " => " r e t u r n s ); a f i l e ( $addrsrc ) " , t h e s e r v e r m ajo r v e r s i o n " , t h e s e r v e r m in o r v e r s i o n " , the server re lea se version " , t h e s u p p o r t e d co m s o l r e l e a s e v e r s i o n " , the server s t a t us " , a l i s t o f a p p l i c a t i o n s which a r e i n s t a l l e d on t h e s e r v e r " 31 32 33 34 35 36 37 38 39 40 / / / Print help i f ( co u n t ( $ a r g v ) <= 1 ) { echo " Usage : h t m l p u t . php Mode \ n \ n " ; echo " Mode : \ n " ; f o r e a c h ( $modes a s $key => $ d e s c ) { printf ( " %−15s %s \ n " , $key , $ d e s c ) ; } exit (0) ; } 41 42 43 44 45 46 47 48 49 / / / Check s e l e c t e d mode $mode = $ a r g v [ 1 ] ; $modeok = f a l s e ; f o r e a c h ( $modes a s $key => $ d e s c ) { i f ( $key == $mode ) { $modeok = t r u e ; } } 50 51 52 53 54 55 56 57 58 i f ( ! $modeok ) { p r i n t f ( " Only one o f t h e f o l l o w i n g modes a r e v a l i d ( " ) ; f o r e a c h ( $modes a s $key => $ v a l u e ) { p r i n t f ( "%s " , $key ) ; } printf ( " ) \ n" ) ; e x i t ( −1) ; } 59 60 61 62 63 64 65 66 67 68 69 70 /∗ ∗ ∗ @param $mode ∗ @return ∗/ f u n c t i o n createXML ( $mode , $ a d d r h o s t ) { $ h t m l H e a d e r = "POST / c o m s o l f c g i HTTP / 1 . 1 \ r \ n " ; $htmlHeader . = " Host : $ a d d r h o s t \ r \ n " ; $ h t m l H e a d e r . = " User−Agent : COMSOL T e s t s u i t e \ r \ n " ; $ h t m l H e a d e r . = " C o n t e n t −L en g th : %d \ r \ n " ; $ h t m l H e a d e r . = " C o n t e n t −Type : a p p l i c a t i o n / x−www−form−u r l e n c o d e d \ r \ n " ; $ h t m l H e a d e r . = " \ r \ n%s \ r \ n \ r \ n " ; 71 72 73 74 g l o b a l $ co m s o l_ u s er n a m e ; g lo b al $comsol_email ; g lo b al $comsol_password ; 75 76 77 78 79 80 90 $authXML = "<auth >\ r \ n " . " < username > " . $ co m s o l_ u s er n a m e . " </ username > \ r \ n " . " < em ail > " . $ c o m s o l _ e m a i l . " </ em ail > \ r \ n " . " < p as s w o r d > " . $ c o m s o l _ p a s s w o r d . " </ p as s w o r d > \ r \ n " ComsolGrid Testprojekt Installationsskript . " </ a u t h > \ r \ n " 81 82 B.4 Testskript für die ComsolGridFCGI Schnittstelle ; 83 84 85 86 87 88 89 90 91 92 s w i t c h ( $mode ) { case " upload " : { global $addrsrc ; $xmlfiles = "" ; $xmlfilecount = 0; foreach ( $ ad d r s r c as $imgsrc ) { $ f h = f o p en ( $ im g s r c , ’ r ’ ) ; $ d a t a = f r e a d ( $fh , f i l e s i z e ( $ i m g s r c ) ) ; f c l o s e ( $fh ) ; 93 $xmlfiles $xmlfiles $xmlfiles $xmlfiles $xmlfiles $xmlfiles 94 95 96 97 98 99 .= "< f i l e >\ r \ n" ; .= " < f i l e n a m e >%s < / f i l e n a m e > \ r \ n " ; .= " < d e s c r i p t i o n >%s < / d e s c r i p t i o n > \ r \ n " ; .= " < max_nbytes >%d < / max_nbytes > \ r \ n " ; .= " < d a t a > \ r \ n%s \ r \ n < / d a t a > \ r \ n " ; . = " </ f i l e > \ r \ n " ; 100 $xmlfiles = sprintf ( $xmlfiles , $ im g s r c , " Description $xmlfilecount " , f i l e s i z e ( $imgsrc ) , b a s e6 4 _ en co d e ( $ d a t a ) ); $ x m l f i l e c o u n t ++; 101 102 103 104 105 106 107 108 } 109 110 111 112 $ f h = f o p en ( " w r a p p e r _ w u _ i n p u t . xml " , ’ r ’ ) ; $ d a t a T e m p l a t e I n p u t = f r e a d ( $fh , f i l e s i z e ( " w r a p p e r _ w u _ i n p u t . xml " ) ) ; f c l o s e ( $fh ) ; 113 114 115 116 $ f h = f o p en ( " w r a p p e r _ w u _ r e s u l t . xml " , ’ r ’ ) ; $ d a t a T e m p l a t e R e s u l t = f r e a d ( $fh , f i l e s i z e ( " w r a p p e r _ w u _ r e s u l t . xml " ) ) ; f c l o s e ( $fh ) ; 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 $ co m s o lx m lf m t = " < co m s o l_ p u t > \ r \ n " $authXML . " <name>%s < / name > \ r \ n " . " < ap p id >1 </ ap p id > \ r \ n " . " < co u n t > " . co u n t ( $ a d d r s r c ) . " </ co u n t > \ r \ n " . "%s " . "<ranges >\ r \ n " . " < r an g e > \ r \ n " . "<parameter >objWidth : 0 . 0 0 1 : 0 . 0 1 5 : 0 . 0 0 0 5 : 0 . 0 0 6 < / parameter >\ r \ n " . "<parameter >objHeight : 0 . 0 0 1 : 0 . 0 2 5 : 0 . 0 0 1 : 0 . 0 1 4 < / parameter >\ r \ n " . " </ r an g e > \ r \ n " . " </ r a n g e s > \ r \ n " . " < t e m p l a t e _ i n p u t > " . b a s e6 4 _ en co d e ( $ d a t a T e m p l a t e I n p u t ) . " </ tem plate_input >\ r \ n" . " < t e m p l a t e _ r e s u l t > " . b a s e6 4 _ en co d e ( $ d a t a T e m p l a t e R e s u l t ) . " </ t e m p l a t e _ r e s u l t >\ r \ n" . " <comsol > \ r \ n " . "<ckl / >\ r \ n" . " < l o g f i l e > co m s o l . lo g < / l o g f i l e > \ r \ n " . " < s t d o u t > c o m s o l _ s t d o u t . lo g < / s t d o u t > \ r \ n " . " < s t d e r r > c o m s o l _ s t d e r r . lo g < / s t d e r r > \ r \ n " . " </ comsol > \ r \ n " . " </ co m s o l_ p u t > " ; 140 91 B.5 Struktur des Projektbaumes/des mitgelieferten Datenträgers ComsolGrid Testprojekt Installationsskript $comsolxml = s p r i n t f ( $comsolxmlfmt , " c o m s o l s t a r t e r : : ComsolGrid v0 . 1 ( p r o t o t y p e ) " , $ x m l f i l e s ) ; r e t u r n s p r i n t f ( $ h tm lH ead er , s t r l e n ( $comsolxml ) , $comsolxml ) ; 141 142 143 } case " smajor " : r e t u r n s p r i n t f ( $ h tm lH ead er , 1 7 , " < s e r v e r _ m a j o r / > \ r \ n " ) ; case " sminor " : r e t u r n s p r i n t f ( $ h tm lH ead er , 1 7 , " < s e r v e r _ m i n o r / > \ r \ n " ) ; case " s r e l e a s e " : r e t u r n s p r i n t f ( $ h tm lH ead er , 1 9 , " < s e r v e r _ r e l e a s e / > \ r \ n " ) ; case " c r e l e a s e " : r e t u r n s p r i n t f ( $ h tm lH ead er , 1 9 , " < c o m s o l _ r e l e a s e / > \ r \ n " ) ; case " s t a t u s " : { $statusxml = "< s t a t u s >\ r \ n" . $authXML . " </ s t a t u s > \ r \ n " ; r e t u r n s p r i n t f ( $ h tm lH ead er , s t r l e n ( $ s t a t u s x m l ) , $ s t a t u s x m l ) ; } case " apps " : { $ ap p s x m l = " <apps > \ r \ n " . $authXML . " </ a p p s \ r \ n " ; r e t u r n s p r i n t f ( $ h tm lH ead er , s t r l e n ( $ ap p s x m l ) , $ ap p s x m l ) ; } 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 } 165 166 } 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 / / / Run . . . $a = ( $ a d d r p o r t == " 443 " ? " s s l : / / " : " " ) . $ a d d r h o s t ; echo " H o s t : " . $a . " \ n " ; $ f p = f s o ck o p en ( $a , $ a d d r p o r t , $ e r r n o , $ e r r s t r , 3 0 ) ; i f ( ! $fp ) { echo " $ e r r s t r ( $ e r r n o ) < b r / > \ n " ; } else { $ s t r = createXML ( $mode , $ a d d r h o s t ) ; if (1) { f w r i t e ( $fp , $ s t r , s t r l e n ( $ s t r ) ) ; while ( ! f eof ( $fp ) ) { echo f g e t s ( $ f p ) ; } } else { echo ( $ s t r . " \ n " ) ; } f c l o s e ( $fp ) ; } ?> Listing B.9: Testskript für die ComsolGridFCGI Schnittstelle B.5 Struktur des Projektbaumes/des mitgelieferten Datenträgers Der Datenträger beinhaltet vier Ordner und zwei weitere Dateien: 1 2 3 4 5 6 7 8 9 92 + Datentraeger |−− P r e s e n t a t i o n |−− S o f t w a r e |−− S o u r c e s | |−− c o m s o l _ a p i | |−− c o m s o l _ a s s i m i l a t o r | |−− c o m s o l _ f c g i | |−− c o m s o l _ v a l i d a t o r | |−− c o m s o l _ w r a p p e r ComsolGrid Testprojekt Installationsskript B.5 Struktur des Projektbaumes/des mitgelieferten Datenträgers 10 11 12 13 14 15 16 | | | |−− | | ‘−− |−− q t |−− s e r v e r _ s t a b l e ‘−− u t i l s Thesis |−− im ag es ‘−− t e x UML Listing B.10: Struktur des mitgelieferten Datenträgers Im Ordner Presentation/ befinden sich Folien für Vorträge und dem Kolloquium für diese Masterarbeit. Der Dateiordner Software/ beinhaltet alle BOINC Manager Versionen, die am 31. August 2010 zur Verfügung standen. Im Ordner Sources/ sind alle entwickelten Komponenten enthalten. Die LaTex Dateien und der Bericht befindet sich im Ordner Thesis/. Im UML/ Ordner ist die Datei mit den UML Modellen für die Visual Paradigm Applikation. 93