DE112011101759B4 - Sampling von Leerlauftransitionen - Google Patents

Sampling von Leerlauftransitionen Download PDF

Info

Publication number
DE112011101759B4
DE112011101759B4 DE112011101759.6T DE112011101759T DE112011101759B4 DE 112011101759 B4 DE112011101759 B4 DE 112011101759B4 DE 112011101759 T DE112011101759 T DE 112011101759T DE 112011101759 B4 DE112011101759 B4 DE 112011101759B4
Authority
DE
Germany
Prior art keywords
thread
processor
idle
scheduled
call stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE112011101759.6T
Other languages
English (en)
Other versions
DE112011101759T5 (de
Inventor
Kean Kuiper
Enio Manuel Pineda
Frank Eliot Levine
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112011101759T5 publication Critical patent/DE112011101759T5/de
Application granted granted Critical
Publication of DE112011101759B4 publication Critical patent/DE112011101759B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Ein Prozess erstellt ein Muster auf der Grundlage eines Ereignisses. Der Prozess erkennt, mithilfe eines Zuteilungsmonitors, einen nächsten zugeteilten überwachten Thread, der durch einen aktuellen Prozessor zugeteilt wird. Der Prozess stellt eine Prozessoraffinität des nächsten zugeteilten überwachten Threads so ein, dass der nächste zugeteilte überwachte Thread nur auf dem aktuellen Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können. Der Prozess ruft außerdem, mithilfe eines Threads, von dem ein Muster genommen wurde, der auf dem aktuellen Prozessor läuft, eine Aufrufliste eines nächsten zugeteilten überwachten Threads ab, nachdem die Prozessoraffinität des nächsten zugeteilten überwachten Threads auf den Prozessor eingestellt wurde. Der Prozess stellt die Prozessoraffinität des nächsten zugeteilten überwachten Threads wieder her, nachdem die Aufrufliste des nächsten zugeteilten überwachten Threads abgerufen wurde.

Description

  • Technisches Fachgebiet
  • Die Erfindung betrifft allgemein eine Rechenumgebung. Die Offenbarung betrifft insbesondere Sampling-Technologie (Mustererstellungstechnologie).
  • Hintergrund
  • Bei Anwendungs-Profiling-Werkzeugen wird entweder Zeit-basierte oder Hardwareereignis-basierte Sampling-Technologie verwendet, um die spezifische Nutzung von Betriebsmitteln festzustellen. Ein aktueller Ansatz besteht darin, periodisch einen Interrupt zu erzeugen, um ein Sample zu nehmen. Während des Interrupts werden Sample-Daten gesammelt und aufgezeichnet. Beispiele für die Sample-Daten sind der unterbrochene Prozess/Thread, die gerade ausgeführte Instruktion oder optional die Datenadresse, auf die zur Zeit der Sample zugegriffen wird. Zu einem späteren Zeitpunkt werden die gesammelten Daten aggregiert, und es werden Berichte erstellt, die die Sample-Verteilung nach Adresse, Symbol, Prozess usw. darstellen. Verschiedene Werkzeuge basieren auf dieser Technologie. Der vollständige Ausführungskontext der Sample wird üblicherweise nicht aufgezeichnet und steht nicht in Berichten zur Verfügung.
  • Es wurden Versuche unternommen, diese Technologie durch Erfassen von Call-Stacks zur Zeit des Samplens zu verbessern. Mithilfe des vorhandenen Werkzeugsatzes kann entweder versucht werden, den Call-Stack direkt zu durchlaufen oder in einem separaten (Sampler-)Thread Funktionen aufzurufen, um den Call-Stack des unterbrochenen Threads zu erhalten. Der Versuch, den Call-Stack auf der Interrupt-Ebene zu durchlaufen, ist nicht ideal, da einige Anwendungen Listen haben können, die ausgelagert wurden. Außerdem nimmt zum Durchlaufen von Call-Stacks bestimmter Code üblicherweise Speicherzuweisungen vor, die auf der Interrupt-Ebene nicht zulässig sind. Dadurch kann ein Sampling-Thread im Benutzermodus dazu verwendet werden, auf Anforderung die Call-Stacks zu durchlaufen. Bei Mehrprozessorsystemen kann die Anforderung, dass ein separater Thread den Call-Stack des unterbrochenen Threads erfassen soll, es dem unterbrochenen Thread ermöglichen, zu einem anderen Prozessor zu migrieren und weiter fortzuschreiten, d. h. weiter ausgeführt zu werden, während der Call-Stack erfasst wird. Der erfasste Call-Stack spiegelt dann nicht den Status des Threads zum Zeitpunkt seiner Unterbrechung wider.
  • Kurzdarstellung
  • Gemäß einem Aspekt der Erfindung wird ein System zum Anwendungs-Profiling von auf mehreren Prozessoren ablaufenden Threads bereitgestellt. Das System enthält einen Prozessor, der auf der Grundlage eines Ereignisses ein Sample erstellt. Das System enthält weiter ein Betriebssystem, das (i) mithilfe eines Zuteilungsmonitors bzw. eines Dispatch-Monitors einen nächsten zugeteilten überwachten Thread erkennt, der einen aktuellen Prozessor zugeteilt wird, und das (ii) die Prozessoraffinität des nächsten zugeteilten überwachten from_Idle-Threads mittels eines Schedulers so einstellt, dass der nächste zugeteilte überwachte from_Idle-Thread nur auf dem aktuellen Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können.
  • Außerdem enthält das System einen Profiler, der angepasst ist, dass er die Prozessoraffinität des nächsten zuzuteilenden überwachten to_Idle-Thread festgelegt, so dass der nächste zuzuteilende überwachte to_Idle-Thread nur auf dem Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können.
  • Außerdem ist der Profiler angepasst, dass er mithilfe eines Sampler-Threads, der so konfiguriert ist, dass er nur auf dem aktuellen Prozessor läuft, einen Call-Stack eines nächsten zugeteilten überwachten Threads abruft, nachdem die Prozessoraffinität des nächsten zugeteilten überwachten Threads auf den aktuellen Prozessor eingestellt wurde, so dass ein Kontext des nächsten zuzuteilenden Thread festgestellt wird, (ii) die Prozessoraffinität des nächsten zugeteilten überwachten Threads wieder herstellt, nachdem der Call-Stack des nächsten zugeteilten, überwachten Threads abgerufen wurde, und (iii) der Call-Stack für den nächsten zugeteilten überwachten Thread aufzeichnet.
  • Kurze Beschreibung der Zeichnungen
  • Im Folgenden werden Ausführungsformen der Erfindung ausschließlich beispielhaft beschrieben, und zwar unter Bezugnahme auf die begleitenden Zeichnungen, die Folgendes zeigen:
  • 1 veranschaulicht ein Sampling-System gemäß einer Ausführungsform der vorliegenden Erfindung, das Sample von Leerlauftransitionen nimmt.
  • 2A veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Interrupt-Handler für einen to_idle_thread (letzter Thread vor dem Leerlauf) verwendet werden kann.
  • 2B veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Interrupt-Handler für einen from_idle_thread (erster Thread nach dem Leerlauf) verwendet werden kann.
  • 3A veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Dispatch-Monitoring-Code in dem Scheduler für einen to_idle_thread verwendet werden kann.
  • 3B veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Dispatch-Monitoring-Code in dem Scheduler für einen from_idle_thread verwendet werden kann.
  • 4 veranschaulicht einen Prozess zur Benachrichtigung des Profilers gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 5 veranschaulicht gemäß einer Ausführungsform der vorliegenden Erfindung einen Prozess für das Interrupt-Backend, das bei dem Prozessblock in eine Warteschlange „gequeued” ist.
  • 6 veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Profiler ausgeführt wird, nachdem dieser als Folge des Prozessblocks aktiviert wurde.
  • 7 veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, bei dem der Profiler das Betriebssystem darüber informiert, dass das Sample fertig gestellt wurde.
  • 8A veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der für das Sampling von Leerlauftransitionen für einen from_idle_thread verwendet werden kann.
  • 8B veranschaulicht einen Prozess gemäß einer Ausführungsform der vorliegenden Erfindung, der für das Sampling von Leerlauftransitionen für einen to_idle_thread verwendet werden kann.
  • 9 veranschaulicht ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung, das Sample von Leerlauftransitionen nimmt.
  • Ausführliche Beschreibung
  • Ein Verfahren und System verwenden Sampling-Technologie, um festzustellen, warum ein oder mehrere Prozessoren nicht ausgelastet sind. Es kann sehr schwierig sein, festzustellen, warum eine auf dem Prozessor oder den Prozessoren laufende Anwendung nicht skaliert. Bei einigen Umgebungen, besonders denjenigen, die Transaktionsverarbeitung unterstützen, ist es wichtig, die maximale Transaktionsrate festzustellen und das System dazu zu veranlassen, alle Verarbeitungsbetriebsmittel in vollem Umfang zu nutzen. Wenn die maximale Transaktionsrate erreicht wird, aber nicht alle Prozessoren ausgelastet sind, liegt eine Art von Engpass vor, der die vollständige Auslastung verhindert. Durch Feststellen des Kontextes für den letzten Thread, der ausgeführt wurde, bevor ein Prozessor in den Leerlauf (idle) ging, d. h. der to_idle_thread und/oder des Kontextes für den ersten Thread, der ausgeführt wird, sobald der Prozessor beschäftigt ist, d. h. der from_idle_thread, erhält man möglicherweise Informationen, die dazu beitragen, die Ursache des Engpasses festzustellen.
  • Ein Ansatz besteht darin, alle Call-Stacks für diejenigen Threads zu erfassen, die zu einem Engpass beigetragen haben könnten. Das heißt zum Beispiel, der Sampling-Code könnte einfach Call-Stacks nur für diejenigen Threads beschaffen, die kürzlich auf dem Prozessor gelaufen sind, der sich zur Zeit des Sampling im Leerlauf befindet. Dies beinhaltet, zu verfolgen, welcher Thread auf welchem Prozessor gelaufen ist, um die Call-Stacks für die richtigen Threads zu erfassen. Diese Threads können jedoch migrieren und auf anderen Prozessoren ausgeführt werden, während Call-Stacks erfasst werden.
  • Alle Prozessoren beschäftigt zu halten, mit Ausnahme desjenigen, dessen Call-Stack erfasst wird, kann möglicherweise eine Thread-Migration verhindern. Dies könnte dadurch erreicht werden, dass man Sampler-Threads auf diesen Prozessoren eine Überwachung ausführen lässt, bis der Call-Stack für den interessierenden Thread vorliegt, aber dies könnte die gesamte Anwendungsleistung beeinträchtigen.
  • Indem stattdessen der interessierende Thread an der Migration zu einem anderen Prozessor gehindert wird, was bei einer Ausführungsform durchgeführt werden kann, indem seine Prozessoraffinität so eingestellt wird, dass er nur auf einem Prozessor laufen kann, müssen die anderen Prozessoren keine Überwachungsvorgänge ausführen, so dass die anderen Prozessoren frei für das weitere Ausführen der Anwendung sind. Durch das Verhindern der Thread-Migration tritt daher nur eine minimale Verschlechterung der Anwendungsleistung auf. Anstatt die Leistung der Anwendung, deren Profil erstellt wird, stark zu beeinträchtigen, indem alle Sampler-Threads aktiviert werden, d. h. einer pro Prozessor, und Überwachungsvorgänge ausführen, bis die Call-Stacks abgerufen sind, könnten ein Verfahren, System und Computerprogrammprodukt die Prozessoraffinität so einstellen, dass Thread-Migration bei minimaler Beeinträchtigung der Leistung der Anwendung, deren Profil erstellt wird, verhindert wird und außerdem das Sampling von Leerlauftransitionen ermöglicht wird. Bei einer Ausführungsform wird für bereits angesehene Call-Stacks lediglich ein Zählwert des Vorkommens (occurrence count) inkrementiert.
  • To_idle-Verarbeitung und/oder from_idle-Verarbeitung können verwendet werden, um die Prozessoraffinität so einzustellen, dass Thread-Migration verhindert wird. Es wird ein Sampling-Ansatz verwendet.
  • 1 veranschaulicht ein Sampling-System 100 gemäß einer Ausführungsform der vorliegenden Erfindung, das Sample von Leerlauftransitionen nimmt. Das Sampling-System 100 enthält eine Anwendung 102, die mit einem Profiler 104 interagiert, der ein Profil der Anwendung 102 erstellt. Der Profiler 104 interagiert mit einem Betriebssystem 106. Der Profiler 104 trägt dazu bei, festzustellen, warum ein Prozessor nicht ausgelastet ist, d. h., wodurch verursacht wird, dass ein Prozessor im Leerlauf ist, anstelle nützliche Arbeit zu verrichten. Die Verarbeitung basiert auf Sampling, wenn die Prozessoren im Leerlauf sind. Da Call-Stacks zur Zeit des Sampling erfasst werden, wird der Code, der potenziell zu dem Leerlaufzustand beiträgt, genau festgestellt. Die Position des Codes sowie die Aufrufsequenz, die zum Vorhandensein des Codes an dieser Stelle führte, werden ermittelt.
  • Gleichzeitig mit dem Sampling überwacht der Scheduler 108 Thread-Zuteilungen mithilfe von Zuteilungsüberwachungscode (dispatch monitoring code). Dieser Code ist entweder Teil des Betriebssystems oder wird mithilfe eines Device-Treibers oder einer Kernel-Erweiterung hinzugefügt. Es können auch Daten hinsichtlich des to_thread und/oder from_thread gespeichert werden. Asynchron zueinander laufen einige Vorgänge ab: Der Dispatch-Monitoring-Code überwacht Thread-Zuteilungen. Weiterhin werden von den Prozessoren mit konstanter Häufigkeit Samples erstellt, d. h. Zeit-basiert oder bei jedem n-ten Auftreten eines Ereignisses, d. h. Ereignis-basiert. Außerdem „lauschen” Sampler-Threads auf Befehle, die sie dazu veranlassen würden, den Call-Stack eines interessierenden Threads abzurufen, was von dem Profiler 104 ausgeführt wird. Ein Sampler-Thread ist ein Profiler-Thread. Es können zahlreiche Sampler-Threads verwendet werden, da eine Mehrzahl von Prozessoren verwendet werden kann. Jeder Sampler-Thread hat eine Affinität zu einem einzigen Prozessor. Sampler-Threads können Threads mit einer sehr hohen Priorität sein, so dass sie sofort ausgeführt werden, wenn sie das Signal erhalten, Arbeit zu verrichten, wie beispielsweise Call-Stack eines Ziel-Threads abzurufen. Der Ziel-Thread ist der Thread, dessen Call-Stack abgerufen werden soll. Überdies ist ein Ziel-Prozessor der Prozessor, auf dem der Ziel-Thread ausgeführt wurde und auf dem die Affinität so eingestellt ist, dass der Ziel-Thread auf diesem Prozessor verbleibt, bis sein Call-Stack erfasst wurde.
  • Sobald als Ergebnis des Samplings entweder des to_idle oder des from_idle eine Feststellung getroffen wird, ist der Call-Stack eines Ziel-Threads abzurufen. Es wird verhindert, dass der Ziel-Thread während dieser Zeit in irgendeiner Weise fortschreitet, es sei denn, ein Fortschreiten wäre für den Abruf des Call-Stack erforderlich. Mit anderen Worten wird der Ziel-Thread an seinem Platz gehalten, bis der Call-Stack erfasst ist. Danach kann der Ziel-Thread fortgesetzt werden. Da Call-Stacks von Profiler-Sampler-Threads erfasst werden, könnte der Ziel-Thread potenziell auf einem anderen verfügbaren Prozessor zu laufen beginnen. Zu dem Zeitpunkt, an dem der Sampler-Thread mit dem Erfassen des Call-Stack beginnt, befindet sich der Ziel-Thread möglicherweise nicht mehr an dem Punkt, an dem ein Sample erstellt wurde, und der Call-Stack würde nicht genau widerspiegeln, wo sich der Ziel-Thread zur Zeit des Sampling befand.
  • Anstatt die Anwendungsleistung durch „Wegboxen” des Ziel-Threads von anderen Prozessoren als dem Ziel-Prozessor deutlich zu behindern (d. h., alle anderen Prozessoren mit nutzloser Arbeit zu beschäftigen, um sie Überwachungsvorgänge ausführen zu lassen, so dass sie für eine Ausführung des Ziel-Threads nicht zur Verfügung stehen), wird die Gruppe der Prozessoren, auf denen der Ziel-Thread laufen könnte, auf den Ziel-Prozessor beschränkt. Mit anderen Worten führen die verbleibenden Prozessoren keine Überwachungsvorgänge aus und können weiterhin echte Arbeit verrichten. Nur der Ziel-Prozessor ist betroffen, während der Call-Stack des Ziel-Threads abgerufen wird. Sobald der Call-Stack des Ziel-Threads abgerufen wurde, kann der Ziel-Thread wieder auf jedem verfügbaren Prozessor laufen. Die Prozessoraffinität ist so eingestellt, dass der Ziel-Thread nur auf dem einen Prozessor laufen kann, zu dem er eine Affinität hat.
  • Das Sampling-System 100 kann über eine Mehrzahl von Prozessoren verfügen. Beispielsweise kann das Sampling-System 100 über einen ersten Prozessor 112, einen zweiten Prozessor 114, ..., und einen n-ten Prozessor 116 verfügen. Zu einer gegebenen Zeit kann auf jedem Prozessor nur ein Thread laufen. Dieser Thread kann jedoch potenziell auf einem anderen Prozessor und zu einer anderen Zeit laufen. Bei dem Sampling-System 100 erzeugen ein oder mehrere Prozessoren entweder Zeit- oder Ereignis-basiert Interrupts. Ein Interrupt kann ein Sampling einleiten. Folglich kann jeder der Prozessoren unabhängig von dem Status jedes anderen Prozessors einen Interrupt erzeugen, z. B. unabhängig davon, ob sich dieser im Leerlauf befindet oder nicht. Der Interrupt für jeden Prozessor wird durch Hardware erzeugt und durch einen Interrupt-Handler 110 gehandhabt, der feststellt, ob der Prozessor, auf dem der Interrupt auftrat, sich im Leerlauf befindet, d. h., ob auf diesem speziellen Prozessor kein Thread ausgeführt wird, oder ob er sich nicht im Leerlauf befindet. Der Interrupt-Handler 110 leitet das Erfassen von Call-Stacks ein. Darüber hinaus kann der Interrupt-Handler einen Profiler-Sampler-Thread benachrichtigen oder diesem ein Signal senden. Bei einer Ausführungsform und wenn der Interrupt-Handler 110 feststellt, dass ein bestimmter Prozessor sich im Leerlauf befindet, kann der Interrupt-Handler 110 einem Scheduler 108 ein Flag wie beispielsweise ein Flag „Zeitverzögerte Verarbeitung” senden, der dann das Ausführen eines Sampler-Threads auf diesem speziellen Prozessor einplanen kann oder auch nicht, um ein Sample des Ziel-Threads zu nehmen. Um während des Sampling eine Thread-Migration zu verhindern, kann die Prozessoraffinität eines Threads zu einem bestimmten Prozessor festgelegt werden. Für einen from_idle-Thread legt der Scheduler 108 die Prozessoraffinität fest. Für einen to_idle-Thread können der Interrupt-Handler 110 oder der Profiler 104 die Prozessoraffinität festlegen.
  • Während der from_idle-Verarbeitung kann eine Benachrichtigung von dem Scheduler 108 an den Profiler 104 gesendet werden. Der erste interessierende überwachte Thread, der aktiviert und ausgeführt wird, nachdem ein Prozessor sich im Leerlauf befindet, ist wahrscheinlich der Thread, der den Engpass verursacht. Während das System läuft, wartet der Dispatch-Monitoring-Code darauf, mitgeteilt zu bekommen, dass er den nächsten interessierenden Thread speichern soll, der ausgeführt wird, z. B. indem er das Setzen des Flag „Zeitverzögerte Verarbeitung” beobachtet. Der Sampling-Code teilt dem Dispatch-Monitoring-Code dies mit, indem er nach einem Sampling, bei der sich der Prozessor im Leerlauf befindet, ein Flag „Zeitverzögerte Verarbeitung” sendet/setzt. Der Dispatch-Monitoring-Code speichert den ersten interessierenden/überwachten Thread, der läuft, nachdem bei einem vorhergehenden Sampling entdeckt wurde, dass der Prozessor sich im Leerlauf befindet. Zu derselben Zeit, in der Samples anfallen, wird eine Feststellung getroffen, ob der Prozessor sich im Leerlauf befindet oder nicht. Wenn der Prozessor beschäftigt ist, wird nichts unternommen. Wenn der Prozessor sich im Leerlauf befindet, wird das Flag „Zeitverzögerte Bearbeitung” gesetzt, damit der Dispatch-Monitoring-Code mit der Überwachung von Thread-Zuteilungen beginnt und den nächsten interessierenden/überwachten Thread speichert, der auf dem Prozessor eingeplant werden soll. Der Dispatch-Monitoring-Code entfernt anschließend das Flag „Zeitverzögerte Bearbeitung”. Das Sample wird dann fertig gestellt.
  • Dieselbe Verarbeitung kann auf mehr als einem Prozessor gleichzeitig stattfinden. Wenn sich beispielsweise zwei Prozessoren im Leerlauf befinden und zufällig ungefähr zu derselben Zeit interessierende Threads zuteilen, dann können zwei Sampler-Threads zu derselben Zeit Call-Stacks abrufen.
  • Überdies kann eine to_idle-Benachrichtigung von dem Interrupt-Handler 110 an den Profiler 104 gesendet werden. Der letzte interessierende/überwachte Thread, der auf einem Prozessor läuft, bevor dieser in den Leerlauf geht, ist wahrscheinlich von einem Konflikt einiger Betriebsmittel betroffen. Beispielsweise schreitet der Thread möglicherweise nicht fort, weil er auf ein Betriebsmittel wartet, hinsichtlich dessen ein Konflikt besteht. Nach einem to_idle thread stehen keine anderen Threads zur Ausführung zur Verfügung. Während das System läuft, merkt sich der Dispatch-Monitoring-Code den letzten interessierenden Thread, der auf jedem Prozessor ausgeführt wurde. Da er sich den Thread, den er sich jetzt merkt, vorher auf einem anderen Prozessor gemerkt haben könnte, wird dieser von der Merkliste des anderen Prozessors entfernt. Gleichzeitig fallen periodisch Samples an, die entweder Zeit- oder Ereignis-basiert sind. Bei jedem Sample wird eine Feststellung darüber getroffen, ob der Prozessor sich im Leerlauf befindet oder nicht. Wenn der Prozessor beschäftigt ist, wird nichts unternommen. Wenn der Prozessor sich im Leerlauf befindet, wird eine Feststellung darüber getroffen, ob ein interessierender überwachter Thread zuletzt auf dem Prozessor gelaufen ist. Wenn ein interessierender Thread zuletzt auf dem Prozessor gelaufen ist, dann wird die Prozessoraffinität des Threads auf den aktuellen Prozessor eingestellt.
  • Bei einer Ausführungsform wird nur der from_idle_thread verwendet. Bei einer alternativen Ausführungsform wird nur der to_idle_thread verwendet. Bei noch einer anderen alternativen Ausführungsform werden sowohl der from_idle_thread als auch der to_idle_thread verwendet.
  • Bei einer anderen Ausführungsform kann eine Komponente wie beispielsweise ein Dispatch-Monitor in Verbindung mit dem Scheduler 108 verwendet werden. Der Dispatch-Monitor kann Teil des Betriebssystems 106 sein oder kann als Teil einer Kernel-Erweiterung oder eines Device-Treibers hinzugefügt werden. Bei einer anderen Ausführungsform kann eine Komponente wie beispielsweise ein Interrupt-Backend-Worker, Offlevel-Processing-Worker, Interrupt-Backend-Worker oder Ähnliches als Teil einer Kernel-Erweiterung oder eines Device-Treibers hinzugefügt werden. Die Komponente wird benötigt, da die Gruppe von Aktionen, die auf Interrupt-Ebene ausgeführt werden kann, begrenzt ist, und ein Teil der Arbeit bis zu einem späteren Zeitpunkt verzögert werden muss, wenn der Interrupt-Handler beendet ist.
  • Der Profiler 104 kann den Call-Stack, d. h. den Ausführungskontext, abrufen. Der Profiler 104 kann weiter die Prozessoraffinität wiederherstellen.
  • 2A veranschaulicht einen Prozess 200 gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Interrupt-Handler 110 für einen to_idle_thread verwendet werden kann. Bei einem Prozessblock 202 stellt der Prozess 200 eine ID eines unterbrochenen Prozesses („PID”) und/oder eines unterbrochenen Threads („TID”) fest. Bei einem Entscheidungsblock 204 stellt der Prozess 200 weiter fest, ob der Mikroprozessor sich im Leerlauf befindet. Wenn der Mikroprozessor sich nicht im Leerlauf befindet, schreitet der Prozess 200 zu einem Prozessblock 210 fort, um den unterbrochenen Thread fortzusetzen. Wenn sich alternativ der Mikroprozessor im Leerlauf befindet, schreitet der Prozess 200 zu einem Entscheidungsblock 206 fort, um festzustellen, ob eine gespeicherte to_idle-PID, die von dem Dispatch-Monitoring-Code gespeichert wurde, von Interesse ist. Wenn die gespeicherte to_idle-PID nicht von Interesse ist, schreitet der Prozess 200 zu dem Prozessblock 210 fort, um in dem unterbrochenen Thread fortzufahren. Wenn alternativ die gespeicherte to_idle-PID von Interesse ist, schreitet der Prozess 200 zu einem Prozessblock 208 fort, um den Profiler zu benachrichtigen. Der Prozess 200 schreitet dann zu einem Prozessblock 210 fort, um den unterbrochenen Thread fortzusetzen.
  • 2B veranschaulicht einen Prozess 250 gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Interrupt-Handler 110 für einen from_idle_thread verwendet werden kann. Bei einem Prozessblock 252 stellt der Prozess 250 eine ID eines unterbrochenen Prozesses (PID = interrupted process ID) oder eine ID eines unterbrochene Threads (TID = unterbrocher Thread) fest. Bei einem Entscheidungsblock 254 stellt der Prozess 250 weiter fest, ob der Mikroprozessor sich im Leerlauf befindet. Wenn der Mikroprozessor sich nicht im Leerlauf befindet, schreitet der Prozess 250 zu einem Prozessblock 258 fort, um den unterbrochenen Thread fortzusetzen. Wenn sich alternativ der Mikroprozessor im Leerlauf befindet, schreitet der Prozess 250 zu einem Entscheidungsblock 255 fort, um festzustellen, ob das Flag „Zeitverzögerte Bearbeitung” schon gesetzt wurde. Wenn das Flag „Zeitverzögerte Bearbeitung” schon gesetzt wurde, schreitet der Prozess 250 zu dem Prozessblock 258 fort, um den unterbrochenen Thread fortzusetzen. Wenn das Flag „Zeitverzögerte Bearbeitung” noch nicht gesetzt wurde, schreitet der Prozess 250 zu einem Prozessblock 256 fort, um ein Flag „Zeitverzögerte Bearbeitung” für den Scheduler 108 zu setzen. Der Prozess 250 schreitet dann zu einem Prozessblock 258 fort, um den unterbrochenen Thread fortzusetzen.
  • 3A veranschaulicht einen Prozess 300 gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Scheduler 108 für einen to_idle_thread verwendet werden kann. Bei einem Entscheidungsblock 302 stellt der Prozess 300 fest, ob ein ausgehender Thread existiert, der von Interesse ist. Wenn kein ausgehender Thread existiert, der von Interesse ist, schreitet der Prozess 300 zu einem Prozessblock 306 fort, um den Thread-Wechsel (thread switch) fortzusetzen. Wenn ein ausgehender Thread existiert, der von Interesse ist, schreitet der Prozess 300 zu einem Prozessblock 304 fort, um die ausgehende PID und/oder TID zu speichern. Der Prozess 300 schreitet dann zu einem Prozessblock 305 fort, um die ausgehende PID/TID aus der gespeicherten PID/TID-Liste des anderen Prozessors zu entfernen. Der Prozess 300 schreitet dann zu dem Prozessblock 306 fort, um den Thread-Wechsel fortzusetzen.
  • 3B veranschaulicht einen Prozess 350 gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Scheduler 108 für einen from_idle_thread verwendet werden kann. Bei einem Entscheidungsblock 352 stellt der Prozess 350 fest, ob das Flag „Zeitverzögerte Verarbeitung” gesetzt wurde. Wenn das Flag „Zeitverzögerte Bearbeitung” nicht gesetzt wurde, schreitet der Prozess 350 zu einem Prozessblock 360 fort, um den Thread-Wechsel fortzusetzen. Wenn alternativ das Flag „Zeitverzögerte Bearbeitung” gesetzt wurde, schreitet der Prozess 350 zu einem Entscheidungsblock 354 fort, um festzustellen, ob ein eingehender Thread existiert, der von Interesse ist. Wenn kein eingehender Thread existiert, der von Interesse ist, schreitet der Prozess 350 zu einem Prozessblock 360 fort, um den Thread-Wechsel fortzusetzen. Wenn alternativ ein eingehender Thread existiert, der von Interesse ist, schreitet der Prozess 350 zu einem Prozessblock 356 fort, um das Flag „Zeitverzögerte Bearbeitung” zurückzusetzen. Der Prozess 350 schreitet dann zu einem Prozessblock 358 fort, um den Profiler 104 zu benachrichtigen. Der Prozess 350 schreitet dann weiter zu dem Prozessblock 350 fort, um den Thread-Wechsel fortzusetzen.
  • 4 veranschaulicht einen Prozess 400 zur Benachrichtigung des Profilers 104 gemäß einer Ausführungsform der vorliegenden Erfindung. Bei einem Entscheidungsblock 402 stellt der Prozess 400 fest, ob ein Profiler zu benachrichtigen ist. Wenn kein Profiler zu benachrichtigen ist, schreitet der Prozess 400 zu einem Abschlussblock 408 fort. Wenn alternativ ein Profiler zu benachrichtigen ist, schreitet der Prozess 400 zu einem Prozessblock 404 fort, um die Benachrichtigungsdaten zu sichern und/oder zu speichern. Der Prozess 400 schreitet zu einem Prozessblock 406 fort, um das Interrupt-Backend in eine Warteschlange einzureihen. Als Folge davon wird eine Arbeitsaufgabe durch das Betriebssystem 106 in eine Warteschlange eingereiht. Eine der Informationen in dieser Arbeitsaufgabe ist die Adresse der Worker-Funktion (Arbeitsfunktion), die auszuführen ist, wenn das Interrupt-Backend durch das Betriebssystem 106 aus der Warteschlange entfernt wird. Der Prozess 400 schreitet dann zu einem Abschlussblock 408 fort.
  • 5 veranschaulicht einen Prozess 500 für das Verhalten des Interrupt-Backend in dem Prozessblock 406 gemäß einer Ausführungsform der vorliegenden Erfindung. Bei einem Prozessblock 502 zeigt der Prozess 500 ein ausstehendes Sample an. Weiter schreitet der Prozess 500 dann zu einem Prozessblock 504 fort, um die Prozessoraffinität des Ziel-Threads auf den aktuellen Prozessor einzustellen. Darüber hinaus schreitet der Prozess 500 dann zu einem Prozessblock 506 fort, um den Profiler zu aktivieren.
  • 6 veranschaulicht einen Prozess 600 gemäß einer Ausführungsform der vorliegenden Erfindung, der von dem Profiler ausgeführt wird, nachdem diesem als Folge des Prozessblocks 506 entweder von dem Interrupt-Handler oder von dem Scheduler ein Signal gesendet wurde. Bei einem Prozessblock 602 lässt der Prozess 600 den Profiler auf ein Ereignis oder Signal warten. Das Ereignis oder Signal kommt von dem Interrupt-Handler 110, wenn der Thread ein to_idle-Thread ist. Das Ereignis oder Signal kommt von dem Scheduler 108, wenn der Thread ein from_idle-Thread ist. Bei einem Prozessblock 604 empfängt der Prozess 600 weiter das Signal von dem Betriebssystem 106. Bei einem Prozessblock 606 liest der Prozess 600 überdies die Sample-Daten, die Informationen über den Ziel-Thread enthalten. Bei einem Prozessblock 608 fordert der Prozess 600 den Call-Stack für den Ziel-Thread an. Bei einem Prozessblock 610 stellt der Prozess 600 weiter die Prozessoraffinität des Ziel-Threads wieder her. Bei einem Prozessblock 612 verarbeitet der Prozess 600 den zurückgegebenen Call-Stack. Bei einer Ausführungsform kann das Verarbeiten des zurückgegebenen Call-Stacks das Speichern des zurückgegebenen Call-Stacks in einer Baumstruktur beinhalten. Weiter können ein to_idle-Zählwert und/oder ein from_idle-Zählwert inkrementiert werden. Der to_idle-Zählwert oder der from_idle-Zählwert zeigen an, wie viele Male der Call-Stack, d. h. die Aufrufsequenz, an dem Blattknoten endete. Bei einem Prozessblock 614 informiert der Prozess 600 das Betriebssystem 106 darüber, dass das Sample fertig gestellt wurde. Der Prozess 600 kehrt dann zu dem Prozessblock 602 zurück, um auf ein Ereignis oder Signal zu warten.
  • 7 veranschaulicht einen Prozess 700 gemäß einer Ausführungsform der vorliegenden Erfindung, bei dem das Betriebssystem 106 darüber informiert wird, dass das Sample fertig gestellt wurde. Bei einem Prozessblock 702 wurde ein Sample fertig gestellt. Bei einem Prozessblock 704 zeigt der Prozess 700 weiter an, dass keine ausstehenden Samples existieren. Auf einem Prozessor mit einem ausstehenden Sample werden keine weiteren Samples eingeleitet. Bei einem Prozessblock 706 reinitialisiert der Prozess 700 zudem Interrupts.
  • Bei einer Ausführungsform kann das Melden der Leerlauftransition für den letzten Thread, der überwacht wurde, bevor der Prozessor in den Leerlauf ging, durch Nachhalten eines lastdispatched Eintrags in einer jedem Prozessor zugeordneten Tabelle unterstützt werden. Wenn ein Zeit-basiertes Muster anfällt und das Muster einen Prozessor im Leerlauf unterbricht, wird der Sampler-Thread aktiviert und beschafft die Call-Stack des letzten überwachten Threads. Dessen Call-Stack wird in einer Baumstruktur gespeichert, und der to_idle-Zählwert des Blattknotens der gerade eingefügten Call-Stack wird inkrementiert. Um eine Call-Stack des überwachten from_idle-Threads zu erhalten, die dessen Zustand zu der Zeit widerspiegelt, zu der der Leerlauf begann, muss entweder die Call-Stack zu der Zeit abgerufen werden, wenn der Prozessor sich im Leerlauf befindet, oder zu der Zeit, wenn festgestellt wird, dass der Thread zugeteilt werden soll, bevor die Möglichkeit eintritt, dass der Thread ausgeführt wird. In jedem Fall wird die Call-Stack für den ersten überwachten Thread, der zugeteilt wird, nachdem ein to_idle-Sample genommen wurde, in einem Baum gespeichert, und der from_idle-Zählwert des Blattknotens der gerade eingefügten Call-Stack wird inkrementiert. Berichte können erstellt und angezeigt werden.
  • Wenn ein Sample genommen und festgestellt wird, dass der Prozessor sich im Leerlauf befindet, zeigt der Sampling-Code dem Dispatch-Monitoring-Code an, dass von dem nächsten zugeteilten überwachten Thread auf diesem Prozessor ein Sample erstellt werden muss. Dieser Thread wird in dem jedem Prozessor zugeordneten Kontrollblock gekennzeichnet und nicht aktualisiert, bevor das nächste Sample genommen wird.
  • Wenn der Dispatch-Monitoring-Code erkennt, dass eine Call-Stack eines from_idle-Threads aufgezeichnet werden sollte und der zuzuteilende Thread ein überwachter Thread ist, dann kann er dafür sorgen, dass stattdessen der Sampler-Thread zugeteilt wird. Bei einer Ausführungsform kann dies ausgeführt werden, indem ein Interrupt-Backend oder Second-Level-Interrupt-Handler mit einem Hinweis in eine Warteschlange eingereiht wird, zu erzwingen, dass der Sampling-Thread den Call-Stack für den überwachten Thread verarbeitet. Bei einer anderen Ausführungsform kann der Dispatch-Monitoring-Code direkt erzwingen, dass der Sampling-Thread als nächster zugeteilt wird, und zwar mit den Informationen, die dafür benötigt werden, den Call-Stack für den überwachten Thread zu erhalten. Diese Information könnte durch einfaches Aktualisieren der Kennzeichnung des überwachten from_idle-Threads in einem zugeordneten Sample-Datenbereich weitergegeben werden.
  • Wenn der Call-Stack für den from_idle-Thread nicht abgerufen werden kann, bevor dieser zugeteilt wird, dann können Call-Stacks für aktuell nicht ausgeführte Threads zu einer Zeit abgerufen werden, wenn der Prozessor sich im Leerlauf befindet. Die Stacks können auf eine Untergruppe beschränkt sein, wie beispielsweise nur die, die auf dem Prozessor, der sich im Leerlauf befindet, zuletzt zugeteilt wurden. Es kann auch andere Kriterien geben, beispielsweise Ausschließen von Threads, die keine zuvor zurückgegebenen Stacks aufweisen, oder von Threads, die als Daemon-Threads erkannt werden. Wenn der Stack des from_idle-Threads zu der Zeit erfasst wurde, als der Prozessor sich im Leerlauf befand, dann kann dieser zuvor erfasste Call-Stack zu einem späteren Zeitpunkt verwendet werden, beispielsweise beim nächsten Sample. Die Untergruppe von Threads kann auf nur diejenigen beschränkt sein, die auf dem Prozessor, der sich im Leerlauf befindet, zuletzt zugeteilt wurden. Verschiedene Sampler-Threads könnten Stacks gleichzeitig abrufen. Mit gewissen Logikelementen ließe sich der Stack der Threads erkennen, deren Call-Stacks abgerufen werden, und um sicherzustellen, dass diese nicht als Folge von Timing-Problemen auf einem anderen Prozessor dupliziert werden.
  • 8A veranschaulicht einen Prozess 800 gemäß einer Ausführungsform der vorliegenden Erfindung, der für das Sampling von Leerlauftransitionen für einen from_idle_thread verwendet werden kann. Bei einem Prozessblock 802 erstellt der Prozess 800 ein Sample auf der Grundlage eines Ereignisses. Bei einem Prozessblock 804 erkennt der Prozess 800 weiter mithilfe eines Dispatch-Monitors einen nächsten zugeteilten überwachten Thread, der durch einen Prozessor zugeteilt wird, wenn auf der Grundlage des Interrupts festgestellt wird, dass sich der Prozessor im Leerlauf befindet. Zudem stellt bei einem Prozessblock 806 der Prozess 800 eine Prozessoraffinität des nächsten zugeteilten überwachten Threads so ein, dass der nächste zugeteilte überwachte Thread nur auf dem Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können. Bei einem Prozessblock 808 ruft der Prozess 800 mithilfe eines Threads, von dem ein Sample erstellt wurde – bzw. eines vermusterten Threads bzw. Sample-basierenden Threads – und der auf dem Prozessor läuft, einen Call-StackCall-Stack eines nächsten zugeteilten überwachten Threads ab, nachdem die Prozessoraffinität des nächsten zugeteilten überwachten Threads auf den Prozessor eingestellt wurde. Bei einem Prozessblock 810 stellt der Prozess 800 zudem die Prozessoraffinität des nächsten zugeteilten überwachten Threads wieder her, nachdem der Call-Stack des nächsten zugeteilten überwachten Threads abgerufen wurde. Bei einem Prozessblock 812 zeichnet der Prozess 800 den Call-Stack für den nächsten zugeteilten überwachten Thread auf. Die Aufzeichnung kann die Form eines Berichts haben.
  • 8B veranschaulicht einen Prozess 850 gemäß einer Ausführungsform der vorliegenden Erfindung, der für das Sampling von Leerlauftransitionen für einen to_idle_thread verwendet werden kann. Bei einem Prozessblock 852 erstellt der Prozess 850 ein Sample auf der Grundlage eines Ereignisses. Bei einem Prozessblock 854 erkennt der Prozess 850 weiter mithilfe eines Dispatch-Monitors einen letzten zugeteilten überwachten Thread, der durch einen Prozessor zugeteilt wird, wenn auf der Grundlage des Interrupts festgestellt wird, dass sich der Prozessor im Leerlauf befindet. Zudem stellt bei einem Prozessblock 806 der Prozess 850 eine Prozessoraffinität des letzten zugeteilten überwachten Threads so ein, dass der letzte zugeteilte überwachte Thread nur auf dem Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können. Bei einem Prozessblock 858 erhält der Prozess 850 durch den Call-Stack des letzten zugeteilten überwachten Threads weiter einen Ausführungskontext für den letzten zugeteilten überwachten Thread. Bei einem Prozessblock 860 stellt der Prozess 850 zudem der Prozessoraffinität des letzten zugeteilten überwachten Threads wieder her, nachdem der Call-Stack des letzten zugeteilten, überwachten Threads abgerufen wurde. Bei einem Prozessblock 864 zeichnet der Prozess 850 den Call-Stack für den letzten zugeteilten überwachten Thread auf. Die Aufzeichnung kann die Form eines Berichts haben.
  • Der hier beschriebene Prozess kann in einem oder mehreren Universal- oder Spezial-Mikroprozessoren realisiert werden. Derartige Mikroprozessoren führen Anweisungen entweder assembliert, compiliert oder auf Maschinenebene aus, um die Prozesse auszuführen. Diese Anweisungen können von Durchschnittsfachleuten geschrieben werden, die die Beschreibung der Figuren befolgen, die den Prozessen entsprechen und auf einem computerlesbaren Medium gespeichert bzw. auf ein solches übertragen werden. Die Anweisungen können außerdem mithilfe von Quellcode oder jedem anderen bekannten computerunterstützten Design-Werkzeug erstellt werden.
  • 9 veranschaulicht ein Blockschaltbild eines Systems 900 gemäß einer Ausführungsform der vorliegenden Erfindung, das Sample von Leerlauftransitionen nimmt. Bei einer Ausführungsform ist das System 900 dafür geeignet, Programm-Code zu speichern und/oder auszuführen, und wird mithilfe eines Universalcomputers oder beliebiger anderer Hardware-Äquivalente realisiert. Das System 900 umfasst daher einen Prozessor 902 (der als ein „Mikroprozessor” bezeichnet werden kann), einen Speicher 912, z. B. Speicher mit wahlfreiem Zugriff (random access memory, „RAM”) und/oder Nur-Lese-Speicher (read only memory, „ROM”), den Profiler 104 sowie verschiedene Eingabe-/Ausgabeeinheiten 904.
  • Der Prozessor 902 ist mit dem Speicher 912 entweder direkt oder indirekt durch einen Systembus verbunden. Der Speicher 912 kann lokalen Speicher umfassen, der während der tatsächlichen Ausführung des Programm-Codes genutzt wird, Massenspeicher und/oder Cache-Speicher, in denen mindestens ein Teil des Programm-Codes vorübergehend gespeichert wird, damit Code bei der Ausführung weniger häufig aus dem Massenspeicher abgerufen werden muss.
  • Die Eingabe-/Ausgabe-Einheiten 904 können mit dem System 900 direkt oder durch dazwischenliegende Eingabe-/Ausgabe-Controller verbunden sein. Die Eingabe-/Ausgabe-Einheiten 904 können weiter eine Tastatur, ein Tastenfeld, eine Maus, ein Mikrofon zum Erfassen von Sprachbefehlen, eine Zeigeeinheit sowie andere Benutzereingabeeinheiten enthalten, die Fachleute erkennen werden. Die Eingabe-/Ausgabe-Einheiten 904 können weiter einen Empfänger, Sender, Lautsprecher, Bildschirm, Bildaufnahmesensor, biometrischen Sensor usw. enthalten. Darüber hinaus können die Eingabe-/Ausgabe-Einheiten 904 Speichereinheiten wie beispielsweise ein Bandlaufwerk, ein Diskettenlaufwerk, ein Festplattenlaufwerk, ein Compact Disk(„CD”)-Laufwerk, ein Digital Video Disk(„DVD”)-Laufwerk usw. enthalten.
  • Netzwerkadapter können ebenfalls mit dem System 900 verbunden sein, um das System 900 dazu in die Lage zu versetzen, mit anderen Systemen, Remote-Druckern oder Speichereinheiten durch dazwischengeschaltete private oder öffentliche Netzwerke verbunden zu werden. Modems, Kabelmodems und Netzwerkkarten sind nur einige der aktuell zur Verfügung stehenden Arten von Netzwerkadaptern.
  • Es sollte beachtet werden, dass das hier beschriebene Verfahren und System die Form einer reinen Hardware-Ausführungsform, einer reinen Software-Ausführungsform oder einer Ausführungsform annehmen kann, die sowohl Hardware- als auch Software-Elemente enthält. Wenn Software zur Realisierung des Verfahrens oder Systems verwendet wird, kann die Software Folgendes enthalten, ohne aber darauf beschränkt zu sein: Firmware, residente Software, Mikrocode usw. Obwohl bei der veranschaulichten Ausführungsform aus 9 nur ein Mikroprozessor ausdrücklich gezeigt wird, kann das System mehr als einen Mikroprozessor aufweisen.
  • Jede der hier beschriebenen Konfigurationen kann mit einer virtuellen Maschine verwendet werden. Eine virtuelle Maschine kann dafür konfiguriert sein, den Aufrufstatus zu verfolgen und diesen Status zurückzugeben, wobei an eine von einer virtuellen Maschine unterstützte Schnittstelle verwiesen wird, um Call-Stacks zurückzugeben. Beispielsweise können durch Trace-Daten Informationen über die Ausführung von Threads gewonnen werden. Diese Informationen können Call-Stacks-Daten enthalten, die von Call-Stacks stammen, die zu interessierenden Threads gehören. Es kann eine virtuelle Maschine verwendet werden, um die Call-Stack-Daten zu erhalten. Die virtuelle Maschine kann verschiedene Ansätze verwenden, um die Call-Stack-Daten zu erhalten. Es können beispielsweise Eintritts-/Austrittsereignisse, ein Anwendungs-Timer-Impuls oder „Instrumentierungs-Codes” verwendet werden, die Samples von den „instrumentierten Werten” nehmen. Ein ausgewählter Sampling-Thread kann einen Aufruf an die virtuelle Maschine senden, die Call-Stack-Daten abzurufen. Der ausgewählte Sampling-Thread kann den Aufruf an die virtuelle Maschine mithilfe einer Virtual Machine Tool Interface („Virtual Maschine-Werkzeug-Schnittstelle”) ausführen. Die Virtual Machine Tool Interface kann Call-Stack-Daten an den Sampling-Thread zurückgeben oder kann die Call-Stack-Daten in einem Arbeitsbereich speichern. Die erhaltenen Daten können zur späteren Analyse in einen Baum eingefügt werden.
  • Wie Fachleute verstehen werden, können Aspekte der vorliegenden Erfindung als ein System, Verfahren oder Computerprogrammprodukt verkörpert sein. Dementsprechend können Aspekte der vorliegenden Erfindung die Form einer reinen Hardware-Ausführungsform, einer reinen Software-Ausführungsform (eingeschlossen Firmware, speicherresidente Software, Mikrocode usw.) annehmen oder die einer Ausführungsform, bei der Software- und Hardwareaspekte kombiniert werden, die hier alle allgemein als „Schaltung”, „Modul” oder „System” bezeichnet werden sollen. Aspekte der vorliegenden Erfindung können außerdem die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren computerlesbaren Medien mit in dem Medium verkörperten computerlesbaren Programm-Code verkörpert ist.
  • Es kann eine beliebige Kombination von einem oder mehreren computerlesbaren Medien verwendet werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann beispielsweise, aber ohne darauf beschränkt zu sein, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung oder Einheit oder jede beliebige Kombination von diesen sein. Als spezifischere Beispiele (eine nicht erschöpfende Liste) für das computerlesbare Speichermedium könnten die folgenden aufgeführt werden: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine tragbare Computerdiskette, eine Festplatte, ein Speicher mit wahlfreiem Zugriff (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer, programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer Compact Disc-Nur-Lese-Speicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder jede geeignete Kombination des Vorstehenden. Im Zusammenhang dieses Dokuments kann ein computerlesbares Speichermedium ein beliebiges physisches Medium sein, das ein Programm für die Nutzung durch ein Anweisungen ausführendes System, eine solche Vorrichtung oder Einheit oder für die Nutzung in Verbindung mit einem Anweisungen ausführenden System, einer solchen Vorrichtung oder Einheit enthalten oder speichern kann.
  • Ein computerlesbares Signalmedium kann unter anderem ein verbreitetes Datensignal mit in diesem verkörperten computerlesbaren Programm-Code sein, zum Beispiel im Basisband oder als Teil einer Trägerwelle. Ein solches verbreitetes Signal kann verschiedene Formen annehmen, unter anderem, aber ohne darauf beschränkt zu sein, eine elektromagnetische oder optische Form oder eine beliebige Kombination aus diesen. Ein computerlesbares Signalmedium kann jedes computerlesbare Medium sein, das kein computerlesbares Speichermedium ist und das ein Programm für die Nutzung durch ein Anweisungen ausführendes System, eine solche Vorrichtung oder Einheit oder für die Nutzung in Verbindung mit einem Anweisungen ausführenden System, einer solchen Vorrichtung oder Einheit übermitteln, verbreiten oder transportieren kann.
  • Auf einem computerlesbaren Medium verkörperter Programm-Code kann mithilfe jedes geeigneten Mediums übermittelt werden, darunter unter anderem, aber ohne darauf beschränkt zu sein, ein drahtloses oder drahtgebundenes Medium, Lichtwellenleiter-Kabel, HF (Hochfrequenz) usw. oder jede geeignete Kombination des Vorstehenden.
  • Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sein, darunter eine objektorientierte Programmiersprache wie Java, Smalltalk, C++ oder Ähnliche sowie herkömmliche verfahrensorientierte Programmiersprachen wie beispielsweise die Programmiersprache „C” oder ähnliche Programmiersprachen. Der Programm-Code kann vollständig oder teilweise auf dem Computer des Benutzers, als ein eigenständiges Softwarepaket, zum Teil auf dem Computer des Benutzers und zum Teil auf einem entfernten Computer oder vollständig auf dem entfernten Computer oder Server ausgeführt werden. Bei dem letzteren Szenario kann der entfernte Computer mit dem Computer des Benutzers durch ein beliebiges Netzwerk, darunter ein Lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN) verbunden sein, oder es kann eine Verbindung mit einem externen Computer hergestellt werden (zum Beispiel mithilfe eines Internetdienstanbieters über das Internet).
  • Aspekte der vorliegenden Erfindung werden unten mit Bezug auf Flussdiagramme und/oder Blockschaltbilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Flussdiagramme und/oder Blockschaltbilder sowie Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschaltbildern durch Computerprogrammanweisungen realisiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung zugeführt werden, so dass der Prozessor und die Anweisungen eine Maschine bereitstellen, die Funktionen und Handlungen realisiert, die in dem Flussdiagramm bzw. den Flussdiagrammen oder dem Blockschaltbild bzw. den Blockschaltbildern hier spezifiziert sind. Der „Prozessor” eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung kann hier als ein „Mikroprozessor” bezeichnet werden. Der Begriff „Mikroprozessor” sollte jedoch nicht als auf eine zentrale Recheneinheit mit einem einzigen Chip oder eine beliebige andere bestimmte Art von programmierbarer Datenverarbeitungsvorrichtung beschränkt aufgefasst werden, außer wenn dieses ausdrücklich so angegeben ist.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert sein, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Weise funktionieren, so dass die in dem computerlesbaren Medium gespeicherten Anweisungen ein Erzeugnis samt der Anweisungen herstellen, mithilfe derer die in dem Block oder den Blöcken des Flussdiagramms und/oder Blockschaltbilds spezifizierte Funktion/Handlung ausgeführt wird. Die Computerprogrammanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten geladen werden, um eine Reihe von auf dem Computer, der anderen programmierbaren Vorrichtung oder den anderen Einheiten auszuführenden Betriebsschritten zu bewirken, um einen computerimplementierten Prozess zu schaffen, so dass die Anweisungen, die auf dem Computer oder der anderen programmierbaren Vorrichtung ausgeführt werden, Prozesse zur Realisierung der in dem Block oder den Blöcken des Flussdiagramms und/oder Blockschaltbilds spezifizierten Funktionen/Handlungen bereitstellen.
  • Das Flussdiagramm und die Blockschaltbilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Realisierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In dieser Beziehung kann jeder Block in dem Flussdiagramm oder den Blockschaltbildern ein Modul, Segment oder einen Codeabschnitt enthalten, das/der eine oder mehrere ausführbare Anweisungen zur Realisierung der spezifizierten Logikfunktion(en) umfasst. Es sollte auch beachtet werden, dass bei einigen alternativen Realisierungen die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren angegeben auftreten können. Zum Beispiel können zwei aufeinander folgend dargestellte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können in Abhängigkeit von der betreffenden Funktionalität manchmal in der umgekehrten Reihenfolge ausgeführt werden. Es ist ebenfalls zu beachten, dass jeder Block der Blockschaltbilder und/oder des Flussdiagramms sowie Blockkombinationen in den Blockschaltbildern und/oder dem Flussdiagramm durch hardwarebasierte Spezialsysteme, die die spezifizierten Funktionen oder Handlungen ausführen, oder Kombinationen von Spezialhardware und Computeranweisungen realisiert werden können.
  • Wird in dieser Beschreibung auf „eine Ausführungsform” oder Ähnliches Bezug genommen, so heißt das, dass ein bestimmtes in Verbindung mit der Ausführungsform beschriebenes Merkmal, eine bestimmte derartige Struktur und/oder eine bestimmte derartige Eigenschaft in mindestens einer Ausführungsform der vorliegenden Erfindung enthalten ist. Daher können in dieser gesamten Beschreibung die Formulierung „bei einer Ausführungsform” sowie ähnliche Begriffe sich alle auf dieselbe Ausführungsform beziehen, obwohl dies nicht notwendigerweise der Fall ist. Darüber hinaus können die beschriebenen Merkmale, Strukturen oder Eigenschaften der Erfindung auf jede geeignete Weise in einer oder mehreren Ausführungsformen kombiniert werden. Dementsprechend können, selbst wenn anfänglich beansprucht wird, dass Merkmale in bestimmten Kombinationen auftreten, in einigen Fällen ein oder mehrere Merkmale aus der Kombination herausgenommen werden, und die beanspruchte Kombination kann in eine Unterkombination oder eine Abänderung einer Unterkombination übergeleitet werden.
  • Obwohl die Vorrichtung und das Verfahren im Hinblick auf die Ausführungsformen beschrieben wurden, die gegenwärtig als die praktikabelsten und bevorzugten angesehen werden, versteht es sich, dass die Offenbarung nicht auf die offenbarten Ausführungsformen beschränkt sein muss. Die Offenbarung soll verschiedene Abwandlungen und ähnliche Anordnungen abdecken, die in dem Sinn und Schutzumfang der Ansprüche enthalten sind, wobei deren Schutzumfang die umfassendste Interpretation eingeräumt werden sollte, um alle derartigen Abwandlungen und ähnliche Strukturen zu umfassen. Die vorliegende Offenbarung enthält jegliche und alle Ausführungsformen der folgenden Ansprüche.

Claims (6)

  1. System (100) zum Anwendungs-Profiling von auf mehrern Prozessoren (112, 114, 116) ablaufenden Threads, das Folgendes aufweist: einen Prozessor aus den mehreren Prozessoren (112, 114, 116) zum Erstellen eines Sample auf der Grundlage eines Ereignisses mithilfe eines Sampler-Thread; ein Betriebssystem (106) zum (i) Erkennen, mithilfe eines Zuteilungsmonitors, eines nächsten zuzuteilenden überwachten Thread, der einem aktuellen Prozessor zugeteilt wird, und (ii) zum Einstellen, mithilfe eines Schedulers, einer Prozessoraffinität des nächsten zuzuteilenden überwachten from_Idle-Thread, so dass der nächste zuzuteilende überwachte from_Idle-Thread nur auf dem Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können; einen Profiler (104), der die Prozessoraffinität des nächsten zuzuteilenden überwachten to_Idle-Thread festgelegt, so dass der nächste zuzuteilende überwachte to_Idle-Thread nur auf dem Prozessor läuft, ohne zu einem anderen Prozessor migrieren zu können, und wobei der Profiler (104) zusätzlich angepasst ist zum (i) Abrufen, mithilfe des Sampler-Thread, der so konfiguriert ist, dass er nur auf dem aktuellen Prozessor läuft, eines Call-Stack des nächsten zuzuteilenden überwachten Thread, nachdem die Prozessoraffinität des nächsten zuzuteilenden überwachten Thread auf den Prozessor eingestellt wurde, sodass ein Kontext des nächsten zuzuteilenden Thread festgestellt wird, und (ii) Wiederherstellen der Prozessoraffinität des nächsten zuzuteiltenden überwachten Thread, nachdem der Call-Stack des nächsten zuzuteiltenden überwachten Thread abgerufen wurde, und (iii) Aufzeichnen des Call-Stack des nächsten zuzuteilenden überwachten Thread für den nächsten zuzuteilenden überwachten Thread.
  2. System nach Anspruch 1, wobei das Ereignis auf einem vorgegebenen Ereignis basiert.
  3. System nach Anspruch 1, wobei das vorgegebene Ereignis Zeit-basiert ist.
  4. System nach Anspruch 1, wobei das Ereignis auf einem Interrupt basiert.
  5. System nach Anspruch 1, wobei der Profiler (104) ein Profil der Anwendung erstellt.
  6. System (100) nach einem der vorhergehenden Ansprüche, das weiter ein Benachrichtigen eines Betriebssystems (106) nach dem Aufzeichnen des Call-Stack des nächsten zuzuteilenden überwachten Thread für den nächsten zuzuteilenden überwachten Thread aufweist, dass ein Sample fertig gestellt wurde.
DE112011101759.6T 2010-05-24 2011-05-11 Sampling von Leerlauftransitionen Active DE112011101759B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/786,381 2010-05-24
US12/786,381 US9176783B2 (en) 2010-05-24 2010-05-24 Idle transitions sampling with execution context
PCT/EP2011/057574 WO2011147685A1 (en) 2010-05-24 2011-05-11 Idle transitions sampling

Publications (2)

Publication Number Publication Date
DE112011101759T5 DE112011101759T5 (de) 2013-03-07
DE112011101759B4 true DE112011101759B4 (de) 2015-03-05

Family

ID=44275921

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011101759.6T Active DE112011101759B4 (de) 2010-05-24 2011-05-11 Sampling von Leerlauftransitionen

Country Status (5)

Country Link
US (1) US9176783B2 (de)
CN (1) CN102893261B (de)
DE (1) DE112011101759B4 (de)
GB (1) GB2493609B (de)
WO (1) WO2011147685A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9418005B2 (en) 2008-07-15 2016-08-16 International Business Machines Corporation Managing garbage collection in a data processing system
US8843684B2 (en) * 2010-06-11 2014-09-23 International Business Machines Corporation Performing call stack sampling by setting affinity of target thread to a current process to prevent target thread migration
US8799872B2 (en) 2010-06-27 2014-08-05 International Business Machines Corporation Sampling with sample pacing
US8799904B2 (en) * 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling
US20140223062A1 (en) * 2013-02-01 2014-08-07 International Business Machines Corporation Non-authorized transaction processing in a multiprocessing environment
US9092332B2 (en) * 2013-05-02 2015-07-28 Microsoft Technology Licensing, Llc Activity based sampling of diagnostics data
US9552223B2 (en) * 2014-09-30 2017-01-24 International Business Machines Corporation Post-return asynchronous code execution

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6633897B1 (en) * 1995-06-30 2003-10-14 International Business Machines Corporation Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
US20100017583A1 (en) * 2008-07-15 2010-01-21 International Business Machines Corporation Call Stack Sampling for a Multi-Processor System

Family Cites Families (186)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5218704A (en) 1989-10-30 1993-06-08 Texas Instruments Real-time power conservation for portable computers
US5305454A (en) 1991-08-12 1994-04-19 International Business Machines Corporation Notification of event handlers in broadcast or propagation mode by event management services in a computer system
GB2276737A (en) 1993-03-30 1994-10-05 Ibm Fault-tolerant transaction-oriented data processing
US5544318A (en) 1993-04-16 1996-08-06 Accom, Inc., Asynchronous media server request processing system for servicing reprioritizing request from a client determines whether or not to delay executing said reprioritizing request
US5473777A (en) 1993-07-19 1995-12-05 Moeller; Christopher P. Wrapper for enabling an object otented application to maintain virtual memory using procedural function calls
US5379432A (en) 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US5404529A (en) 1993-07-19 1995-04-04 Taligent, Inc. Object-oriented interprocess communication system interface for a procedural operating system
US5619202A (en) 1994-11-22 1997-04-08 Analog Devices, Inc. Variable sample rate ADC
EP0649084A1 (de) 1993-10-18 1995-04-19 Cyrix Corporation Verzweigungsverarbeitung in Mikroprozessor
EP0689141A3 (de) 1994-06-20 1997-10-15 At & T Corp Unterbrechungsbasierte hardwaremässige Unterstützung für Systemleistungsprofilierung
US6728959B1 (en) 1995-08-08 2004-04-27 Novell, Inc. Method and apparatus for strong affinity multiprocessor scheduling
US5682537A (en) 1995-08-31 1997-10-28 Unisys Corporation Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system
US5751789A (en) 1995-11-13 1998-05-12 Bell Atlantic Network Services, Inc. SNID with wireless backup
US5764241A (en) 1995-11-30 1998-06-09 Microsoft Corporation Method and system for modeling and presenting integrated media with a declarative modeling language for representing reactive behavior
JP3672208B2 (ja) 1996-07-02 2005-07-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 階層化トランザクション処理方法
GB2321540A (en) 1997-01-25 1998-07-29 Ibm Automatic transactional locking using object request broker
US5881138A (en) 1997-04-27 1999-03-09 Ameritech Corporation Method and system for detecting a change in at least one telecommunication service rate plan
US6199075B1 (en) 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US5913213A (en) 1997-06-16 1999-06-15 Telefonaktiebolaget L M Ericsson Lingering locks for replicated data objects
US6697935B1 (en) 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6108654A (en) 1997-10-31 2000-08-22 Oracle Corporation Method and system for locking resources in a computer system
US6158024A (en) 1998-03-31 2000-12-05 International Business Machines Corporation Method and apparatus for structured memory analysis of data processing systems and applications
US6055492A (en) 1997-12-12 2000-04-25 International Business Machines Corporation System and method for providing trace information data reduction
US6662358B1 (en) 1997-12-12 2003-12-09 International Business Machines Corporation Minimizing profiling-related perturbation using periodic contextual information
US6338159B1 (en) 1997-12-12 2002-01-08 International Business Machines Corporation System and method for providing trace information
US6002872A (en) 1998-03-31 1999-12-14 International Machines Corporation Method and apparatus for structured profiling of data processing systems and applications
US6513155B1 (en) 1997-12-12 2003-01-28 International Business Machines Corporation Method and system for merging event-based data and sampled data into postprocessed trace output
US6651243B1 (en) 1997-12-12 2003-11-18 International Business Machines Corporation Method and system for periodic trace sampling for real-time generation of segments of call stack trees
US6751789B1 (en) 1997-12-12 2004-06-15 International Business Machines Corporation Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination
US6442572B2 (en) 1998-01-28 2002-08-27 International Business Machines Corporation Method of and computer system for performing a transaction on a database
US6233585B1 (en) 1998-03-12 2001-05-15 Crossworlds Software, Inc. Isolation levels and compensating transactions in an information system
US6125363A (en) 1998-03-30 2000-09-26 Buzzeo; Eugene Distributed, multi-user, multi-threaded application development method
US6112225A (en) 1998-03-30 2000-08-29 International Business Machines Corporation Task distribution processing system and the method for subscribing computers to perform computing tasks during idle time
US6954922B2 (en) 1998-04-29 2005-10-11 Sun Microsystems, Inc. Method apparatus and article of manufacture for time profiling multi-threaded programs
US6128611A (en) 1998-04-30 2000-10-03 International Business Machines Corporation Internet-enabled generic application program for accessing hierarchical data
US6941552B1 (en) 1998-07-30 2005-09-06 International Business Machines Corporation Method and apparatus to retain applet security privileges outside of the Java virtual machine
US6314471B1 (en) 1998-11-13 2001-11-06 Cray Inc. Techniques for an interrupt free operating system
US6449614B1 (en) 1999-03-25 2002-09-10 International Business Machines Corporation Interface system and method for asynchronously updating a share resource with locking facility
US6681230B1 (en) 1999-03-25 2004-01-20 Lucent Technologies Inc. Real-time event processing system with service authoring environment
US6601233B1 (en) 1999-07-30 2003-07-29 Accenture Llp Business components framework
US7028298B1 (en) 1999-09-10 2006-04-11 Sun Microsystems, Inc. Apparatus and methods for managing resource usage
US6438512B1 (en) 1999-09-28 2002-08-20 Convergys Cmg Utah, Inc. System and method for performance monitoring of application code
US6654948B1 (en) 1999-10-12 2003-11-25 International Business Machines Corporation Methods and apparatus for partial and consistent monitoring of object-oriented programs and systems
US6728955B1 (en) 1999-11-05 2004-04-27 International Business Machines Corporation Processing events during profiling of an instrumented program
US6742016B1 (en) 2000-03-24 2004-05-25 Hewlett-Packard Devolpment Company, L.P. Request acceptor for a network application system and a method thereof
US6625602B1 (en) 2000-04-28 2003-09-23 Microsoft Corporation Method and system for hierarchical transactions and compensation
US6880086B2 (en) 2000-05-20 2005-04-12 Ciena Corporation Signatures for facilitating hot upgrades of modular software components
US7020696B1 (en) 2000-05-20 2006-03-28 Ciena Corp. Distributed user management information in telecommunications networks
US6769074B2 (en) 2000-05-25 2004-07-27 Lumigent Technologies, Inc. System and method for transaction-selective rollback reconstruction of database objects
US6658652B1 (en) 2000-06-08 2003-12-02 International Business Machines Corporation Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing
US7236976B2 (en) 2000-06-19 2007-06-26 Aramark Corporation System and method for scheduling events and associated products and services
US6904594B1 (en) 2000-07-06 2005-06-07 International Business Machines Corporation Method and system for apportioning changes in metric variables in an symmetric multiprocessor (SMP) environment
US7389497B1 (en) 2000-07-06 2008-06-17 International Business Machines Corporation Method and system for tracing profiling information using per thread metric variables with reused kernel threads
US6662359B1 (en) 2000-07-20 2003-12-09 International Business Machines Corporation System and method for injecting hooks into Java classes to handle exception and finalization processing
JP2002055848A (ja) 2000-08-11 2002-02-20 Omron Corp プログラム実行方式及び当該プログラム実行方式を格納した記憶媒体
US20020073103A1 (en) 2000-08-25 2002-06-13 Bottomley Thomas Mark Walter Memory garbage collection method and apparatus
US6993246B1 (en) 2000-09-15 2006-01-31 Hewlett-Packard Development Company, L.P. Method and system for correlating data streams
US7206848B1 (en) 2000-09-21 2007-04-17 Hewlett-Packard Development Company, L.P. Intelligently classifying and handling user requests in a data service system
US6857120B1 (en) 2000-11-01 2005-02-15 International Business Machines Corporation Method for characterizing program execution by periodic call stack inspection
US6874074B1 (en) 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
US7426730B2 (en) 2001-04-19 2008-09-16 Wre-Hol Llc Method and system for generalized and adaptive transaction processing between uniform information services and applications
US7499924B2 (en) 2001-06-28 2009-03-03 International Business Machines Corporation Method for releasing update locks on rollback to savepoint
US20030004970A1 (en) 2001-06-28 2003-01-02 Watts Julie Ann Method for releasing update locks on rollback to savepoint
US7178145B2 (en) 2001-06-29 2007-02-13 Emc Corporation Queues for soft affinity code threads and hard affinity code threads for allocation of processors to execute the threads in a multi-processor system
US20030023655A1 (en) 2001-07-26 2003-01-30 Stepan Sokolov Method and apparatus to facilitate suspending threads in a platform-independent virtual machine
US6697802B2 (en) 2001-10-12 2004-02-24 International Business Machines Corporation Systems and methods for pairwise analysis of event data
US20030083912A1 (en) 2001-10-25 2003-05-01 Covington Roy B. Optimal resource allocation business process and tools
EA006038B1 (ru) 2001-11-01 2005-08-25 Верисайн, Инк. Диспетчер транзакций в памяти
US6976263B2 (en) 2001-11-19 2005-12-13 Lsi Logic Corporation Mechanism for encoding and decoding upgradeable RPC/XDR structures
US8024735B2 (en) 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7263108B2 (en) 2002-08-06 2007-08-28 Netxen, Inc. Dual-mode network storage systems and methods
US6792460B2 (en) 2002-10-02 2004-09-14 Mercury Interactive Corporation System and methods for monitoring application server performance
US7103597B2 (en) 2002-10-03 2006-09-05 Mcgoveran David O Adaptive transaction manager for complex transactions and business process
US7546333B2 (en) 2002-10-23 2009-06-09 Netapp, Inc. Methods and systems for predictive change management for access paths in networks
US7234166B2 (en) 2002-11-07 2007-06-19 Stonesoft Corporation Event sequence detection
US7398518B2 (en) 2002-12-17 2008-07-08 Intel Corporation Method and apparatus for measuring thread wait time
JP4436036B2 (ja) 2002-12-18 2010-03-24 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理装置、トレース処理方法、プログラム及び記録媒体
US20040148594A1 (en) 2003-01-24 2004-07-29 Stephen Williams Acquiring call-stack information
US20040162741A1 (en) 2003-02-07 2004-08-19 David Flaxer Method and apparatus for product lifecycle management in a distributed environment enabled by dynamic business process composition and execution by rule inference
US7114150B2 (en) 2003-02-13 2006-09-26 International Business Machines Corporation Apparatus and method for dynamic instrumenting of code to minimize system perturbation
US7222119B1 (en) 2003-02-14 2007-05-22 Google Inc. Namespace locking scheme
US6798022B1 (en) 2003-03-11 2004-09-28 Oki Electric Industry Co., Ltd. Semiconductor device with improved protection from electrostatic discharge
US8762415B2 (en) 2003-03-25 2014-06-24 Siebel Systems, Inc. Modeling of order data
US7299478B2 (en) 2003-03-28 2007-11-20 Sbc Knowledge Ventures, L.P. Integration service and domain object for telecommunications operational support
US7000047B2 (en) 2003-04-23 2006-02-14 International Business Machines Corporation Mechanism for effectively handling livelocks in a simultaneous multithreading processor
US7278141B2 (en) 2003-04-23 2007-10-02 International Business Machines Corporation System and method for adding priority change value corresponding with a lock to a thread during lock processing
US7299229B2 (en) 2003-04-25 2007-11-20 International Business Machines Corporation Grid quorum
US7124131B2 (en) 2003-04-29 2006-10-17 International Business Machines Corporation Discipline for lock reassertion in a distributed file system
US7305393B2 (en) 2003-04-29 2007-12-04 International Business Machines Corporation Mounted filesystem integrity checking and salvage
US7496574B2 (en) 2003-05-01 2009-02-24 International Business Machines Corporation Managing locks and transactions
US7194732B2 (en) 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application
US7536673B2 (en) 2003-07-22 2009-05-19 Sap Ag Application business object processing
US7610473B2 (en) 2003-08-28 2009-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US7089250B2 (en) 2003-10-08 2006-08-08 International Business Machines Corporation Method and system for associating events
US20050086455A1 (en) 2003-10-16 2005-04-21 International Business Machines Corporation Method and apparatus for generating interrupts for specific types of instructions
JP4330429B2 (ja) 2003-11-05 2009-09-16 株式会社日立製作所 プロファイル情報の取得装置及び方法
US7458078B2 (en) 2003-11-06 2008-11-25 International Business Machines Corporation Apparatus and method for autonomic hardware assisted thread stack tracking
US7257657B2 (en) 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US6931354B2 (en) 2003-11-13 2005-08-16 International Business Machines Corporation Method, apparatus and computer program product for efficient, large counts of per thread performance events
US20050138443A1 (en) 2003-12-23 2005-06-23 Barnes Cooper Method for C state management
US7624137B2 (en) 2004-01-05 2009-11-24 International Business Machines Corporation Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds
US7114036B2 (en) 2004-01-14 2006-09-26 International Business Machines Corporation Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected
US7093081B2 (en) 2004-01-14 2006-08-15 International Business Machines Corporation Method and apparatus for identifying false cache line sharing
US7526757B2 (en) 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7392370B2 (en) 2004-01-14 2008-06-24 International Business Machines Corporation Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US20050155018A1 (en) 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for generating interrupts based on arithmetic combinations of performance counter values
US7509653B2 (en) 2004-01-22 2009-03-24 International Business Machines Corporation Efficient and scalable event partitioning in business integration applications using multiple delivery queues
US7424705B2 (en) 2004-03-11 2008-09-09 Intel Corporation Dynamic management of compiled code
US7296130B2 (en) 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7162666B2 (en) 2004-03-26 2007-01-09 Emc Corporation Multi-processor system having a watchdog for interrupting the multiple processors and deferring preemption until release of spinlocks
US20050246461A1 (en) * 2004-04-29 2005-11-03 International Business Machines Corporation Scheduling threads in a multi-processor computer
US20050262130A1 (en) 2004-05-21 2005-11-24 Krishna Mohan Input data specification method and system in business-to-business integration
US7496918B1 (en) 2004-06-01 2009-02-24 Sun Microsystems, Inc. System and methods for deadlock detection
US7610585B2 (en) 2004-06-03 2009-10-27 Intel Corporation Thread synchronization methods and apparatus for managed run-time environments
IL167628A (en) 2004-06-04 2010-11-30 Optier Ltd System and method for performance management in a multi-tier computing environment
US20050273757A1 (en) 2004-06-07 2005-12-08 Anderson Craig D Methods, systems, and computer program products for summarizing operational behavior of a computer program
US7529914B2 (en) 2004-06-30 2009-05-05 Intel Corporation Method and apparatus for speculative execution of uncontended lock instructions
US7779238B2 (en) 2004-06-30 2010-08-17 Oracle America, Inc. Method and apparatus for precisely identifying effective addresses associated with hardware events
US20060023642A1 (en) 2004-07-08 2006-02-02 Steve Roskowski Data collection associated with components and services of a wireless communication network
US20060031837A1 (en) 2004-08-05 2006-02-09 International Business Machines Corporation Thread starvation profiler
US7487503B2 (en) 2004-08-12 2009-02-03 International Business Machines Corporation Scheduling threads in a multiprocessor computer
US20060059486A1 (en) 2004-09-14 2006-03-16 Microsoft Corporation Call stack capture in an interrupt driven architecture
US7716647B2 (en) 2004-10-01 2010-05-11 Microsoft Corporation Method and system for a system call profiler
US7721268B2 (en) 2004-10-01 2010-05-18 Microsoft Corporation Method and system for a call stack capture
US20060072563A1 (en) 2004-10-05 2006-04-06 Regnier Greg J Packet processing
US20060080486A1 (en) 2004-10-07 2006-04-13 International Business Machines Corporation Method and apparatus for prioritizing requests for information in a network environment
US7548974B2 (en) 2004-10-12 2009-06-16 International Business Machines Corporation Adaptively processing client requests to a network server
US20060130001A1 (en) 2004-11-30 2006-06-15 International Business Machines Corporation Apparatus and method for call stack profiling for a software application
US7593980B2 (en) 2004-11-30 2009-09-22 Cisco Technology, Inc. Application server system and method
US20060149877A1 (en) 2005-01-03 2006-07-06 Pearson Adrian R Interrupt management for digital media processor
FR2881242B1 (fr) 2005-01-21 2007-03-23 Meiosys Soc Par Actions Simpli Procede non intrusif de journalisation d'evements internes au sein d'un processus applicatif, et systeme mettant en oeuvre ce procede
US20060184769A1 (en) 2005-02-11 2006-08-17 International Business Machines Corporation Localized generation of global flush requests while guaranteeing forward progress of a processor
US7325108B2 (en) 2005-03-15 2008-01-29 International Business Machines Corporation Method and system for page-out and page-in of stale objects in memory
TWI257216B (en) 2005-03-23 2006-06-21 Ind Tech Res Inst System and a method of request scheduling for the differentiated quality of service at an intermediary
US7840293B2 (en) 2005-04-25 2010-11-23 Invensys Systems, Inc. Caching identifications and associated production database guids for expedited acquisition of linking information contained within multiple distinct production database tables
US7689867B2 (en) 2005-06-09 2010-03-30 Intel Corporation Multiprocessor breakpoint
US9110712B2 (en) 2005-06-10 2015-08-18 International Business Machines Corporation Method for encapsulating logical units of work using business objects
US8533709B2 (en) 2005-08-04 2013-09-10 Microsoft Cororation Changing frequency of a virtual programmable interrupt timer in virtual machines to control virtual time
US7788664B1 (en) 2005-11-08 2010-08-31 Hewlett-Packard Development Company, L.P. Method of virtualizing counter in computer system
US20070150904A1 (en) 2005-11-15 2007-06-28 International Business Machines Corporation Multi-threaded polling in a processing environment
US7877734B2 (en) 2006-01-12 2011-01-25 International Business Machines Corporation Selective profiling of program code executing in a runtime environment
US9323578B2 (en) 2006-01-19 2016-04-26 International Business Machines Corporation Analyzing wait states in a data processing system
US7474991B2 (en) 2006-01-19 2009-01-06 International Business Machines Corporation Method and apparatus for analyzing idle states in a data processing system
US7653895B1 (en) 2006-01-20 2010-01-26 Xilinx, Inc. Memory arrangement for message processing by a plurality of threads
US8018845B2 (en) 2006-01-25 2011-09-13 Cisco Technology, Inc Sampling rate-limited traffic
US7584332B2 (en) 2006-02-17 2009-09-01 University Of Notre Dame Du Lac Computer systems with lightweight multi-threaded architectures
US7827541B2 (en) 2006-03-16 2010-11-02 International Business Machines Corporation Method and apparatus for profiling execution of code using multiple processors
US7587364B2 (en) 2006-03-24 2009-09-08 Sap Ag Systems and methods for bank determination and payment handling
US8402253B2 (en) 2006-09-29 2013-03-19 Intel Corporation Managing multiple threads in a single pipeline
US20080082761A1 (en) 2006-09-29 2008-04-03 Eric Nels Herness Generic locking service for business integration
US7921075B2 (en) 2006-09-29 2011-04-05 International Business Machines Corporation Generic sequencing service for business integration
US20080148241A1 (en) 2006-10-11 2008-06-19 Scott Thomas Jones Method and apparatus for profiling heap objects
US8839271B2 (en) 2006-10-11 2014-09-16 International Business Machines Corporation Call stack sampling to obtain information for analyzing idle states in a data processing system
US9514201B2 (en) 2006-10-13 2016-12-06 International Business Machines Corporation Method and system for non-intrusive event sequencing
US9274857B2 (en) 2006-10-13 2016-03-01 International Business Machines Corporation Method and system for detecting work completion in loosely coupled components
US7493436B2 (en) 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
US8136124B2 (en) 2007-01-18 2012-03-13 Oracle America, Inc. Method and apparatus for synthesizing hardware counters from performance sampling
US20080196030A1 (en) 2007-02-13 2008-08-14 Buros William M Optimizing memory accesses for multi-threaded programs in a non-uniform memory access (numa) system
JP4905974B2 (ja) 2007-03-30 2012-03-28 株式会社エヌ・ティ・ティ・データ プログラムプロファイリング装置、プログラムプロファイリング方法、及びプログラム
US20080263325A1 (en) 2007-04-19 2008-10-23 International Business Machines Corporation System and structure for synchronized thread priority selection in a deeply pipelined multithreaded microprocessor
US7962924B2 (en) 2007-06-07 2011-06-14 International Business Machines Corporation System and method for call stack sampling combined with node and instruction tracing
US8544014B2 (en) 2007-07-24 2013-09-24 Microsoft Corporation Scheduling threads in multi-core systems
US8132170B2 (en) * 2007-08-07 2012-03-06 International Business Machines Corporation Call stack sampling in a data processing system
US8381215B2 (en) * 2007-09-27 2013-02-19 Oracle America, Inc. Method and system for power-management aware dispatcher
JP4912375B2 (ja) 2007-09-28 2012-04-11 長堀工業株式会社 流体継手
US8117618B2 (en) 2007-10-12 2012-02-14 Freescale Semiconductor, Inc. Forward progress mechanism for a multithreaded processor
US8141053B2 (en) 2008-01-04 2012-03-20 International Business Machines Corporation Call stack sampling using a virtual machine
US8156495B2 (en) 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
US8739165B2 (en) 2008-01-22 2014-05-27 Freescale Semiconductor, Inc. Shared resource based thread scheduling with affinity and/or selectable criteria
US8434098B2 (en) 2008-02-07 2013-04-30 Microsoft Corporation Synchronizing split user-mode/kernel-mode device driver architecture
GB2457341B (en) * 2008-02-14 2010-07-21 Transitive Ltd Multiprocessor computing system with multi-mode memory consistency protection
JP5624480B2 (ja) 2008-03-11 2014-11-12 ユニバーシティ・オブ・ワシントン 効率的な決定論的マルチプロセッシング(deterministicmultiprocessing)
KR20090098500A (ko) 2008-03-14 2009-09-17 삼성전자주식회사 가상 머신의 유휴 구간 검사 장치 및 방법, 그리고 그방법을 수행하기 위한 컴퓨터 프로그램
US8286139B2 (en) 2008-03-19 2012-10-09 International Businesss Machines Corporation Call stack sampling for threads having latencies exceeding a threshold
KR100959548B1 (ko) 2008-05-21 2010-05-27 한국과학기술원 인터럽트 스케줄링 방법
US8607237B2 (en) 2008-06-02 2013-12-10 Microsoft Corporation Collection with local lists for a multi-processor system
US8286134B2 (en) 2008-07-15 2012-10-09 International Business Machines Corporation Call stack sampling for a multi-processor system
US9418005B2 (en) 2008-07-15 2016-08-16 International Business Machines Corporation Managing garbage collection in a data processing system
US8566795B2 (en) 2008-07-15 2013-10-22 International Business Machines Corporation Selectively obtaining call stack information based on criteria
US20100017581A1 (en) 2008-07-18 2010-01-21 Microsoft Corporation Low overhead atomic memory operations
US8332852B2 (en) 2008-07-21 2012-12-11 International Business Machines Corporation Thread-to-processor assignment based on affinity identifiers
US20100036981A1 (en) 2008-08-08 2010-02-11 Raghavendra Ganesh Finding Hot Call Paths
US20100333071A1 (en) 2009-06-30 2010-12-30 International Business Machines Corporation Time Based Context Sampling of Trace Data with Support for Multiple Virtual Machines
US8843684B2 (en) 2010-06-11 2014-09-23 International Business Machines Corporation Performing call stack sampling by setting affinity of target thread to a current process to prevent target thread migration
US8799872B2 (en) 2010-06-27 2014-08-05 International Business Machines Corporation Sampling with sample pacing
US8799904B2 (en) 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6633897B1 (en) * 1995-06-30 2003-10-14 International Business Machines Corporation Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
US20100017583A1 (en) * 2008-07-15 2010-01-21 International Business Machines Corporation Call Stack Sampling for a Multi-Processor System

Also Published As

Publication number Publication date
US9176783B2 (en) 2015-11-03
CN102893261A (zh) 2013-01-23
DE112011101759T5 (de) 2013-03-07
GB2493609B (en) 2014-02-12
WO2011147685A1 (en) 2011-12-01
US20110289361A1 (en) 2011-11-24
CN102893261B (zh) 2016-03-16
GB2493609A (en) 2013-02-13
GB201212738D0 (en) 2012-08-29

Similar Documents

Publication Publication Date Title
DE112011101759B4 (de) Sampling von Leerlauftransitionen
DE112012000797B4 (de) Mehrfach-Modellierungsparadigma für eine Vorhersageanalytik
DE10050684B4 (de) Verfahren und System zur periodischen Ablaufverfolgung für Aufrufsequenzen zwischen Routinen
DE69826418T2 (de) Anordnung zum Abtasten mehrerer Instruktionen in einer Prozessorpipeline
US10552289B2 (en) Correlation analysis of performance metrices
DE112004002296B4 (de) Anwenderprogrammierbares Multithreading mit geringem Overhead
US9639446B2 (en) Trace monitoring
DE112013000486B4 (de) Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads
DE102014103488A1 (de) Ausgeglichenes Scheduling mit gemischten Abfrage-Lasten
DE112010005473T5 (de) Opportunistisches multitasking
DE112012003961T5 (de) Gleichzeitige Verarbeitung von eingereihten Nachrichten
DE102020102783A1 (de) Verfahren und einrichtungen zum verbessern einer leistungsdatensammlung einer hochleistungsberechnungsanwendung
DE112011103979T5 (de) Computerprogramm und System für ein Verfahren zur Optimierung der Speicherverwaltung einer auf einer virtuellen Maschine ausgeführten Anwendung
DE112011100739T5 (de) Programmatisches Ermitteln eines Ausführungsmodus für eine Anforderungszuteilungunter Verwendung von historischen Masszahlen
DE112006003081T5 (de) Leistungspriorisierung in Multithreadprozessoren
DE112012002106T5 (de) Vorausschauendes Malware Scannen
DE60207070T2 (de) Überwachung von tasks
DE112012005639T5 (de) Auslösen von Fensterbedingungen bei Anwendungen des Stream-Computing
DE102014116367A1 (de) Verwaltung von leistungsstufen von informationstechnologiesystemen
DE202017106569U1 (de) Analyse grossangelegter Datenverarbeitungsaufträge
US9904470B2 (en) Tracking ownership of memory in a data processing system through use of a memory monitor
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern
DE112011100168B4 (de) Erfassen von Diagnosedaten in einer Datenverarbeitungsumgebung
DE112011100098B4 (de) Effiziente Mehrkernverarbeitung von Ereignissen
DE102006046717A1 (de) Dynamisch migrierende Kanäle

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

Representative=s name: SPIES DANNER & PARTNER PATENTANWAELTE PARTNERS, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final
R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE