OPTIMIERUNG DER NUTZDATENRATE IN EINEM VERTEILTEN ZEITGESTEUERTEN
MULTICLUSTER-ECHTZEITSYSTEM
Die Erfindung bezieht sich auf ein Verfahren zum Aufbau einer globalen Zeit zwischen Clustern eines verteilten Echtzeit-Computersystems, wobei eine Vielzahl von Knoten in ein oder mehrere Cluster strukturiert sind, jedes Cluster über ein eigenes Kommunikationssystem verfügt und in jedem System mindestens ein Knoten, der Time-Start-up Knoten, direkt oder transitiv Zugriff auf eine globale externe Zeit hat,
Die technologischen Fortschritte auf dem Gebiet der Halbleitertechnik ermöglichen es, ein Transducerelement zur Messung einer physikalischen Größe (z. B. Temperatur), einen Microcontroller und einen Kommunikationscontroller auf einem einzigen Chip zu integrieren und damit einen kompakten Transducerknoten zu realisieren. In einem verteilten Echtzeitsystem müssen diese Transducerknoten über ein Echtzeitkommunikationssystem, z. B. einem Feldbus, mit anderen Transducerknoten und Verarbeitungsknoten verbunden werden, um Beobachtungen auszutauschen. Eine Beobachtung ist ein atomares Tripel, bestehend aus dem Zeitpunkt der Beobachtung, dem Namen der beobachteten Zustandsgröße (RT-entity), und den Wert der Beobachtung (Kopetz, H. 1997, Real-Time Systems, Design Principles for Distributed Embedded Applications; ISBN: 0-7923-9894-7 Boston, Kluwer Academic Publishers, im folgenden zitiert mit "Kopetz", S. 99). Um einen Informationsaustausch über eine Schnittstelle zwischen Subsystemen realisieren zu können müssen in allen Subsystemen eine global synchronisierte Zeit und ein gemeinsamer Namensraum für RT-entities aufgebaut werden und die gleichen Codierungsvorschriften bzw. Decodierungsvorschriften für die zu übertragenden Werte angewendet werden.
Bestehende Systeme übertragen die Zeit entweder explizit mit den Daten, was zusätzliche Bandbreite beansprucht, oder übernehmen die Zeit implizit aus dem Empfangszeitpunkt der Daten, wobei jedoch der Jitter des Kommunikationssystems den Zeitpunkt der Datenerfassung ungenau werden lässt. Bei einigen technischen Anwendungen ist es erforderlich, räumlich verteilte Daten zu exakt gleichen Zeitpunkten zu messen und die Messergebnisse möglichst rasch an einen Rechnerknoten zur Auswertung zu übertragen. Mit dem bisher bekannten Verfahren lässt sich dies jedoch nur mit sehr hohem technischem Aufwand erreichen.
Eine Aufgabe der Erfindung besteht darin, in einem verteilten Multicluster-Echtzeitsystem eine globale Zeit, die mehrere Cluster umfassen soll, aufzubauen und unter Nutzung dieser globalen Zeit die oben beschriebenen Unzulänglichkeiten nach dem Stand der Technik zu reduzieren.
Die Aufgabe lässt sich mit einem Verfahren der eingangs genannten Art erreichen, bei welchem erfindungsgemäß in den Zeit-Slave-Clustern je ein oder mehrere Time-Start-up-Knoten vorhanden sind, wobei jeder Time-Start-up-Knoten ein Gateway-Knoten mit einem Kommunikationsinterface zu einem Zeitmaster und einem Slavekommunikationskontroller zu Zeit-Slave- Clustern ist, jeder Time-Start-up-Knoten direkt oder transitiv Zugriff auf die globale Zeit hat, und der Kaltstart eines Zeit-Slave-Clusters durch einen bereits global synchronisierten Time- Start-up-Knoten dadurch vollzogen wird, dass vor dem Einschalten des SlavekommunikationskontroUers zum noch nicht synchronisierten Zeit-Slave-Cluster der zukünftige globale Zeitpunkt des Einschaltens in das Time-Startup-Register des SlavekommunikationskontroUers eingetragen wird und dieser Slavekommunikationskontroller unmittelbar nach dem zum festgelegten Zeitpunkt erfolgten Einschalten diese globale Zeit in dem Zeitregister weiterzählt und die Start-Up-Prozedur des Zeit-Slave-Clusters mit dieser globalen Zeit realisiert.
Weitere zweckmäßige Ausführungen und Varianten der Erfindung sind in den abhängigen Unteransprüchen gekennzeichnet.
Das vorab beschriebene Ziel und andere neue Eigenschaften der vorliegenden Erfindung werden anhand eines konkreten Beispiels in der Zeichnung erläutert. In dieser zeigen:
Fig. 1 die Struktur eines verteilten Computersystems, bestehend aus einem Verarbeitungs- cluster und zwei Transducercluster,
Fig. 2 zwei Transducerknoten mit jeweils drei Interfacefiles,
Fig. 3 die Struktur eines Interfaceflies,
Fig. 4 den Aufbau einer Multipartnerrunde und
Fig. 5 die Struktur eines Time-startup-knotenrechners.
Im folgenden Abschnitt wird eine mögliche Realisierung des neuen Verfahrens gezeigt. Die Objekte in den Abbildungen sind so nummeriert, dass die erste der dreistelligen Objektziffern immer die Bildnummer angibt. Eine in Klammer gesetzte Nummer weist auf das gleiche Objekt in einer anderen Abbildung hin.
Fig. 1 zeigt die Struktur eines verteilten Echtzeitsystems, bestehend aus zwei Knotenarten, den Verarbeitungsknoten 111 bis 115, dargestellt durch Rechtecke, und den Transducerknoten 121, dargestellt durch Kreise. Die Verarbeitungsknoten sind leistungsfähige Knotenrechner, deren Aufbau am Beispiel des Knotenrechners 114 in Fig. 5 dargestellt ist. Die Transducerknoten 121 sind low-cost Einchip-Microcomputer von vergleichsweise geringer Leistungsfähigkeit die über einen Feldbus 101 bzw. 102 verbunden sind. Um Kosten für einen externen Oszillator zu sparen, kann der Oszillator eines Transducerknoten direkt im Silizium realisiert sein und muss über keinen stabilen Gang verfügen. Ein solcher on-chip Oszillator kann sehr ungenau sein und muss daher von einem Zeitmaster periodisch resynchronisiert werden. Ohne Synchronisation durch einen Master könnte ein solcher Transducerknoten nicht einmal ein einfaches UART Protokoll ausführen.
Die Verarbeitungsknoten 111, 112, 113, 114, und 115 sind über einen leistungsfähigen logischen Echtzeitbus 110, der zum Beispiel mittels des TTP/C Protokolls (siehe Kopetz, S. 175) gesteuert werden kann, verbunden und bilden somit ein Cluster des Multiclustersystems, das eine globale Zeitbasis verteilt und fehlertolerant aufbauen kann. Der logische Echtzeitbus kann physikalisch als Bus, Ring oder als Stern ausgebildet sein. Die Verarbeitungsknoten 111, 114, und 115 sind Time-startup-knoten. Der Time-startup-knoten 111 kann gegebenenfalls mit einem externen Zeitmaster 116 verbunden sein. Der Time-startup-knoten 114 ist der Master des einfachen Transducerbus 101, der z. B. mittels des zeitgesteuerten TTP/A Protokolls (Kopetz, S. 185) gesteuert wird. Der Time-startup-knoten 115 ist der Master des Transducerbus 102.
Fig. 2 stellt einen Ausschnitt aus Fig. 1 genauer dar. Die beiden Transducerknoten 210 und 220 sind über den Feldbus 201 miteinander verbunden. Der globale Namensraum, der für die Kommunikation zwischen Subsystemen erforderlich ist, wird von einem clusterweiten verteilten In- terfacefilesystem (Interfacefilesystem) aufgebaut. Das Interfacefilesystem besteht aus einer Anzahl von Files, die in den Transducerknoten eines Clusters gespeichert sind. Der Transducerknoten 210 beinhaltet die Interfacefiles 211, 212 und 213. Der Transducerknoten 220 beinhaltet die Interfacefiles 221, 222 und 223. Der Prozessor eines Transducerknotens schreibt seine für die Kommunikation vorgesehenen Daten in den vereinbarten Satz eines knotenlokalen Files des Interfacefilesystem. Das zeitgesteuerte Kommunikationssystem liest diese Daten aus den knotenlokalen Files, bzw. schreibt sie in die knotenlokalen Files des Interfacefilesystem.
Fig. 3 zeigt eine mögliche Struktur eines Files des Interfacefilesystem. Im Beispiel der Fig. 3 wird ein indexsequentieller Fileaufbau mit konstanter Datensatzlänge dargestellt. Jeder Datensatz 310 hat als letztes Feld ein horizontales Checkfeld 311, das als Inhalt z. B. das Ergebnis einer XOR Verknüpfung oder einer CRC Berechnung über alle vorangegangenen Datenfelder
des Satzes enthält. Dabei soll das Checkfeld 311 auch als Teil einer Nachricht übertragen werden, um beim Empfänger Fehler in der Datenübertragung erkennen zu können. Die Verwendung desgleichen Checkfeldes 311 für die Datenspeicherung im Interfacefilesystem und für die Datenübertragung im Kommunikationssystem hilft Rechenzeit einzusparen. Der letzte Satz eines Files des Interfacefilesystem ist ein vertikaler Checksatz 390, der als Inhalt z. B. das Ergebnis einer XOR Verknüpfung oder einer CRC Berechnung über alle vorangegangenen Sätze enthält. Somit ist es möglich, einen Bitfehler in einem File des Interfacefilesystem durch Überprüfung der Checkfelder bzw. des Checksatzes nach bekannten Methoden zu erkennen und zu korrigieren.
Ein Interfacefile kann beschrieben, gelesen und/oder ausgeführt werden. Die Art der Fileoperation wird durch einen Operationscode (Op-Code) festgelegt. Es gibt drei verschiedene Fileoperationen: read, write, und execute.
Jedes File des Interfacefilesystems hat einen eindeutigen knotenlokalen Filenamen. Wenn in verschiedenen Knoten der gleiche Filename verwendet wird, so bedeuted dies, dass diese Files zusammengehören und ein verteiltes Filesystem bilden. Ein Satz im Interfacefilesystem kann durch folgende Adresse innerhalb eines Clusters angesprochen werden:
<Filename><Knotenname><Satznummer>
Durch Lese- und Schreiboperationen mit der Adresse eines Interfacefilesystem Satzes lässt sich ein Satz im Interfacefilesystem lesen und schreiben. Wenn der Op-Code "ausführen" angibt, so wird der File als ausführbarer Programmmodul (z. B. ein JAVA Applet) interpretiert. Die Implementierung muss sicherstellen, dass die Summe der Teiloperationen der Schreiboperation (z. B. Ändern des Checkfeldes und des Checksatzes) atomar ausgeführt wird. Ein ausgewähltes File des Interfacefilesystems bildet den Endpunkt der Kommunikation mit einem Transducerknoten. Die innerhalb eines Clusters ausgetauschten Daten werden aus dem Interfacefilesystem gelesen bzw. in das Interfacefilesystem geschrieben.
In einem zeitgesteuerten Protokoll werden Echtzeitdaten in Runden übertragen (Fig. 4). z. B. beginnt im zeitgesteuerten Protokoll TTP/A (Kopetz, S. 185) jede Runde mit einem Frame 410, der Synchronisationsinformation und den Rundennamen enthält, aber auch Daten enthalten kann. Dieser erste Frame wird "Fireworksframe" genannt. Es ist eine wesentliche Eigenschaft dieser Erfindung, dass den periodisch wiederkehrenden bekannten Sende- und Empfangszeitpunkten der Echtzeitdaten in einer Runde a priori die Fileoperation und die Adressen des Interfacefilesystem derart zugewiesen werden, dass aus den Zeitpunkten der Datenübertragung die Art und Adresse der zu tätigenden Fileoperation abgeleitet werden kann. Wenn die Fileope-
ration ausführen angibt, so muss in dem adressierten File ein ausführbarer Programmmodul vorhanden sein. In diesem Fall können die in der Runde übertragenen Daten die Parameter der Ausführung darstellen. Durch die a priori Spezifikation der zu einem Zeitpunkt durchzuführenden Fileoperationen und Fileadressen erspart man sich die Angabe der Adresse der Echtzeitdaten während der Übertragung. Da viele Echtzeitdaten oft sehr kompakt sind, z. B. kann eine binäre Schalterstellung in ein einziges Bit codiert werden, ist diese Verkürzung der Echtzeitnachrichten (Wegfall der Adresse) von großer wirtschaftlicher Bedeutung.
Die a priori Zuordnung der Adressen zu den Echtzeitdaten einer Runde erfolgt in einem speziellen verteilten System des Interfacefilesystems, den RODL (Round Descriptor List) Files. Jeder Transducerknoten, der an einer Runde teilnimmt, muss über ein lokales RODL File mit dem Rundennamen verfügen.
Ein Satz eines RODL Files kann folgende Struktur haben:
<SteUungsidentifikation><Op-code><Filename><Länge><Satznummer im lokalen Interfacefilesystem>
Die Stellungsidentifikation spezifiziert direkt oder indirekt, an welcher zeitlichen Stelle dieser Runde ein Frame zu finden ist. Der Op-code gibt an, welche Operation (read, write, execute) auszuführen ist. Die Länge gibt an, wie lange der Frame ist. Die Satznummer gibt an, welcher Satz des ausgewählten lokalen Files angesprochen wird.
Fig. 4 zeigt den Aufbau einer Multipartner Runde. Der Pfeil 400 zeigt das Fortschreiten der Zeit. Der Zeitpunkt 411, zu dem der aktive Master 114 die Runde mit einem Fireworksframe 410 beginnt, ist gleichzeitig das Synchronisationssignal für alle Transducerknoten 121. Das Fireworksframe 410 enthält neben anderer Information den Namen des verteilten RODL Files, der in dieser Runde zur Anwendung gelangt. Dieser ausgewählte RODL File wird im folgenden als aktiver RODL File dieser Runde bezeichnet. Nach dem Fireworksframe 410 und einem definierten Interframegap 419 beginnt zum Zeitpunkt 421 der a priori im aktiven RODL File spezifizierte Knoten mit dem Senden seines Frames 420. Alle Knoten, die in ihrem aktiven RODL File angegeben haben dass der zum Zeitpunkt 421 übertragene Frame 420 lokal zu empfangen ist, schreiben diese Nachricht 420 in die aus dem aktiven RODL File entnommene Satzadresse ihres Interfacefilesystem. Entsprechend dem Inhalt des aktiven RODL Files beginnt dann der zum Sendezeitpunkt 431 bestimmte Knoten nach einem weiteren Interframegap 429 mit dem Senden des Frame 430 und anschließend, wiederum nach einem Interfacegap 439, der zum Sendezeitpunkt 441 bestimmte Knoten mit dem Senden des Frame 440. Wenn das aktive RODL File abgearbeitet ist, warten alle Knoten bis der Master das nächste Fireworksframe sendet und damit ein neues RODL File aktiviert.
Soll das Lesen und Schreiben von Frames in einem Multiclustersystem synchron zu einem externen Zeitsignal erfolgen zu können, muss der vorhin erwähnte externe Zeitmaster 116 das Cluster 110 extern synchronisieren und der Masterknoten 114 den Feldbus 101, sowie der Masterknoten 115 den Feldbus 102 extern synchronisieren. Die externe Synchronisation wird von einem Time-startup-knoten, wie er in Fig. 5 dargestellt ist, realisiert. Falls kein externer Zeitmaster vorhanden ist (oder wenn er ausfällt), können die Knoten 111, 112, 113, 114 und 115 eine fehlertolerante globale Uhrensynchronisation intern aufbauen.
Der Aufbau einer globalen Zeit innerhalb eines Clusters ist im Europäischen Patent 0 658 257 (H. Kopetz) sowie in den US Patenten 4,866,606 (H. Kopetz) und 5,694,542 (H. Kopetz) beschrieben. Ein Protokoll das die clusterinterne Uhrensynchronisation enthält ist unter dem Namen "Time-Triggered Protokoll (TTP)" bekannt geworden. TTP baut auf einem Verfahren zur fehlertoleranten Uhrensynchronisation auf, wie es in den drei soeben genannten Patenten geoffenbart wurde.
Fig. 5 zeigt den Aufbau eines Time-startup-knotens, z. B. des Knotens 114. Jeder Time- startup-knoten verfügt über ein Interface 502 zum Zeitmaster, der auf Bus 500 sendet und auch Communication Interface genannt wird, über einen autonomen Hostcomputer 510 mit eigener CPU und Speicher, und über einen Kommunikationskontroller 522 zum Zeitslave (der auf Bus 520 empfängt). Das CNI 502 zum Zeitmaster muss über ein globales Zeitregister 504 das die globale Zeit enthält, verfügen. Das CNI zu einem Zeit-Slave-Cluster muss neben einem globalen Zeitregister 524 und einem Controller-ON Register 529 ein Time-Startup-Register 525 enthalten.
Das Time-Startup-Register 525 muss vor dem Einschalten des Kommunikationskontroller 522 vom Hostcomputer 510 mit dem zukünftigen Zeitpunkt geladen werden, zu dem der Kommunikationskontroller 522 zum Zeit-Slave-Cluster mittels des ON-Registers 529 vom Hostcomputer 510 eingeschaltet werden wird. Zu diesem Zweck liest der Hostcomputer 510 die globale Zeit aus dem Zeitregister 504 des Zeitmasters, addiert ein ihm bekanntes Verzögerungsintervall bis zum Einschalten des Kontrollers 522 und legt diesen zukünftigen Einschaltzeitpunkt in das Time-Startup-Register 525. Zum Einschaltzeitpunkt schaltet der Hostcomputer 510 den Kontroller 522 mittels des Controller-ON Register 529 ein. Der Kontroller 522 übernimmt nach dem Einschalten die Zeit des Startup-Registers 525 in das Zeitregister 524 und zählt die nun synchronierte Zeit weiter. Der Kontroller 522 führt mit dieser synchronisierten Zeit in dem Zeitregister 524 die Startup Prozedur des ihm zugeordneten Zeit-Slave-Clusters durch. Wenn der Controller 522 kein Time-Start-up-Register 525 besitzt sondern beim Einschalten die Zeit des Registers 524 mit Null initialisiert, so muss der Hostcomputer 510 den Controller genau zu
dem Zeitpunkt einschalten, zu dem die Bitstellen des Zeitmasters im globalen Register 504, die den Bitstellen des Zeitregisters 524 entsprechen, Null sind.
Die Einführung des Time-Start-up-Register 525 führt zu einer signifikanten Reduktion der Start-up Dauer eines Multicluster Echtzeitsystems. Wenn, z. B. für die Zeitdarstellung in dem Register 524 ein 32 Bit-Format mit Mikrosekundengranularität vorgesehen ist, so muss im längsten Fall der Hostcomputer 510 mit dem Einschalten 212 Sekunden warten bis die Nullstellung des Zeitregisters 524 gegeben ist. Durch die Einführung des Time-Start-up-Register 525 wird diese Zeit auf wenige μsec herabgesetzt. Selbst bei einer 16-Bit Zeitdarstellung reduziert sich die Wartezeit beim Einschalten noch um einen Faktor größer als 1000. In vielen technischen Anwendungen ist eine kurze Wiedereinschaltdauer nach einem transienten Fehler von großer sicherheitstechnischer Bedeutung. Das Time-Start-up-Register 525 darf nach dem Einschalten des Controllers 522 nicht initialisiert werden, da sonst der vom Hostcomputer eingetragene Zeitwert verloren ginge.
Der Time-startup-knoten 114, der der Master des Transducerbusses 101 ist, kann Transducerknoten 121, die nur über einen on-chip Oszillator verfügen, durch das Senden eines regulären Bitmusters synchronisieren. Ein Transducerknoten 121 nimmt die Flanken eines solchen regulären Bitmusters auf einem Digitaleingang wahr und zählt die Anzahl der Schwingungen seines lokalen Oszillators zwischen den Flanken, die vom Time-startup-knoten 114 gesendet werden. Auf diese Weise erfährt der Transducerknoten, wie viele lokale Oszillatorschwingungen dem a priori bekannten Zeitintervall zwischen den vom Time-startup-knoten 114 gesendeten Flanken entsprechen.
Im folgenden Abschnitt wird an einem Beispiel gezeigt, wie die Namen und Adressen des beschriebenen Interfacefilesystems in einer 8-bit Architektur eines Microcontrollers effizient codiert werden können:
Fileoperationen: Die ersten beiden Bits eines Bytes
(erlaubt die Codierung der drei Operation read, write, execute)
Filename: Die letzten 6 Bits eines Bytes
(ermöglicht die Unterscheidung von 64 Files)
Opcode + Filename: 1 Byte ( 2 bit Fileoperation, 6 bit Filename)
Knotenname: 1 Byte (ermöglicht die Unterscheidung von 256 Knoten in einem Cluster)
Satznummer: 1 Byte (erlaubt bis zu 256 Sätze pro File)
Satzadresse im clu st erweiten Interfacefilesystem 3 Byte (l Byte Filename, 1 Byte Knotenname. 1 Byte Satznummer)
Satzadresse im lokalen Interfacefilesystem 2 Byte (1 Byte Filename, Knotenname entfällt, da implizit gegeben, 1 Byte Satznummer)
RODL Eintrag. 4 Byte (1 Byte Stellungsidentifikation, 1 Byte OpCode und Filename, 1 Byte Länge des Frames. 1 Byte Satzadresse im lokalen Interfacefilesystem)
RODL Ausführung 1 Byte (OpCode und Filenamc)
Satzlänge' 5 Byte (4 Byte Daten, 1 Byte horizontales (.heck Feld)
File Schreiboperation 8 Byte Nachricht
(1 Byte Fileoperation + Filename, 1 Byte Node Name. 1 Byte
Satznummer, 4 Datenbytes. 1 horizontales Check Byte)
Die experimentelle Implementierung des Interfacefilesystem in einem 8-bit Microcontroller hat gezeigt, dass das Interfacefilesystem mit einem Aufwand von ca. 2 kByte Code implementiert werden kann. Diese Codegröße lässt sich selbst in kleinen Ein-Chip Microcontroller unterbringen.
Natürlich lässt sich das Interfacefilesystem auch in einem größeren Computer realisieren, wobei andere, auf die Architektur Rücksicht nehmende Codierungsvorschriften zur Anwendung gelangen werden.
Die Anwendung des hier beschriebenen Verfahrens ist nicht auf das zeitgesteuerte TTP/A Protokoll beschränkt, sondern kann in jedem anderen Kommunikationssystem (z. B. CAN oder ETHERNET), das zeitgesteuert betrieben wird, vorgenommen werden