-
GEBIET DER ERFINDUNG
-
Die vorliegende Erfindung betrifft das Aufzeichnen von Aktivitäten für eine parallele Softwareumgebung. Insbesondere betrifft sie das Aufzeichnen von Informationen bezüglich des Synchronisierungszustandes von Threads in einer parallelen Softwareumgebung.
-
HINTERGRUND DER ERFINDUNG
-
Parallele Softwareumgebungen, die Software-Threads in einem Computersystem ausführen, verwenden einen oder mehrere Synchronisierungsmechanismen, um gesteuerten Zugriff auf gemeinsam genutzte Ressourcen sicherzustellen und die gleichzeitige Verwendung gemeinsam genutzter Ressourcen zu vermeiden. Zum Beispiel können in einer parallelen Softwareumgebung ausgeführte Softwareverfahren mittels eines Algorithmus wechselseitigen Ausschlusses (mutual exclusion (mutex)), einer Softwaresperre, eines Synchronisierungsüberwachers, Semaphoren oder anderen im Stand der Technik bekannten Synchronisierungsmechanismen synchronisiert werden.
-
Eine hohe Skalierbarkeit von in parallelen Softwareumgebungen wie beispielsweise Java (Java ist eine Marke der Oracle Corporation) ausgeführten Mehr-Thread-Anwendungen hängt von guten Werkzeugen zum Auffinden von Bereichen des Softwarecodes ab, die Möglichkeiten bieten, die Skalierbarkeit durch Verringern oder Beseitigen von Problemen zu verbessern, die sich als Konflikte beim Zugreifen auf synchronisierte gemeinsam genutzte Ressourcen äußern. Das Erkennen solcher Bereiche von Softwarecodes wird durch Einrichtungen zum Messen des Auftretens von Synchronisierungsereignissen unterstützt, wie beispielsweise von Konflikten zwischen Software-Threads, die Ressourcen gemeinsam nutzen.
-
Das Instrumentalisieren von Softwarecode für das Messen von Synchronisierungsereignissen ist jedoch mit Schwierigkeiten verbunden. Ein Konflikt ist sehr anfällig für Werkzeugaufwand, da die bloße Ausführung des Überwachungs- und Messwerkzeugs die Synchronisierungsdynamik von in einer parallelen Softwareumgebung ausgeführten Software beeinflusst.
-
Aktuelle Werkzeuge wie beispielsweise der „Java Lock Monitor" (JLM) (siehe perfinsp.sourceforge.net/jlm.html) oder das „IBM Monitoring and Diagnostic Tools for Java – Health Centre" (siehe publib.boulder.ibm.com/infocenter/hctool/v1r0/index.jsp) stellen ein Überwachen und Aufzeichnen von Konfliktereignissen in der Java-Umgebung auf der Grundlage synchronisierter Ressourcen bereit. Diese Werkzeuge sind jedoch nicht in der Lage, Informationen zum Zustand eines Software-Thread zum Zeitpunkt des Konflikts bereitzustellen, wie beispielsweise das spezielle Softwareverfahren, das den Konflikt erfährt. Das Verwenden solcher Werkzeuge ist somit nicht zielführend, um zu ermitteln, welche Softwareverfahren in einer Anwendung für das Auftreten von Konflikten verantwortlich sind.
-
Weiterhin ist es schwierig, Werkzeuge zu entwickeln und zu pflegen, die eine Zeitdauer messen, während derer sich ein Softwareverfahren in einem Software-Thread in einem bestimmten Synchronisierungszustand, wie beispielsweise dem Konfliktzustand, befindet. Aufgrund der Natur der parallelen Softwareumgebung erfordert die Eigenschaft von Software-Threads, als Teil des Synchronisierungsmechanismus unterbrochen und wieder aufgenommen zu werden, eine komplexe Messlogik, um eine geeignete Zuweisung von Zeitperioden zu bestimmten Synchronisierungszuständen, bestimmten Softwareverfahren und bestimmten Software-Threads zu ermitteln.
-
Es wäre daher vorteilhaft, Aktivitäten von Threads in einer parallelen Softwareumgebung aufzuzeichnen, um Unterstützung für eine Analyse des Synchronisierungsverhaltens zu bieten, um die Skalierbarkeit paralleler Software zu verbessern.
-
KURZDARSTELLUNG DER ERFINDUNG
-
Die vorliegende Erfindung stellt dementsprechend in einem ersten Aspekt ein Aktivitätsaufzeichnungssystem für eine parallele Softwareumgebung bereit, die Software-Threads in einem Computersystem ausführt, wobei das Aktivitätsaufzeichnungssystem aufweist: einen Thread-Zustandsanzeiger zum Aufzeichnen einer Anzeige eines Synchronisierungszustandes eines Software-Thread, in dem der Software-Thread aufhört, auf einem Prozessor des Computersystems ausgeführt zu werden, wobei die Anzeige einer Kennzeichnung des Software-Thread zugeordnet ist; ein Zeit-Profiler zum Erkennen, dass ein Prozessor des Computersystems inaktiv ist, und Aufzeichnen einer Anzeige, dass der Prozessor inaktiv ist; ein Zuteilungsüberwacher zum Erkennen der Zuteilung des Software-Thread zum Prozessor und als Reaktion auf die Anzeige, dass der Prozessor inaktiv ist und die Anzeige eines Synchronisierungszustands des Software-Thread Erzeugen eines Datensatzes, der die Inaktivität des Prozessors dem Software-Thread und dem angezeigten Synchronisierungszustand zuschreibt.
-
Vorzugsweise ist der Zeit-Profiler weiterhin in der Lage, eine inaktive Periode für den Prozessor als eine Periode zu erkennen, während derer der Prozessor kontinuierlich inaktiv ist, und der Datensatz, der die Inaktivität zuschreibt, schreibt die inaktive Periode des Prozessors dem Software-Thread und dem angezeigten Synchronisierungszustand zu.
-
Vorzugsweise wird festgestellt, dass der Prozessor inaktiv ist, indem festgestellt wird, dass dem Prozessor kein darauf auszuführender Software-Thread zugeteilt ist.
-
Vorzugsweise weist das Aktivitätsaufzeichnungssystem weiterhin auf: eine Berechnungskomponente zum Berechnen eines Zeitanteils, für den sich der Thread in einem angegebenen Zustand befunden hat.
-
Vorzugsweise ist der Thread-Zustandsanzeiger in der Lage aufzuzeichnen: eine Anzeige eines „blockierten” Zustands des Software-Thread, in dem der Software-Thread davon abgehalten wird, ein ausschließendes Konstrukt zum Erreichen der Synchronisierung in der parallelen Softwareumgebung anzufordern; eine Anzeige eines „Warte”-Zustands des Software-Thread, in dem der Software-Thread auf eine durch einen anderen Software-Thread vorzunehmende Verarbeitung wartet; eine Anzeige eines „ausführbaren” Zustands des Software-Thread, in dem der Software-Thread zur Ausführung auf einem Prozessor des Computersystems bereit ist; und eine Anzeige eines nicht synchronisierten Zustands eines Software-Thread.
-
Vorzugsweise enthält die Anzeige eines Synchronisierungszustands eines Software-Thread weiterhin eine Kennung einer gemeinsam genutzten Ressource, auf die der Software-Thread Zugriff sucht.
-
Vorzugsweise weist das Aktivitätsaufzeichnungssystem weiterhin auf: einen Auflöser zum Ermitteln eines symbolischen Namens, welcher der Kennung einer gemeinsam genutzten Ressource zugeordnet ist.
-
Vorzugsweise ist der Zeit-Profiler weiterhin eingerichtet, festzustellen, dass die Softwareroutine in einer Dienstbibliothek von Routinen der Softwareumgebung enthalten ist, und als Reaktion auf die Feststellung eine aufrufende Routine für die Softwareroutine zu erkennen.
-
Vorzugsweise erkennt der Zeit-Profiler die aufrufende Routine mithilfe eines oder mehrerer von: dem Auflöser; und einem Softwareaufrufstapel.
-
Vorzugsweise wird der Synchronisierungszustand des Software-Thread ermittelt durch eines oder mehrere von: dem Software-Thread selbst; und der parallelen Softwareumgebung.
-
Vorzugsweise handelt es sich bei dem ausschließenden Konstrukt um eines von: einer Sperre; und einem Überwacher.
-
Vorzugsweise handelt es sich bei der gemeinsam genutzten Ressource um ein Softwareobjekt.
-
Vorzugsweise ist der Zeit-Profiler weiterhin in der Lage, Werte eines Programmzählers für den Prozessor des Computersystems in regelmäßigen Intervallen abzufragen, und der Zeit-Profiler erkennt die inaktive Periode durch Zählen einer Anzahl regelmäßiger Intervalle, während derer der Prozessor inaktiv ist.
-
Vorzugsweise enthält die Anzeige, dass der Prozessor inaktiv ist, die Zählung von regelmäßigen Intervallen, während derer der Prozessor inaktiv ist.
-
Die vorliegende Erfindung stellt dementsprechend in einem zweiten Aspekt ein Verfahren zum Aufzeichnen von Aktivitäten für eine parallele Softwareumgebung bereit, die Software-Threads in einem Computersystem ausführt, wobei das Verfahren die Schritte aufweist: ein Thread-Zustandsanzeiger zeichnet eine Anzeige eines Synchronisierungszustandes eines Software-Thread auf, in dem der Software-Thread aufhört, auf einem Prozessor des Computersystems ausgeführt zu werden, wobei die Anzeige einer Kennzeichnung des Software-Thread zugeordnet ist; ein Zeit-Profiler erkennt, dass ein Prozessor des Computersystems inaktiv ist, und zeichnet eine Anzeige auf, dass der Prozessor inaktiv ist, wobei ein Zuteilungsüberwacher die Zuteilung des Software-Thread zum Prozessor erkennt; und als Reaktion auf die Anzeige, dass der Prozessor inaktiv ist und die Anzeige des Synchronisierungszustands des Software-Thread, erzeugt der Zuteilungsüberwacher einen Datensatz, der die Inaktivität des Prozessors dem Software-Thread und dem angezeigten Synchronisierungszustand zuschreibt.
-
Dementsprechend stellt die vorliegende Erfindung in einem dritten Aspekt eine Vorrichtung bereit, aufweisend: eine Zentraleinheit; ein Speicher-Teilsystem; ein Eingabe/Ausgabe-Teilsystem; und ein Bus-Teilsystem, das die Zentraleinheit, das Speicher-Teilsystem, das Eingabe/Ausgabe-Teilsystem und die Vorrichtung wie vorstehend beschrieben miteinander verbindet.
-
Dementsprechend stellt die vorliegende Erfindung in einem vierten Aspekt ein Computerprogrammelement bereit, das Computerprogrammcode aufweist, um im Falle, dass es auf ein Computersystem geladen und darauf ausgeführt wird, den Computer veranlasst, die Schritte eines Verfahrens wie vorstehend beschrieben durchzuführen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Nachfolgend wird in lediglich beispielhafter Weise eine bevorzugte Ausführungsform der vorliegenden Erfindung unter Bezugnahme auf die begleitenden Zeichnungen detaillierter beschrieben, in denen:
-
1 ein Blockschaltbild eines Computersystems zeigt, das für den Betrieb von Ausführungsformen der vorliegenden Erfindung geeignet ist;
-
2 einen Aufbau eines in einem Computersystem realisierten Aktivitätsaufzeichnungssystems gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht;
-
3 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung einen Ablaufplan eines Verfahrens zum Aufzeichnen von Aktivitäten für die parallele Softwareumgebung zeigt, die Software-Threads in dem Computersystem ausführt;
-
4 einen verbesserten Aufbau eines in einem Computersystem realisierten Aktivitätsaufzeichnungssystems gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht; und
-
5 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung einen Ablaufplan eines verbesserten Verfahrens zum Aufzeichnen von Aktivitäten für die parallele Softwareumgebung zeigt, die Software-Threads in dem Computersystem ausführt.
-
DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
1 zeigt ein Blockschaltbild eines Computersystems, das für den Betrieb von Ausführungsformen der vorliegenden Erfindung geeignet ist. Eine Zentraleinheit (CPU) 102 ist über einen Datenbus 108 mit einem Speicher 104 und einer Eingabe/Ausgabe(E/A)-Schnittstelle 106 in Datenaustausch verbunden. Bei dem Speicher 104 kann es sich um eine beliebige Lese/Schreib-Speichereinheit handeln, wie beispielsweise einen Speicher mit wahlfreiem Zugriff (RAM) oder eine nichtflüchtige Speichereinheit. Zu einem Beispiel einer nichtflüchtigen Speichereinheit kann eine Platten- oder eine Bandspeichereinheit zählen. Die E/A-Schnittstelle 106 stellt eine Schnittstelle für Einheiten zur Eingabe oder Ausgabe von Daten oder sowohl zur Eingabe als auch zur Ausgabe von Daten dar. Beispiele von mit der E/A-Schnittstelle 106 verbindbaren E/A-Einheiten schließen eine Tastatur, eine Maus, eine Anzeige (wie beispielsweise einen Monitor) und eine Netzwerkverbindung ein.
-
2 veranschaulicht einen Aufbau eines in einem Computersystem 200 realisierten Aktivitätsaufzeichnungssystems gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung. Das Computersystem 200 enthält einen oder mehrere Prozessoren 102 für die Ausführung von Anweisungen. Jeder Prozessor 102 im Computersystem 200 enthält einen Programmzähler 206 als ein Register oder eine andere geeignete Aufbewahrung zum Speichern eines Wertes, der eine aktuelle Position in einer Sequenz von Anweisungen anzeigt, die durch den Prozessor 102 ausgeführt werden. Programmzähler sind auch als Instruktionszeiger, Instruktionsadressregister oder Instruktionssequenzer bekannt. Der Programmzähler 206 kann abhängig von einem bestimmten Aufbau des Prozessors 102 eine Adresse für eine derzeit ausgeführte Anweisung oder alternativ eine Adresse für eine nächste auszuführende Anweisung enthalten.
-
Vorzugsweise handelt es sich bei den Prozessoren 102 um mehrere unabhängige Prozessoren in einem Mehrprozessor-Computersystem. Alternativ können die Prozessoren 102 als separate Rechensysteme zusammengesetzt sein, die in einem Netzwerk miteinander arbeitender Computersysteme organisiert sind, wie beispielsweise einem Array von Computersystemen. Jedes System in solch einem Array kann unabhängig die wesentlichen Merkmale eines vorstehend im Hinblick auf 1 dargestellten Computersystems beinhalten. Zum Beispiel können die Prozessoren 102 innerhalb eines Rack-Computer-Aufbaus, eines Blade-Servers oder einem anderen geeigneten Array von Computersystemen zusammengesetzt sein. In einer weiteren Alternative können die Prozessoren 102 als separate Verarbeitungselemente eines einzelnen Prozessors aufgebaut sein, wie beispielsweise separate Verarbeitungskerne einer Prozessoreinheit. Kombinationen solcher hierein betrachteter Prozessoranordnungen sind ebenfalls als Ausführungsformen des einen oder der mehreren Prozessoren 102 geeignet.
-
Das Computersystem 200 enthält weiterhin einen Speicher 104, wie beispielsweise einen flüchtigen Arbeitsspeicher. In dem Speicher 104 ist ein Zeit-Profiler 218 gespeichert. Bei dem Zeit-Profiler 218 handelt es sich um eine Komponente zum Aufzeichnen von Werten des Programmszählers 206 für den Prozessor 102 im Computersystem 200. Die Werte des Programmzählers 206 werden als Profiler-Datensätze 222 in dem Speicher 104, einem alternativen Speicher oder einem anderen dem Computersystem 200 zugeordneten Speicher aufgezeichnet.
-
Im Betrieb unterbricht der Zeit-Profiler 218 die Ausführung des Prozessors 102 periodisch (als ein Profiler-„Tick” bezeichnet), um einen Wert des Programmzählers 206 aufzuzeichnen, bevor die Ausführung der unterbrochenen Anweisungen wiederaufgenommen wird. Ein Wert des Programmzählers 206 entspricht einer Adresse in dem Speicher 104 einer Anweisung in einer Anweisungssequenz für einen auf dem Prozessor 102 ausgeführten Software-Thread 210 zum Zeitpunkt der Profiler-Unterbrechung (des Ticks). Die Unterbrechungen finden in regelmäßigen Intervallen statt, so dass ein Wert des Programmzählers 206 in regelmäßigen Intervallen durch den Zeit-Profiler 218 abgefragt wird. Der Zeit-Profiler 218 kann weiterhin in der Lage sein, Werte von Programmzählern für mehrere Prozessoren im Computersystem 200 aufzuzeichnen, was ein Erstellen eines Datensatzes einer jedem Wert eines Programmzählers 206 entsprechenden Kennung eines Prozessors einschließt.
-
Wie für den Fachmann ersichtlich ist, kann der Zeit-Profiler 218 vollständig als in dem Speicher 104 gespeicherte Software realisiert sein. Zum Beispiel kann der Zeit-Profiler 218 auf einem Anwendungswerkzeug beruhen, wie beispielsweise dem von IBM entwickelten und unter „perfinsp.sourceforge.net/tprof.html” näher ausgeführten Zeit-Profilerwerkzeug „TProf” (IBM ist eine eingetragene Marke der International Business Machines Corporation).
-
Alternativ dazu kann der Zeit-Profiler 218 außerhalb des Speichers 104 realisiert und vollständig in Hardware oder einer Kombination von sowohl Hardware als auch Software ausgebildet sein. Zum Beispiel kann es sich beim Zeit-Profiler 218 um eine auf dem Computersystem 200 ausgeführte Softwareroutine handeln, wie beispielsweise ein Betriebssystem oder eine Kernelfunktion in enger Zusammenarbeit mit dem einen oder den mehreren Prozessoren 102 des Computersystems 200. Alternativ dazu kann der Zeit-Profiler 218 Prozessoranweisungen verwenden, die speziell auf das Speichern eines Wertes des Programmzählers 206 gerichtet sind. In einer weiteren Alternative kann es sich bei dem Zeit-Profiler 218 um eine Funktion eines „Just In Time”(JIT)-Kompilierers für die parallele Softwareumgebung 208 handeln, was als ein „Sampling Thread” bekannt ist.
-
In dem Speicher 104 ist weiterhin eine parallele Softwareumgebung 208 gespeichert. Bei der parallelen Softwareumgebung 208 handelt es sich um eine Umgebung, in der Software als eine Sammlung eines oder mehrerer Rechenprozesse angelegt ist, welche für die gleichzeitige parallele Ausführung geeignet sind. Insbesondere erfordert die Eignung für eine solche parallele gleichzeitige Ausführung nicht notwendigerweise, dass parallele Software tatsächlich parallel ausgeführt wird. Eine parallele Softwareumgebung kann eine parallele Ausführung mithilfe eines einzelnen Prozessors 102 imitieren oder echte parallele Ausführung mithilfe mehrerer Prozessoren 102 realisieren, wie beispielsweise bei jeder beliebigen der vorstehend beschriebenen Anordnungen von Prozessoren 102. Parallele Programme können auf einem einzelnen Prozessor sequenziell ausgeführt werden, indem die Ausführungsschritte jedes Rechenprozesses verzahnt werden, oder sie können parallel ausgeführt werden, indem jeder Rechenprozess einem Prozessor aus einem Satz von Prozessoren 102 zugewiesen wird, die sich in der Nähe befinden oder über ein Netzwerk verteilt sein können. Ein Beispiel für solch eine parallele Softwareumgebung stellt eine Java-Laufzeitumgebung (Java Runtime Environment) dar.
-
Ein Vielzahl von Software-Threads 210 im Computersystem 200 wird als parallele Rechenprozesse gleichzeitig in der parallelen Softwareumgebung 208 ausgeführt. Zum Beispiel handelt es sich bei den Software-Threads 210 um Ausführungs-Threads in einem Java-Programm, das für instanziierte Java-Objekte ausgeführte Softwareverfahren einschließt.
-
Die Software-Threads 210 sind jeweils in der Lage, auf eine gemeinsam genutzte Ressource 216 zuzugreifen. Bei der gemeinsam genutzten Ressource 216 kann es sich um jede für den Zugriff durch Threads in der parallelen Softwareumgebung 208 geeignete Ressource handeln, wie beispielsweise eine Hardware- oder Softwareressource, einen gemeinsam genutzten Speicherbereich, eine Einheit, einen Prozessor oder irgendeine andere Ressource. Zum Beispiel kann es sich bei der gemeinsam genutzten Ressource 216 um ein Java-Objekt handeln, wie beispielsweise ein Java-Objekt, das synchronisierte Softwareverfahren in der Java-Umgebung enthält.
-
Die parallele Softwareumgebung 208 verwendet einen oder mehrere Synchronisierungsmechanismen, um einen gesteuerten Zugriff auf die gemeinsam genutzte Ressource 216 sicherzustellen und die gleichzeitige Nutzung der gemeinsam genutzten Ressource 216 durch mehrere Software-Threads 210 zu vermeiden.
-
Zum Beispiel können in der parallelen Softwareumgebung 208 Software-Threads mittels eines Algorithmus wechselseitigen Ausschlusses (Mutex), einer Softwaresperre, eines Synchronisierungsüberwachers, Semaphoren oder anderen im Stand der Technik bekannten Synchronisierungsmechanismen synchronisiert werden. Solche Mechanismen können ein ausschließendes Konstrukt verwenden, um die gleichzeitige Nutzung der gemeinsamen Ressource 216 zu vermeiden. Zu in solchen Synchronisierungsmechanismen verwendeten ausschließenden Konstrukten können Sperren, Überwacher und Semaphoren zählen.
-
Zum Beispiel können die Software-Threads 210, die auf ein Softwareobjekt mit einem synchronisierten Softwareverfahren als gemeinsam genutzte Ressource 216 zugreifen, synchronisiert werden, indem ein Softwareüberwacher verwendet wird, um den Zugriff auf das Softwareobjekt zu jedem bestimmten Zeitpunkt auf einen einzigen Thread einzuschränken. Um einen Thread zu beschreiben, der in durch ausschließende Konstrukte synchronisierten Umgebungen arbeitet, können unterschiedliche Betriebszustände verwendet werden.
-
Von einem auf dem Computersystem 200 ausgeführten Software-Thread 210, der Zugriff auf eine gemeinsam genutzte Ressource 216 zu erhalten sucht, kann gesagt werden, er strebe an, ein der gemeinsam genutzten Ressource 216 zugeordnetes ausschließendes Konstrukt zu „erwerben”. Gleichermaßen kann von einem derzeit synchronisierten Zugriff auf die gemeinsam genutzte Ressource 216 genießenden Software-Thread 210 gesagt werden, er „besitze” ein der gemeinsam genutzten Ressource 216 zugeordnetes ausschließendes Konstrukt, was auch als „Besitz”-Zustand („held” state) des Software-Thread 210 bekannt ist.
-
Synchronisierungsmechanismen zum Erreichen der gemeinsamen Nutzung der gemeinsam genutzten Ressource 216 beziehen Threads mit ein, die in andere Betriebszustände übergehen, Ein Synchronisierungsmechanismus kann von einem Thread 210, der ein ausschließendes Konstrukt zu erwerben sucht, verlangen, in einen „Leerlauf”-Zustand überzugehen, bevor er das ausschließende Konstrukt besitzen kann. Ein Thread im „Leerlauf”-Zustand wird aktiv auf einem Prozessor 102 ausgeführt, ist jedoch nicht in der Lage, auf die dem ausschließenden Konstrukt zugeordnete gemeinsam genutzte Ressource 216 zuzugreifen. Normalerweise ist ein Thread in einem „Leerlauf”-Zustand nicht in der Lage, nützliche Tätigkeiten zu verrichten, da er das ausschließende Konstrukt zu erwerben sucht, somit führen solche Threads normalerweise keine anderen Softwareroutinen oder -verfahren aus, während sie sich im „Leerlauf”-Zustand befinden.
-
Synchronisierungsmechanismen können dazu führen, dass es einem Thread 210 nicht gelingt, ein ausschließendes Konstrukt für die gemeinsam genutzte Ressource 216 zu erwerben, was den Thread in einem „blockierten” Zustand hält, in dem er nicht in der Lage ist, auf die gemeinsam genutzte Ressource 216 zuzugreifen. Threads in einem „blockierten” Zustand sind nicht zur Ausführung in der Lage und unterliegen nicht länger der Verarbeitung durch irgendeinen Prozessor 102 im Computersystem 200, während sie sich im „blockierten” Zustand befinden. Eine solche Blockierung kann vorübergehend sein, wenn das ausschließende Konstrukt im Anschluss für den Erwerb durch den Thread 210 verfügbar wird.
-
Ein Thread 210, der ein ausschließendes Konstrukt besitzt, kann in einen „Warte”-Zustand eintreten, während der Thread 210 darauf wartet, dass durch einen anderen Thread eine Verarbeitung vorgenommen wird. Solche „Warte”-Zustände werden normalerweise durch den Empfang einer Benachrichtigung oder im Falle von Zuständen „zeitgeplanten Wartens” durch Ablauf einer zuvor festgelegten Zeitdauer hervorgerufen. Threads 210 in den Zuständen „Warten” und „zeitgeplantes Warten” sind nicht zur Ausführung in der Lage und unterliegen nicht länger einer Verarbeitung durch irgendeinen Prozessor 102 im Computersystem 200, bis die Benachrichtigung durch den Thread 210 empfangen wird oder die Zeitdauer abläuft. Threads, die in einen „Warte”-Zustand eintreten, geben normalerweise ein ausschließendes Konstrukt frei und erwerben es neu, wenn sie den „Warte”-Zustand verlassen.
-
Weiterhin können sich Threads 210 in einem „ausführbaren” Zustand befinden, wobei es sich um einen Zustand handelt, in dem ein Thread 210 in der Lage und bereit ist, auf einem Prozessor 102 des Computersystems 200 ausgeführt zu werden, in welchem dem Thread 210 jedoch momentan kein Prozessor 102 zur Ausführung zugewiesen ist.
-
Jeder der Software-Threads 210 enthält einen Thread-Zustandsanzeiger 212 zum Aufzeichnen einer momentanen Anzeige eines derzeitigen Synchronisierungszustandes 214 für den Thread 210. Die Anzeige 214 ist einem bestimmten Thread 210 zugeordnet und kann jeden einzelnen oder alle der Zustände anzeigen: „Besitz”; „Leerlauf”; „blockiert”; „Warten” (entweder „Warten” oder „zeitgeplantes Warten”); „ausführbar” sowie eine Anzeige eines nicht synchronisierten Zustands des Software-Thread 210. In einer Ausführungsform wird die Anzeige 214 durch den Software-Thread selbst festgelegt. In einer alternativen Ausführungsform wird die Anzeige 214 durch die parallele Softwareumgebung 208 festgelegt, wie beispielsweise durch eine virtuelle Maschine in einer Java-Laufzeitumgebung.
-
Der Aufbau von 2 wird nun in Verwendung beschrieben, um die Vorteile von Ausführungsformen der vorliegenden Erfindung aufzuzeigen. In Verwendung wird die Anzeige 214 bei, kurz vor oder kurz nach einer Änderung am Synchronisierungszustand des Software-Thread 210 festgelegt. Zum Beispiel aktualisiert ein Software-Thread 210, der im Begriff ist, ein Synchronisierungskonstrukt für den Zugriff auf die gemeinsam genutzte Ressource 216 zu erwerben, die Anzeige 214 so, dass sie einen „Besitz”-Zustand wiedergibt. Gleichermaßen aktualisiert ein Software-Thread 210, der im Begriff ist, in einen „Leerlauf”-Zustand einzutreten, die Anzeige 214 so, dass sie einen „Leerlauf”-Zustand wiedergibt.
-
In Verwendung fragt der Zeit-Profiler 218 regelmäßige Werte des Programmzählers 206 für jeden des einen oder der mehreren Prozessoren 102 ab und zeichnet sie in der Profilerdatensätzen 222 auf. Der Zeit-Profiler 218 ist eingerichtet, einen Synchronisierungszustand für einen auf einem abgefragten Prozessor 102 ausgeführten Software-Thread 210 in den Profiler-Datensätzen 222 aufzuzeichnen. Der Synchronisierungszustand beruht auf einem Erkennen, welcher Thread 210 auf dem abgefragten Prozessor 102 ausgeführt wird, und auf der Anzeige des durch den Thread 210 gespeicherten Synchronisierungszustands 214. Zustandsangaben für Threads in Zuständen, die das Ausführen auf einem des einen oder der mehreren Prozessoren 102 mit sich bringen, können auf diese Weise ermittelt und aufgezeichnet werden. Hierzu zählen die Zustände „Leerlauf”, „Besitz” und der Zustand nicht synchronisierter Ausführung.
-
Somit ist der Aufbau von 2 in Verwendung in der Lage, für Threads 210, die in der parallelen Softwareumgebung 208 ausgeführt werden, die Synchronisierungszustandsangaben „Besitz” und „Leerlauf” in regelmäßigen Zeitintervallen durch Abfragen des Zeit-Profiler 218 aufzuzeichnen. Bei einer solchen Abfrage kann es sich um einen feingranularen oder atomischen Prozess handeln, der einen sehr niedrigen Verarbeitungsaufwand für das Computersystem 200 darstellt und somit einen im Wesentlichen vernachlässigbaren Einfluss auf die Synchronisierungsdynamik der parallelen Softwareumgebung 208 besitzt. Zudem ist die Verarbeitung des Zeit-Profiler 218 im Hinblick auf die parallele Softwareumgebung 208 insofern passiv, als das Abfragen von Werten des Programmzählers 206 und das Erhalten der Synchronisierungszustandsanzeige 214 keine aktive Beteiligung der parallelen Softwareumgebung 208 erfordern. Weiterhin können die regelmäßig erfolgenden Synchronisierungszustandsangaben „Besitz” und „Leerlauf” für die mehreren Software-Threads 210 einen Prozess des Analysierens des Synchronisierungsverhaltens der Software-Threads 210 informieren, um die Effizienz, Betriebsfähigkeit und Skalierbarkeit der parallelen Softwareumgebung 208 zu verbessern.
-
In einer Ausführungsform wird jeder Wert des Programmzählers 206 in eine Kennzeichnung eines ausgeführten Softwareverfahrens für einen auf dem Prozessor 102 ausgeführten Thread aufgelöst. Zum Beispiel kann der Zeit-Profiler 218 einen Auflöser verwenden, um für jeden durch den Zeit-Profiler 218 aufgezeichneten Adresswert des Programmzählers 206 einen symbolischen Namen zu ermitteln, der Softwarecode für einen Software-Thread 210 kennzeichnet, der eine unter der Adresse gespeicherte Anweisung enthält. Somit werden durch den Auflöser für jede durch den Zeit-Profiler 218 aufgezeichnete Adresse Symbolnamen einschließlich Funktions-, Prozedur-, Subroutinen- oder Verfahrensnamen in einem Thread 210 abgerufen. Bei dem Auflöser kann es sich um eine Funktion des Zeit-Profiler 218 oder eine in dem Speicher 204 gespeicherte ergänzende Funktion oder ein ergänzendes Werkzeug handeln.
-
Der Aufbau von 2 kann weiterhin eine Berechnungskomponente zum Berechnen eines Anteils der regelmäßigen durch den Zeit-Profiler profilierten Intervalle enthalten, für die sich ein Thread 210 in einem bestimmten Synchronisierungszustand befand. Zum Beispiel kann ein prozentualer Anteil der Gesamtzeit berechnet werden, zu dem sich ein Thread 210 in einem „Besitz”-Zustand befand. Eine solche Berechnungskomponente kann als Bestandteil im Zeit-Profiler 218 enthalten sein. Alternativ dazu kann es sich bei einer solchen Berechnungskomponente um eine separate oder zusätzliche Software- oder Hardwarekomponente handeln, die mit den durch die Profiler-Komponente 218 erzeugten Profiler-Datensätzen 222 interagiert.
-
In einer bevorzugten Ausführungsform zeichnet der Thread-Zustandsanzeiger 212 zusätzlich eine Kennzeichnung der gemeinsam genutzten Ressource 216 auf, auf die der Software-Thread 210 Zugriff sucht. Zum Beispiel kann der Thread-Zustandsanzeiger 212 die Kennzeichnung zusammen mit der Synchronsierungszustandsangabe 214 aufzeichnen. Zu einer solchen Kennzeichnung können zum Beispiel ein Klassenname eines Objekts oder eine Kennung eines synchronisierten Softwareverfahrens, einer Routine, einer Einheit, eines Datenelements oder einer anderen gemeinsam genutzten Ressource zählen. Weiterhin ist der Auflöser in einer bevorzugten Ausführungsform in der Lage, einen einer durch den Thread-Zustandsanzeiger 212 aufgezeichneten Kennung zugeordneten symbolischen Namen der gemeinsam genutzten Ressource 216 zu ermitteln. Zum Beispiel wird ein Name einer Softwareroutine, wie beispielsweise eines Softwareverfahrens oder einer Funktion, mit der Synchronisierungszustandsangabe 214 aufgezeichnet. Wenn die gemeinsam genutzte Ressource 216 Softwareobjekte enthält, die Softwareobjekte mit synchronisierten Routinen wie beispielsweise ein synchronisiertes Softwareverfahren einschließen, kann die gemeinsam genutzte Ressource 216 einer durch eine aufrufende Softwareroutine aufgerufenen Routine in einer Dienstbibliothek entsprechen, wie beispielsweise einer Klassenbibliothek, Standardbibliothek, Dienstroutine oder einem Basisverfahren oder einer Basisfunktion. In solchen Situationen ist es unter Umständen wenig hilfreich, eine Anzeige der Routine selbst aufzuzeichnen (da solche Routinen häufig durch viele Verfahren aufgerufen werden können), und stattdessen kann eine Kennung einer aufrufenden Routine ermittelt und zusätzlich oder stattdessen aufgezeichnet werden. Eine solche aufrufende Routine kann von einem Aufrufstapel und/oder einem Auflöser erkannt werden.
-
3 zeigt gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung einen Ablaufplan eines Verfahrens zum Aufzeichnen von Aktivitäten für die parallele Softwareumgebung 208, die Software-Threads 210 in dem Computersystem 200 ausführt. In Schritt 302 zeichnet der Thread-Zustandsanzeiger 212 eine Anzeige eines Synchronisierungszustands 214 für einen Software-Thread 210 auf, wobei die Anzeige einer Kennzeichnung des Software-Thread 210 zugeordnet ist. In Schritt 304 fragt der Zeit-Profiler 218 in regelmäßigen Intervallen Werte des Programmzählers 206 für den einen oder die mehreren Prozessoren 102 ab. In Schritt 306 erkennt der Zeit-Profiler 218 einen oder mehrere Synchronisierungszustände des Software-Thread 210 auf der Grundlage des abgefragten Programmzählerwertes 206 und der aufgezeichneten Zustandsanzeige 214 und zeichnet ihn oder sie auf.
-
Die vorstehend beschriebenen Ausführungsformen sind für das Aufzeichnen der Synchronisierungszustandsangaben „Besitz” und „Leerlauf” für Threads 210 geeignet, die aktiv auf einem oder mehreren der Prozessoren 102 ausgeführt werden. Die vorstehenden Ausführungsformen beruhen auf einem Abfragen des Programmzählers 206 und der Anzeige des Thread-Synchronisierungszustandes 214 und stellen somit nur nützliche Informationen für Threads bereit, die aktiv auf einem Prozessor 102 ausgeführt werden. Threads, die nicht aktiv auf einem Prozessor 102 ausgeführt werden, wie beispielsweise Threads in einem Zustand „blockiert”, „Warten” (entweder „Warten” oder „zeitgeplantes Warten”) oder „ausführbar”, werden durch das vorstehend beschriebene Abfragen des Zeit-Profiler 218 nicht erkannt. Dementsprechend ist ein zusätzlicher Ansatz erforderlich, um Aktivitäten für Threads in diesen Zuständen aufzeichnen zu können.
-
4 veranschaulicht einen verbesserten Aufbau eines in einem Computersystem 400 realisierten Aktivitätsaufzeichnungssystems gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung. Viele der Merkmale von 4 sind identisch mit den vorstehend in Hinblick auf 2 beschriebenen und werden hier nicht wiederholt. Der Aufbau von 4 ist im Hinblick auf 2 dahingehend verbessert, dass der Aufbau von 4 zum Aufzeichnen von Synchronisierungszustandsangaben für Software-Threads 410 in der parallelen Softwareumgebung 408 geeignet ist, in der die Threads nicht aktiv auf einem Prozessor 102 des Computersystems 400 ausgeführt werden. Der in 4 abgebildete Aufbau kann den Aufbau von 2 so ergänzen, dass in gewissen Ausführungsformen die im Hinblick auf 2 beschriebenen Merkmale zusätzlich zu den nachstehend im Hinblick auf 4 beschriebenen Merkmalen realisiert werden können.
-
Der Thread-Zustandsanzeiger 412 von 4 ist in der Lage, Anzeigen eines Synchronisierungszustands von Software-Threads 410 aufzuzeichnen, in denen der Software-Thread aufhört, auf einem Prozessor 102 des Computersystems 400 ausgeführt zu werden. Somit zeichnet der Thread-Zustandsanzeiger 412 im Aufbau von 4 Anzeigen von Zuständen „blockiert”, „Warten” (entweder „Warten” oder „zeitgeplantes Warten”) und „ausführbar” in der Synchronisierungszustandsanzeige 414 auf. Ansonsten ist der Thread-Zustandsanzeiger 412 von 4 im Wesentlichen identisch mit dem vorstehend in Hinblick auf 2 beschriebenen.
-
Der Zeit-Profiler 418 von 4 ist in der Lage, einen oder mehrere Prozessoren 102 zu erkennen, die inaktiv sind. Ein Prozessor 102 wird als inaktiv bezeichnet, wenn keiner der Software-Threads 410 zur Ausführung auf dem Prozessor 102 zugeteilt ist. Der Zeit-Profiler 418 zeichnet eine solche Inaktivität auf, wie beispielsweise durch Speichern einer Anzeige, dass der Prozessor 102 zu einem bestimmten Zeitpunkt inaktiv ist. In einer alternativen Ausführungsform ist der Zeit-Profiler 418 weiterhin in der Lage, eine Zeitperiode, in der der Prozessor 102 kontinuierlich inaktiv ist, als eine inaktive Periode für den Prozessor 102 zu erkennen.
-
In dem Speicher 104 von 4 ist weiterhin ein Zuteilungsüberwacher 424 gespeichert. Der Zuteilungsüberwacher 424 ist in der Lage, zu erkennen, wenn ein Software-Thread 410 für die Ausführung auf einem Prozessor 102 zugeteilt ist. Der Zuteilungsüberwacher 424 kann als eine mit der parallelen Softwareumgebung und dem Zeit-Profiler 418 koexistierende Softwareroutine realisiert sein. Alternativ dazu kann der Zuteilungsüberwacher 424 in einem Betriebssystem oder Kernel des Computersystems 400 realisiert sein. Es ist denkbar, dass der Zuteilungsüberwacher 424 vollständig oder teilweise in Hardware realisiert sein kann.
-
In Verwendung erkennt der Zuteilungsüberwacher 424 die Zuteilung eines Software-Thread 410 zu einem Prozessor 102. Als Reaktion auf eine solche Erkennung ermittelt der Zuteilungsüberwacher 424 unter Einbeziehung des Zeit-Profiler 418, ob der Prozessor 102, dem der Thread zugeteilt ist, unmittelbar vor der Zuteilung inaktiv war. Wenn der Prozessor 102 inaktiv war, erhält der Zuteilungsüberwacher 424 einen Synchronisierungszustand des zugeteilten Thread 410, um zu ermitteln, ob sich der zugeteilte Thread 410 in einem Synchronisierungszustand befindet, der für die Inaktivität des Prozessors 102 verantwortlich sein kann. Wenn zum Beispiel die Synchronisierungszustandsanzeige 414 für den zugeteilten Thread 410 anzeigt, dass der Thread 410 bis zum Punkt der Zuteilung blockiert (in einem „blockierten” Zustand) war, kann die Blockierung für die Inaktivität des Prozessors 102 verantwortlich sein. Derartige Schlussfolgerungen können für die Zustände „blockiert”, „Warten” („Warten” und „zeitgeplantes Warten”) und „ausführbar” von Software-Threads 410 gezogen werden. Wenn in einer alternativen Ausführungsform eine kontinuierliche inaktive Periode für einen Prozessor 102 aufgezeichnet ist, kann der Synchronisierungszustands für die inaktive Periode verantwortlich sein und der inaktiven Periode zugeschrieben werden.
-
Wo der Zuteilungsüberwacher einen zugeteilten Thread 410 eines Synchronisierungszustand erkennt, der für die Inaktivität eines Prozessors 102 verantwortlich ist, erzeugt der Zuteilungsüberwacher einen Datensatz des Synchronisierungszustands des Thread, wie beispielsweise in Profiler-Datensätzen 422, und schreibt die Inaktivität dem zugeteilten Thread und dem angezeigten Synchronisierungszustand des zugeteilten Thread 410 zu. Auf diese Weise wird eine Inaktivität von Prozessoren 102, die durch bestimmte Synchronisierungszustände von Threads 410 verursacht worden sein kann, diesen Zuständen und Threads zugeschrieben.
-
Somit ist der Aufbau von 4 in der Lage, Angaben der Synchronisierungszustände „blockiert”, „Warten” und „ausführbar” für in der parallelen Softwareumgebung 408 ausgeführte Threads 410 aufzuzeichnen und solche Zustände der durch den Zeit-Profiler 418 erkannten Inaktivität von Prozessoren 102 zuzuschreiben. Bei einem Prüfen und Abfragen durch den Zeit-Profiler 418 und den Zuteilungsüberwacher 424 kann es sich um feingranulare oder atomische Prozesse handeln, die einen sehr niedrigen Verarbeitungsaufwand für das Computersystem 400 darstellen und somit einen im Wesentlichen vernachlässigbaren Einfluss auf die Synchronisierungsdynamik der parallelen Softwareumgebung 408 besitzen. Zudem ist die Verarbeitung des Zeit-Profiler 418 und des Zuteilungsüberwachers 424 im Hinblick auf die parallele Softwareumgebung 408 insofern passiv, als das Prüfen auf Inaktivität von Prozessoren 102 und das Abfragen von Synchronisierungszustandsangaben 414 keine aktive Beteiligung der parallelen Softwareumgebung 408 erfordern. Weiterhin können die Datensätze für die Zustandsangaben „blockiert”, „Warten” und „ausführbar” für die mehreren Software-Threads 410 einen Prozess des Analysierens des Synchronisierungsverhaltens der Software-Threads 410 informieren, um die Effizienz, Betriebsfähigkeit und Skalierbarkeit der parallelen Softwareumgebung 408 zu verbessern.
-
5 zeigt gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung einen Ablaufplan eines Verfahrens zum Aufzeichnen von Aktivitäten für die parallele Softwareumgebung 408, die Software-Threads 410 in dem Computersystem 400 ausführt. In Schritt 502 zeichnet der Thread-Zustandsanzeiger 412 eine Anzeige eines Synchronisierungszustands 414 eines Software-Thread 410 auf, in dem der Software-Thread 410 aufhört, in einem Prozessor 102 des Computersystems 400 ausgeführt zu werden. Die Anzeige 414 ist einer Kennzeichnung des Software-Thread 410 zugeordnet. In Schritt 504 erkennt der Zeit-Profiler 418 einen Prozessor 102 des Computersystems 400, der inaktiv ist, und zeichnet eine Anzeige auf, dass der Prozessor inaktiv ist. In Schritt 506 erkennt der Zeit-Profiler 418 eine Inaktivität des Prozessors 102. In einer bevorzugten Ausführungsform wird die Inaktivität als eine inaktive Periode erkannt, während der der Prozessor kontinuierlich inaktiv ist. In Schritt 508 erkennt der Zuteilungsüberwacher 424 die Zuteilung des Software-Thread 410 zum Prozessor 102. In Schritt 510 wird im Verfahren ermittelt, ob der Prozessor inaktiv ist. In Schritt 512 wird im Verfahren ermittelt, ob der Synchronisierungszustand des zugeteilten Verfahrens 410 für die Inaktivität verantwortlich sein kann (zum Beispiel ein Zustand „blockiert”, „Warten” oder „ausführbar”). In Schritt 514 erzeugt der Zuteilungsüberwacher 424 einen Datensatz in den Profiler-Datensätzen 422, der die Inaktivität des Prozessors 102 dem Software-Thread 410 und dem angezeigten Synchronisierungszustand für den Software-Thread 410 zuschreibt. Vorzugsweise ist der Zeit-Profiler 418 weiterhin in der Lage, die Anzeige, dass ein Prozessor 102 inaktiv ist, als Reaktion darauf wieder zurückzusetzen, dass der Zuteilungsüberwacher 424 die Zuteilung eines Thread zum Prozessor 102 erkennt.
-
Der Aufbau von 4 kann weiterhin eine Berechnungskomponente zum Berechnen eines durch den Zeit-Profiler 418 und den Zuteilungsüberwacher 424 als Profil erstellten Zeitanteils enthalten, für die sich ein Thread 410 in einem bestimmten Synchronisierungszustand befand. Zum Beispiel wird eine Berechnung eines prozentualen Anteils der Gesamtzeit, für den ein Prozessor 102 inaktiv ist, einem Thread 410 zugeschrieben, der sich in einem „blockierten” Zustand befindet. Eine solche Berechnungskomponente kann als Bestandteil im Zeit-Profiler 418 oder als Bestandteil im Zuteilungsüberwacher 424 enthalten sein. Alternativ dazu kann es sich bei einer solchen Berechnungskomponente um eine separate oder zusätzliche Software- oder Hardwarekomponente handeln.
-
In einer bevorzugten Ausführungsform kann der Zeit-Profiler 418 von 4 weiterhin die Funktionen des Zeit-Profiler zur regelmäßigen Abfrage des Programmzählers von 2 enthalten. Das durch einen solchen Zeit-Profiler 418 durchgeführte Abfragen des Programmzählers kann verwendet werden, um eine inaktive Periode für einen inaktiven Prozessor 102 zu messen, indem eine Anzahl regelmäßiger Intervalle gezählt wird, während derer der Prozessor 102 inaktiv ist. Weiterhin kann die inaktive Periode durch den Zeit-Profiler 418 als eine Zahl regelmäßiger Intervalle zusammen mit der Anzeige aufgezeichnet werden, dass der Prozessor 102 inaktiv ist.
-
In einer bevorzugten Ausführungsform zeichnet der Thread-Zustandsanzeiger 412 zusätzlich eine Kennzeichnung der gemeinsam genutzten Ressource 416 auf, auf die der Software-Thread 410 Zugriff sucht, wie vorstehend in Hinblick auf 2 beschrieben wurde. Der Aufbau von 4 kann weiterhin den vorstehend in Hinblick auf 2 beschriebenen Auflöser zum Durchführen einer Auflösung symbolischer Namen enthalten.
-
Insofern als Ausführungsformen der beschriebenen Erfindung zumindest in Teilen mit einer softwaregesteuerten programmierbaren Verarbeitungseinheit wie beispielsweise einem Mikroprozessor, digitalen Signalprozessor oder einer anderen Verarbeitungseinheit, einer anderen Datenverarbeitungsvorrichtung oder einem anderen Datenverarbeitungssystem ausführbar sind, ist ersichtlich, dass ein Computerprogramm zum Konfigurieren einer programmierbaren Einheit, einer programmierbaren Vorrichtung oder eines programmierbaren Systems zum Ausführen der vorstehend beschriebenen Verfahren als ein Aspekt der vorliegenden Erfindung vorgesehen ist. Das Computerprogramm kann zum Beispiel als Quellcode ausgeführt sein, zur Ausführung auf einer Verarbeitungseinheit, einer Verarbeitungsvorrichtung oder einem Verarbeitungssystem eine Kompilierung durchlaufen oder als Objektcode ausgeführt sein.
-
Das Computerprogramm wird geeigneterweise auf einem Trägermedium in maschinen- oder einheitenlesbarer Form zum Beispiel in Halbleiterspeicher, Magnetspeicher wie Platte oder Band, optisch oder magneto-optisch lesbarem Speicher wie beispielsweise einer Compact Disk oder einer DVD (digital versatile disk) usw. gespeichert, und die Verarbeitungseinheit nutzt das Programm oder einen Teil davon, um es für den Betrieb zu einzurichten. Das Computerprogramm kann von einer entfernt angeordneten Quelle geliefert werden, die in einem Datenübertragungsmedium wie beispielsweise einem elektronischen Signal, einem Funkträgersignal oder einem optischen Trägersignal ausgeführt ist. Solche Trägermedien sind ebenfalls als Aspekte der vorliegenden Erfindung vorgesehen.
-
Es ist für den Fachmann erkennbar, dass, obwohl die vorliegende Erfindung in Zusammenhang mit den oben beschriebenen beispielhaften Ausführungsformen beschrieben wurde, die Erfindung nicht darauf beschränkt ist und dass es viele mögliche Variationen und Veränderungen gibt, die unter den Umfang der Erfindung fallen.
-
Der Umfang der vorliegenden Erfindung umfasst sämtliche neuartigen Merkmale oder Kombinationen von Merkmalen, die hierin offenbart wurden. Der Anmelder weist hiermit darauf hin, dass neue Ansprüche zu solchen Merkmalen oder Kombinationen von Merkmalen während der Verfolgung dieser Anmeldung oder weiterer hiervon abgeleiteter Anmeldungen formuliert werden können. Insbesondere können bezüglich der angehängten Ansprüche Merkmale von Unteransprüchen mit denen der unabhängigen Ansprüche kombiniert werden und Merkmale jeweiliger unabhängiger Ansprüche in jeder geeigneten Weise und nicht nur in den besonderen in den Ansprüchen aufgezählten Kombinationen kombiniert werden.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Nicht-Patentliteratur
-
- „Java Lock Monitor” (JLM) (siehe perfinsp.sourceforge.net/jlm.html) [0005]
- „IBM Monitoring and Diagnostic Tools for Java – Health Centre” (siehe publib.boulder.ibm.com/infocenter/hctool/v1r0/index.jsp) [0005]
- perfinsp.sourceforge.net/tprof.html [0036]