DE102018213047A1 - Skalierbare Spinlocks für einen nicht einheitlichen Speicherzugriff - Google Patents

Skalierbare Spinlocks für einen nicht einheitlichen Speicherzugriff Download PDF

Info

Publication number
DE102018213047A1
DE102018213047A1 DE102018213047.7A DE102018213047A DE102018213047A1 DE 102018213047 A1 DE102018213047 A1 DE 102018213047A1 DE 102018213047 A DE102018213047 A DE 102018213047A DE 102018213047 A1 DE102018213047 A1 DE 102018213047A1
Authority
DE
Germany
Prior art keywords
spinlock
global
local
spin lock
spinlocks
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.)
Pending
Application number
DE102018213047.7A
Other languages
English (en)
Inventor
Hubert Nueckel
Steven Shaw
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102018213047A1 publication Critical patent/DE102018213047A1/de
Pending legal-status Critical Current

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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multi Processors (AREA)

Abstract

Es werden Techniken offenbart, um skalierbare SpinLocks für einen nicht einheitlichen Speicherzugriff (non-uniform memory access - NUMA) bereitzustellen. In einigen Beispielen ist ein globales SpinLock bereitgestellt, konfiguriert, um den Zugriff auf eine gemeinsam nutzbare Ressource, die durch mehrere lokale SpinLocks geschützt ist, zu schützen, welche jeweils konfiguriert sind, den Zugriff auf das globale SpinLock zu steuern. In einem Mehrsockel- NUMA-System wird das globale SpinLock an einen der Sockel zugewiesen und die lokalen SpinLocks werden über die mehreren Sockel verteilt. Bei einigen Ausführungsformen ist ein lokales SpinLock an jeden der mehreren Sockel zugewiesen. Bei anderen Ausführungsformen können die mehreren lokalen SpinLocks über die NUMA-Sockel gleich verteilt sein. Wenn die Konflikte um das globale SpinLock niedrig sind, können Prozesse versuchen, das globale SpinLock direkt zu erlangen. Im Gegensatz dazu, wenn die Konflikte um das globale SpinLock hoch sind, müssen die Prozesse zuerst eins der lokalen, dem globalen SpinLock zugeordneten SpinLocks erlangen, bevor sie versuchen, das globale SpinLock zu erlangen.

Description

  • HINTERGRUND
  • Ein Mehrsockelsystem mit einem nicht einheitlichen Speicherzugriff (non-uniform memory access - NUMA) beinhaltet mehrere Prozessorsockel mit lokal angeschlossenem Speicher. Bei diesen NUMA-Mehrprozessorsystemen ist der Systemspeicher unter den mehreren Prozessorsockeln verteilt, und jeder Prozessorsockel verwaltet eine einzelne Untergruppe (z. B. den lokal angeschlossenen Speicher) aus dem gesamten Systemspeicherpool. Ein Ergebnis der verteilten Beschaffenheit des Systemspeichers besteht darin, dass die Speicher eine/n unterschiedliche/n Latenz oder „Zeitaufwand“ für ein Zugreifen auf den Speicher aufweisen können. Das heißt, dass ein Prozessorkern innerhalb eines Prozessors einen Zugriff von niedrigerer Latenz auf den Speicher haben kann, der sich lokal auf dem Prozessor befindet (den an den Prozessor angeschlossenen Speicher), verglichen mit dem Zugriff auf einen Speicher, der sich nicht lokal auf dem Prozessor befindet (z. B. einen an einen anderen Prozessor angeschlossenen Speicher).
  • Viele Unternehmensanwendungen wie etwa relationale Datenbankverwaltungssysteme (relational database management systems - RDBMS) sind auf Systemen installiert, die 2 bis 4 Prozessorsockel aufweisen. Die Nachfrage nach erhöhter Prozessorleistung hat ein Bedürfnis danach erschaffen, dass Anwendungen für hochzahlige Mehrsockelsysteme (z. B. Systeme, die 8, 16, 32 und mehr Prozessorsockel aufweisen) hochskalierbar sind.
  • Figurenliste
  • Es ist nicht beabsichtigt, dass die beigefügten Zeichnungen maßstabsgetreu gezeichnet sind. In den Zeichnungen ist jede gleiche oder fast gleiche Komponente, die in verschiedenen Figuren dargestellt ist, durch das gleiche Bezugszeichen wiedergegeben, wie es sich beim Lesen im Zusammenhang versteht.
    • 1 stellt eine beispielhafte Einrichtung skalierbarer SpinLocks in einem Mehrsockelsystem dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen.
    • 2 stellt ausgewählte Komponenten des Mehrsockelsystems von 1 dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen.
    • 3 stellt ausgewählte Felder einer globalen SpinLock-Struktur dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen.
    • 4 ist ein Flussdiagramm, das einen beispielhaften Prozess zum Einrichten von skalierbaren SpinLocks darstellt, um eine gemeinsam nutzbare Ressource zu schützen, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen.
    • 5A und 5B sind ein Flussdiagramm, das einen beispielhaften Prozess zum Erlangen eines globalen SpinLock darstellt, der eine gemeinsam nutzbare Ressource schützt, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen.
    • 6 stellt ausgewählte Komponenten eines beispielhaften Datenverarbeitungssystems dar, die verwendet werden können, um eine der in der vorliegenden Offenbarung verschiedentlich beschriebene Techniken wie gemäß mindestens einigen der hier beschriebenen Ausführungsformen durchzuführen.
  • In der folgenden ausführlichen Beschreibung wird Bezug auf die begleitenden Zeichnungen genommen, die einen Teil hiervon bilden. In den Zeichnungen kennzeichnen ähnliche Symbole in der Regel ähnliche Komponenten, sofern nicht aus dem Zusammenhang etwas anderes hervorgeht. Es ist nicht beabsichtigt, dass die in der ausführlichen Beschreibung, den Zeichnungen und den Ansprüchen beschriebenen Ausführungsformen einschränkend sind. Es können andere Ausführungsformen verwendet werden und andere Änderungen können vorgenommen werden, ohne vom Geist oder Umfang des hier dargelegten Gegenstands abzuweichen. Die Aspekte der vorliegenden Offenbarung, wie allgemein hier beschrieben und in den Figuren veranschaulicht, können in einer großen Vielfalt von unterschiedlichen Konfigurationen angeordnet, ersetzt, kombiniert, getrennt und konzipiert werden, von denen alle ausdrücklich hier erwogen sind.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Locks (wie Latches - Sperren) können zum Steuern des Zugriffs auf gemeinsam nutzbare Ressourcen verwendet werden. Ein Lock ist ein Synchronisierungsmechanismus zum Verstärken der Beschränkung des Zugangs zu einer gemeinsam nutzbaren Ressource und ist konzipiert, eine Steuerregelung zum wechselseitigen Ausschluss von Gleichzeitigkeit durchzusetzen. Ein Lock kann beispielsweise eingesetzt werden, um die Integrität einer gemeinsam nutzbaren Ressource zu schützen. Ein Prozess (oder ein Thread), der Zugang zu einer geschützten Ressource erfordert, erlangt das Lock, bevor er auf die geschützte Ressource zugreift. Sobald der Prozess das Lock erlangt hat, wird die geschützte Ressource „gesperrt“ (das Lock ist gesperrt), und dem Prozess wird ein exklusiver Zugriff auf die geschützte Ressource bereitgestellt. Jeder andere Prozess, der einen Zugriff auf die gesperrte geschützte Ressource erfordert, muss warten. Wenn ein exklusiver Zugriff auf die gesperrte geschützte Ressource nicht länger benötigt wird, gibt der das Lock „haltende“ Prozess (d. h. der Prozess, der das Lock erlangt hat) den Lock frei, wodurch die geschützte Ressource „entsperrt“ wird (entsperrt das Lock). Andere Prozesse können danach das Lock erlangen, um einen exklusiven Zugriff auf die geschützte Ressource zu erhalten. Ein SpinLock ist ein Lock, das einen Prozess, der versucht, das SpinLock zu erlangen, veranlasst, einfach in einer Schleife zu warten (z. B. eine Warteschleife zu laufen), während er wiederholt überprüft, ob das SpinLock verfügbar ist. Da der Prozess aktiv bleibt (z. B. einen hohen Prozentsatz des Prozessorkerns belegt, auf dem der Prozess läuft), jedoch während des Laufens der Warteschleife keine nützliche Aufgabe durchführt, eignen sich SpinLocks bei Fällen, in denen die erwartete Wartezeit (Warteschleifenlaufzeit) sehr kurz ist (z. B. in der Größenordnung von Nanosekunden).
  • Wie vorstehend angemerkt, können bei hochzahligen Mehrsockelsystemen die Prozessorkerne auf einem Sockel auf den Speicher zugreifen, der sich lokal auf dem Kern befindet, oder auch mit höherer Latenz auf den Speicher eines entfernten (anderen) Kerns zugreifen. Zum Skalieren von Anwendungen auf diesen höherzahligen Mehrsockelsystemen ist es notwendig, den Zugriff auf gemeinsam nutzbare Ressourcen über die mehreren Sockel hinweg erfolgreich zu synchronisieren. Auf Systemen mit hoher Sockelzahl können beträchtliche Unterschiede in der Latenz vorliegen. Eine Folge der unterschiedlichen Latenzen besteht darin, dass die Prozessorkerne, die auf einem Sockel laufen, der lokal für ein SpinLock ist, einer lokalen Präferenz für das SpinLock unterliegen verglichen mit Prozessorkernen, die auf einem Sockel laufen, der nicht lokal für das SpinLock ist. Dies kann dazu führen, dass die Prozessorkerne, die auf dem Sockel laufen, der nicht lokal für das SpinLock ist, während Perioden erhöhter SpinLock-Konflikte nach dem SpinLock (und der durch das SpinLock geschützten gemeinsam nutzbaren Ressource) „ausgehungert“ werden. Außerdem besteht das Problem der SpinLock-Migration, wenn mehrere Prozessorkerne auf verschiedenen Sockeln versuchen, dasselbe SpinLock zu erlangen, was zur Übertragung von Cache-Zeilen über das System hinweg sowie zur Invalidierung der Cache-Zeilen auf Prozessorkernen, die versuchen, dasselbe SpinLock zu erlangen, führt. Dies kann zu einer Zunahme der SpinLock-Konflikte auf hochzahligen Mehrsockelsystemen und letztendlich zu einem Fehlen an Skalierbarkeit führen, wo diese Konflikte und/oder diese Aushungerung eine gemeinsam nutzbare Ressource betreffen, die für die Skalierbarkeit wichtig sein kann. Somit ist ein Skalieren von SpinLocks ein Hauptaspekt zum Skalieren von Anwendungen, einschließlich Unternehmensanwendungen, auf hochzahligen Mehrsockelsystemen.
  • Zu diesem Ziel werden Techniken offenbart, um skalierbare SpinLocks für einen nicht einheitlichen Speicherzugriff (non-uniform memory access - NUMA) bereitzustellen. Eine Skalierbarkeit wird durch Umgeben eines globalen SpinLocks von mehreren lokalen SpinLocks erreicht, die jeweils konfiguriert sind, den Zugriff auf das globale SpinLock zu steuern. Auf diese Weise wird das globale SpinLock von den mehreren lokalen SpinLocks geschützt. In einer NUMA-Architektur wird das globale SpinLock beispielsweise an einen der NUMA-Sockel zugewiesen und ist durch mehrere lokale SpinLocks geschützt. Bei einigen Ausführungsformen wird ein lokales SpinLock an jeden NUMA-Sockel zugewiesen. Bei anderen Ausführungsformen können die mehreren lokalen SpinLocks gleichmäßig über die NUMA-Sockel verteilt sein. Ähnlich aktuellen Implementierungen von SpinLocks können Prozesse fortfahren, das globale SpinLock direkt zu erlangen, ohne zuerst ein lokales SpinLock zu erlangen. Dies gewährleistet das gleiche Leistungsniveau wie bei den aktuellen Implementierungen, wenn das SpinLock nicht belegt ist (der Konflikt für das SpinLock niedrig ist). Sobald ein Prozess das globale SpinLock direkt erlangt, setzt der Prozess eine Merker, um anzuzeigen, dass das globale SpinLock direkt erlangt wurde und nicht durch eins der lokalen SpinLocks, die das globale SpinLock schützen. Eine Merker, die beispielsweise „global erlangt“ anzeigt, kann gesetzt werden, um anzuzeigen, dass das globale SpinLock direkt erlangt wurde. Andere Prozesse, die versuchen, das globale SpinLock zu erlangen, können den Merker lesen, der anzeigt, dass das globale SpinLock global erlangt wurde. In diesem Zustand (in dem das globale SpinLock direkt erlangt wurde), können andere Prozesse ebenfalls versuchen, das globale SpinLock global zu erlangen. Sobald jedoch ein Prozess im Bemühen, das globale SpinLock zu erlangen, erfolglos eine vorbestimmte Anzahl von Malen Warteschleifen gelaufen ist, versucht der Prozess danach, eins der lokalen SpinLocks zu erlangen, die das globale SpinLock schützen. Dieses lokale SpinLock (d. h. das lokale SpinLock, das der Prozess zu erlangen versucht) wird zufällig ausgewählt und kann nicht notwendigerweise das lokale SpinLock auf demselben Sockel sein, auf dem der Prozess ausgeführt wird. Eine zufällige Auswahl eines lokalen SpinLocks gewährleistet, dass keine Präferenz an Prozesse gegeben wird, die auf demselben Sockel wie das globale SpinLock laufen (z. B. dem Sockel, an den das globale SpinLock zugewiesen ist). Wenn der Prozess es nicht schafft, ein lokales SpinLock zu erlangen, versucht der Prozess, ein anderes lokales SpinLock zu erlangen, welches das globale SpinLock schützt. Dieses lokale SpinLock wird ebenfalls zufällig gewählt. Sobald der Prozess ein lokales SpinLock, welches das globale SpinLock schützt, erlangt und hält, kann der Prozess danach versuchen, das globale SpinLock zu erlangen. Wenn es dem Prozess gelingt, das globale SpinLock zu erlangen, setzt der Prozess einen Merker, um anzuzeigen, dass das globale SpinLock erlangt wurde und von einem lokalen SpinLock-Halter gehalten wird. Ein Merker, der „lokal erlangt“ anzeigt, kann beispielsweise gesetzt werden, um anzuzeigen, dass das globale SpinLock von einem lokalen SpinLock-Halter erlangt wurde (erlangt durch ein lokales SpinLock, welches das globale SpinLock schützt). Jeder Prozess, der das globale SpinLock prüft und den Merker liest, der anzeigt, dass das globale SpinLock von einem lokalen SpinLock-Halter gehalten wird (dass das globale SpinLock lokal erlangt wurde), versucht danach, zuerst ein lokales SpinLock zu erlangen, ohne zu versuchen, das globale SpinLock direkt zu erlangen. Bei einigen Ausführungsformen kann ein globales SpinLock konfiguriert sein, nur von lokalen SpinLock-Haltern erlangbar zu sein. Wenn beispielsweise bekannt ist, dass das System in einem Zustand großer Konflikte um das globale SpinLock läuft, kann ein Systemadministrator das System konfigurieren, dass es Prozessen vorschreibt, dass sie ein lokales SpinLock erlangen, bevor sie versuchen, ein globales SpinLock zu erlangen.
  • Einer von vielen technischen Vorteilen besteht darin, dass, sobald die Arbeitsbelastung skaliert wird und zu einem Konflikt um das globale SpinLocks in einem System führt, das System automatisch seine Herangehensweise daran anpasst, wie globale SpinLocks erlangt werden. In einer Situation mit keinem Konflikt um das globale SpinLock arbeitet das System beispielsweise auf eine ähnliche Weise wie aktuelle Lösungen. Sobald jedoch ein Konflikt um das globale SpinLock detektiert wird, passt sich das System automatisch durch Anfordern der Erlangung eines lokalen SpinLocks an, um den Konflikt um das globale SpinLock zu reduzieren. In dem Fall, in dem ein lokales SpinLock an jeden NUMA-Sockel zugewiesen wird, gewährleistet dies, dass nicht mehr als die Anzahl von Prozessen, die gleich der der NUMA-Sockel ist, versuchen wird, das globale SpinLock zur gleichen Zeit zu erlangen. Außerdem, da die lokalen SpinLocks auf Zufallsbasis gewählt werden, wird keinem Prozess ein bevorzugter Zugriff bereitgestellt, weil er auf demselben Sockel wie das globale SpinLock läuft. Wenn bekannt ist, dass das System in eine Situation eines hohen Latch-Konfliktes läuft, wie etwa bei 8 oder mehr Sockeln, kann das System leicht auf eines angepasst werden, wobei der lokale Latch durch einen Systemparameter immer vor dem globalen Latch erlangt wird.
  • Wenn man sich nun den Figuren zuwendet, stellt 1 einen beispielhaften Einsatz von skalierbaren SpinLocks in einem Mehrsockelsystem 100 dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen. Das Mehrsockelsystem 100 ist ein NUMA-System, bei dem die Speicherzugriffszeit vom Standort oder der Entfernung des Speichers von einem Prozessor abhängt. Wie abgebildet, beinhaltet das Mehrsockelsystem 100 acht Sockel 102a-102h. Die Sockel 102a-102h können hier gemeinsam als die Sockel 102 bezeichnet werden oder hier einzeln als ein Sockel 102 bezeichnet werden. Die Sockel 102 können kommunikativ miteinander gekoppelt sein. Jeder Sockel 102 kann beispielsweise mit jedem der anderen Sockel 102 über eine Punkt-zu-Punkt-Intel® QuickPath Interconnect (QPI)-Verbindung verbunden sein. QPI ist eine geeignete Verbindungsarchitektur und weitere Verbindungsarchitekturen wie etwa andere Punkt-zu-Punkt-Architekturen, Ringarchitekturen und Busarchitekturen, um einige Beispiele zu nennen, sind vorgesehen. Die Anzahl der im Mehrsockelsystem 100 abgebildeten Sockel dient der Darstellung und Fachleute werden erkennen, dass eine unterschiedliche Anzahl von Sockeln vorliegen kann. Das Mehrsockelsystem 100 kann beispielsweise eine kleinere Anzahl von Sockeln beinhalten, wie etwa sechs, vier oder weniger, oder eine größere Anzahl von Sockeln, wie etwa sechzehn, zweiunddreißig oder mehr.
  • Das Mehrsockelsystem 100 beinhaltet auch ein globales SpinLock 104 und acht lokale SpinLocks 106a-106h. Die lokalen SpinLocks 106a-106h können hier gemeinsam als die lokalen SpinLocks 106 bezeichnet werden oder hier einzeln als ein lokales SpinLock 106 bezeichnet werden. Das globale SpinLock 104 wird an einen der Sockel 102 zugewiesen, konkret an den Sockel 102a, um den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern. Jedes lokale SpinLock 106 wird an einen jeweiligen Sockel 102 zugewiesen, um den Zugriff auf das globale SpinLock 106 zu steuern. Im Betrieb wird das globale SpinLock 104 durch lokale SpinLocks 106 geschützt, wie nachstehend näher erläutert wird. Das globale SpinLock 104 und die lokalen SpinLocks 106 können gemäß verschiedenen Ausführungsformen in Hardware, Software oder einer Kombination von sowohl Hardware als auch Software implementiert sein. Bei einigen Ausführungsformen handelt es sich bei dem globalen SpinLock 104 und den lokalen SpinLocks 106 jeweils um SpinLocks zum Testen (test) sowie zum Testen und zum Setzen (test-and-set). Ein Test- und Test-and-Set-SpinLock verwendet ein Eingangsprotokoll (z. B. test), um darauf zu warten, dass das Lock frei wird. Sobald das Eingangsprotokoll anzeigt, dass das Lock frei ist, wird eine Test-and-Set-Operation verwendet, um zu versuchen, das Lock zu erlangen. Das Ziel des Test- und Test-and-Set-SpinLocks besteht nicht darin, in Test-and-Set Warteschleifen zu laufen, sondern die Wahrscheinlichkeit eines erfolgreichen Test-and-Sets durch Verwenden des Eingangsprotokolls zu erhöhen. Bei anderen Ausführungsformen sind das globale SpinLock 104 und die lokalen SpinLocks 106 jeweils Test-and-Set-SpinLocks. Ein Test-and-Set-SpinLock verwendet zur Synchronisierung einen einzelnen gemeinsamen Speicherplatz. Der Test-and-Set-Befehl ist ein Befehl, der zum Schreiben von „1“ (set) in einen Speicherplatz verwendet wird und den Wert von dem Speicherplatz in einer einzelnen atomaren Operation zurückgibt. Das Lock ist erlangt, wenn der von dem Speicherplatz zurückgegebene Wert „0“ beträgt, anderenfalls wird eine Schleife gestartet (z. B. Laufen einer Warteschleife), während darauf gewartet wird, das Lock zu erlangen.
  • 2 stellt ausgewählte Komponenten des Mehrsockelsystems 100 von 1 dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen. Wie abgebildet, sind die Sockel 102 jeweils kommunikativ mit einer Verbindung 202 gekoppelt. Wie vorstehend beschrieben, kann die Verbindung 202 ein Punkt-zu-Punkt-QPI-Link sein. Die Sockel 102a-102h beinhalten jeweils die Prozessoren 204a-204h. Die Prozessoren 204a-204h können hier gemeinsam als die Prozessoren 204 bezeichnet werden oder einzeln als ein Prozessor 204 bezeichnet werden. Die Prozessoren 204a-204h sind kommunikativ mit jeweiligen Speichersteuerungen 206a-206h gekoppelt, die mit jeweiligen lokalen Speichern 208a-208h gekoppelt sind. Die Speichersteuerungen 206a-206h können hier gemeinsam als die Speichersteuerungen 206 bezeichnet werden oder hier einzeln als eine Speichersteuerung 206 bezeichnet werden. Ähnlich können die Speicher 208a-208h hier gemeinsam als die Speicher 208 bezeichnet werden oder hier einzeln als ein Speicher 208 bezeichnet werden. Bei verschiedenen Ausführungsformen können zusätzliche Komponenten (nicht dargestellt) oder eine Untergruppe der dargestellten Komponenten eingesetzt werden, ohne vom Umfang der offenbarten Ausführungsformen abzuweichen.
  • Der Prozessor 204 kann jede Prozessoreinheit beinhalten, die für eine Verwendung in einem Mehrsockelsystem geeignet ist, wie etwa einen Intel® PentiumD-Prozessor, einen Intel® Xeon®-Prozessor oder jeden anderen geeigneten Einkern- oder Mehrkernprozessor. Der Prozessor 204 kann jede Anzahl von Prozessoren und/oder Prozessorkernen beinhalten, die konfiguriert sind, einzeln oder gemeinsam jede Anzahl von in der vorliegenden Offenbarung beschriebenen Operationen durchzuführen oder deren Durchführung anzuweisen. Die Speichersteuerung 206 kann konfiguriert sein, den Datenfluss, der in den kommunikativ gekoppelten Speicher 208 hinein und aus demselben hinaus fließt, zu steuern und zu verwalten. Die Speichersteuerung 206 kann in den jeweiligen Prozessor 204 integriert sein und einen Teil davon bilden. Die Speichersteuerung 206a kann beispielsweise in den Prozessor 204a integriert sein und einen Teil davon bilden, die Speichersteuerung 206b kann in den Prozessor 204b integriert sein und einen Teil davon bilden und so weiter. Der Speicher 208 ist ein lokaler Sockelspeicher dahingehend, dass der Speicher 208 lokal an den jeweiligen Sockel 102 angeschlossen ist. Zum Beispiel ist der Speicher 208a lokal an den Sockel 102a angeschlossen, der Speicher 208b ist lokal an den Sockel 102ab angeschlossen und so weiter. Der Speicher 208 kann flüchtigen Speicher, nichtflüchtigen Speicher oder eine Kombination aus flüchtigem und nichtflüchtigem Speicher beinhalten. Der Speicher 208 kann einen Teil des gesamten Systemspeichers bilden.
  • Der Speicher 206a kann ein SpinLock-Verwendungsmodul 210 beinhalten. Das SpinLock-Verwendungsmodul 210 kann eine Softwareanwendung wie etwa eine Datenbankserveranwendung sein, die SpinLocks zum Steuern des Zugriffs auf gemeinsam nutzbare Ressourcen verwendet. In einer beispielhaften Operation für skalierbare SpinLocks wie hier beschrieben, bestimmt das SpinLock-Verwendungsmodul 210, das als ein Prozess auf dem Prozessor 204a läuft, dass acht Sockel 102a-102h vorliegen, und weist das globale SpinLock 104, das konfiguriert ist, den Zugriff auf einen spezifischen Bereich des Speichers 208a auf dem Sockel zu steuern, zu. Dies ist dadurch gezeigt, dass das globale SpinLock 104 im Speicher 208a beinhaltet ist. Gleichzeitig mit der Zuweisung des globalen SpinLocks 104 weist das SpinLock-Verwendungsmodul 210 ein lokales SpinLock 106 an jeden Sockel 102 zu. Dies ist dadurch gezeigt, dass die lokalen SpinLocks 106a-106h jeweils in den Speichern 208a-208h beinhaltet sind. Jedes lokale SpinLock 106 ist konfiguriert, den Zugriff auf das globale SpinLock 104 zu steuern. Fachleute werden erkennen, dass das SpinLock-Verwendungsmodul 210 ein oder mehrere andere globale SpinLocks zuweisen können, einschließlich mehrerer lokaler SpinLocks, die jedem globalen SpinLock zugeordnet sind, um zusätzlich zum globalen SpinLock 104 und den zugeordneten lokalen SpinLocks 106 weitere gemeinsam nutzbare Ressourcen zu schützen. In ähnlicher Weise können ein oder mehrere weitere Prozesse gleichermaßen jeweils ein oder mehrere globale SpinLocks zuweisen, einschließlich mehrerer lokaler SpinLocks, die jedem globalen SpinLock zugeordnet sind, um gemeinsam nutzbare Ressourcen auf dem Mehrsockelsystem 100 zu schützen. Dementsprechend sind das globale SpinLock 104 und zugeordnete lokale SpinLocks 106 als ein Beispiel für ein skalierbares SpinLock bereitgestellt, um eine gemeinsam nutzbare Ressource auf dem Mehrsockelsystem 100 zu schützen, und das Mehrsockelsystem 100 kann zusätzlich zum globalen SpinLock 104 und dem zugeordneten lokalen SpinLock 106 eine große Anzahl von globalen SpinLocks und zugeordneten lokalen SpinLocks beinhalten.
  • Bei einem NUMA-System wie etwa dem Mehrsockelsystem 100 kann ein auf einem Kern an einem Sockel (z. B. dem Sockel 102a) laufender Prozess auf den gesamten Speicher im Mehrsockelsystem 100 zugreifen. Dieser Prozess kann jedoch auf den lokalen Speicher, der an den Sockel angeschlossen ist, auf dem der Prozess läuft (z. B. den von der Speichersteuerung 206a verwalteten Speicher 208a auf dem Sockel 102a) viel schneller zugreifen. Wenn dieser Prozess auf einen entfernten Speicher (z. B. einen Speicher, der an einen anderen Sockel angeschlossen ist) zugreift, muss der Prozess auf den entfernten Speicher über die Speichersteuerung auf einem anderen Sockel zugreifen, wodurch zusätzliche Rechenarbeit hinzukommt und den Zugriff verlangsamt.
  • 3 stellt ausgewählte Felder einer beispielhaften globalen SpinLock-Struktur 300 dar, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen. Die globale SpinLock-Struktur 300 wird mit Indikatoren erweitert, um anzuzeigen, ob der globale SpinLock global erlangt wurde oder lokal erlangt wurde. Wie abgebildet, kann die globale SpinLock-Struktur 300 eine SpinLock-ID 302, einen global erlangten Merker 304 und einen lokal erlangten Merker 306 beinhalten. Die SpinLock-ID 302 ist eine Kennung, die eindeutig einen Fall von globalem SpinLock erkennt. Ein global erlangter Merker 304 ist ein Merker, der, wenn er gesetzt ist, anzeigt, dass das globale SpinLock direkt und nicht durch ein lokales SpinLock erlangt wurde. Ein global erlangtes globales SpinLock wurde direkt durch einen Prozess erlangt, ohne dass der Prozess zuerst ein lokales SpinLock zu erlangen hatte. Ein lokal erlangter Merker 306 ist ein Merker, der, wenn er gesetzt ist, anzeigt, dass das globale SpinLock durch einen lokalen SpinLock-Halter erlangt wurde. Ein lokal erlangtes globales SpinLock wurde indirekt durch einen Prozess erlangt, indem er zuerst ein lokales, das globale SpinLock schützendes SpinLock erlangen musste. Die globale SpinLock-Struktur 300 kann weitere Informationen beinhalten, wie etwa Informationen dazu, ob das globale SpinLock „gesperrt“ oder „nicht gesperrt“ ist, Informationen dazu, ob das globale SpinLock von einem jeglichen Prozess gehalten wird, und Informationen dazu, ob das globale SpinLock vom aktuellen Prozess gehalten wird, um ein paar Beispiele zu nennen.
  • 4 ist ein Flussdiagramm 400, das einen beispielhaften Prozess zum Einsetzen von skalierbaren SpinLocks für eine gemeinsam nutzbare Ressource darstellt, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen. Die durch den beispielhaften Prozess aus dem Flussdiagramm 400 dargestellten Operationen, Funktionen oder Aktionen können bei einigen Ausführungsformen von dem Mehrsockelsystem 100 und insbesondere dem SpinLock-Verwendungsmodul 210 von 2 durchgeführt werden. Die in den jeweiligen Blöcken des beispielhaften Prozesses beschriebenen Operationen, Funktionen oder Aktionen können auch als computerausführbare Befehle in einem computerlesbaren Medium wie etwa dem Speicher 208 des Sockels 102 gespeichert werden. Es versteht sich jedoch, dass der beispielhafte Prozess aus dem Flussdiagramm 400 von Prozessen ausgeführt werden kann, die von dem SpinLock-Verwendungsmodul 210 verschieden sind.
  • Wie durch das Flussdiagramm 400 abgebildet, kann der beispielhafte Prozess zum Einsetzen skalierbarer SpinLocks zum Schützen einer gemeinsam nutzbaren Ressource bei Block 402 beginnen, wobei das SpinLock-Verwendungsmodul 210 (ein ausgeführter Prozess des SpinLock-Verwendungsmoduls 210) die Anzahl der Sockel in dem Mehrsockelsystem feststellt, auf dem das SpinLock-Verwendungsmodul 210 läuft. Die Anzahl von Sockeln kann beispielsweise durch Verwenden von zugrundeliegenden, durch das Mehrsockelsystem bereitgestellte Dienste festgestellt werden.
  • Block 402 kann von Block 404 gefolgt sein, wobei das SpinLock-Verwendungsmodul 210 ein globales SpinLock zuweist, das konfiguriert ist, den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern. Beispiele für eine gemeinsam nutzbare Ressource beinhalten ohne Einschränkung Speicherorte, -schnittstellen, -geräte usw. Bei einigen Ausführungsformen kann das SpinLock-Verwendungsmodul 210 das globale SpinLock an den Sockel, auf dem das SpinLock-Verwendungsmodul 210 läuft, zuweisen. Bei anderen Ausführungsformen kann das SpinLock-Verwendungsmodul 210 das globale SpinLock an einen von dem Sockel, auf dem das SpinLock-Verwendungsmodul 210 läuft, verschiedenen Sockel zuweisen. In einem allgemeineren Sinn kann das globale SpinLock an jeden der Sockel zugewiesen werden.
  • Block 404 kann von Block 406 gefolgt sein, wobei das SpinLock-Verwendungsmodul 210 mehrere lokale, dem zugewiesenen globalen SpinLock zugeordnete SpinLocks zuweist. Jedes der mehreren lokalen SpinLocks ist konfiguriert, den Zugriff auf das zugeordnete globalen SpinLock zu steuern. Bei einigen Ausführungsformen weist das SpinLock-Verwendungsmodul 210 eine Anzahl von SpinLocks zu, sodass sie gleich der Anzahl von Sockeln sind, und weist ein lokales SpinLock an jeden Sockel des Mehrsockelsystems zu. Im Falle des Mehrsockelsystems 100 weist das SpinLock-Verwendungsmodul 210 beispielsweise acht lokale SpinLocks zu, ein lokales SpinLock an jeden Sockel 102. Bei einigen Ausführungsformen kann das SpinLock-Verwendungsmodul 210 eine Anzahl von SpinLocks zuweisen, die von der Anzahl von Sockeln verschieden ist, und die Anzahl von SpinLocks unter den Sockeln verteilen. Das SpinLock-Verwendungsmodul 210 kann beispielsweise die lokalen SpinLocks unter den Sockeln gleich verteilen. Das SpinLock-Verwendungsmodul 210 kann die Blöcke 402 und 404 wiederholen, um skalierbare SpinLocks (ein globales SpinLock und mehrere zugeordnete lokale SpinLocks) zuzuweisen, um den Zugriff auf andere gemeinsam nutzbare Ressourcen nach Bedarf zu steuern.
  • Fachleute werden erkennen, dass die in den Prozessen und Verfahren durchgeführten Funktionen bei diesem und anderen hier offenbarten Prozessen und Verfahren in einer anderen Reihenfolge implementiert sein können. Zusätzlich oder alternativ dazu können zwei oder mehrere Operationen zur gleichen Zeit durchgeführt werden. Ferner sind die skizzierten Aktionen und Operationen lediglich als Beispiele bereitgestellt und einige der Aktionen und Operationen können optional, zu weniger Aktionen und Operationen kombiniert oder auf zusätzliche Aktionen und Operationen erweitert sein, ohne vom Kern der offenbarten Ausführungsformen abzulenken.
  • 5A und 5B sind ein Flussdiagramm 500, das einen beispielhaften Prozess zum Erlangen eines globalen SpinLocks für eine gemeinsam nutzbare Ressource darstellt, angeordnet gemäß mindestens einigen der hier beschriebenen Ausführungsformen. Die durch den beispielhaften Prozess aus dem Flussdiagramm 500 dargestellten Operationen, Funktionen oder Aktionen können bei einigen Ausführungsformen durch das Mehrsockelsystem 100 und insbesondere das SpinLock-Verwendungsmodul 210 von 2 durchgeführt werden. Die in den jeweiligen Blöcken des beispielhaften Prozesses beschriebenen Operationen, Funktionen oder Aktionen können auch als computerausführbare Befehle in einem computerlesbaren Medium wie etwa dem Speicher 208 von Sockel 102 gespeichert sein. Es versteht sich jedoch, dass der beispielhafte Prozess aus dem Flussdiagramm 500 von Prozessen ausgeführt werden kann, die von dem SpinLock-Verwendungsmodul 210 verschieden sind.
  • Wie durch das Flussdiagramm 500 abgebildet, kann der beispielhafte Prozess zum Erlangen eines globalen SpinLocks, das eine gemeinsam nutzbare Ressource schützt, bei Block 502 beginnen, wobei das SpinLock-Verwendungsmodul 210 (ein ausgeführter Prozess des SpinLock-Verwendungsmoduls 210) versucht, ein globales SpinLock zu erlangen (global zu erlangen). Das globale SpinLock kann beispielsweise den Zugriff auf eine gemeinsam nutzbare Ressource steuern und das SpinLock-Verwendungsmodul 210 kann versuchen, das globale SpinLock zu erlangen, um auf die gemeinsam nutzbare Ressource zuzugreifen.
  • Block 502 kann vom Entscheidungsblock 504 gefolgt sein, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 das globale SpinLock erlangt hat (global erlangt hat). Wenn das SpinLock-Verwendungsmodul 210 festgestellt hat, dass es das globale SpinLock erlangt hat, kann der Entscheidungsblock 504 von Block 506 gefolgt sein, wobei das SpinLock-Verwendungsmodul 210 einen global erlangten Merker setzt, um anzuzeigen, dass das globale SpinLock direkt erlangt wurde, ohne zuerst einen der zugeordneten lokalen SpinLocks erlangen zu müssen. In diesem Fall ist das globale SpinLock gesperrt und das SpinLock-Verwendungsmodul 210 erlangt die exklusive Nutzung der gemeinsam nutzbaren Ressource. Das SpinLock-Verwendungsmodul 210 kann das globale SpinLock entsperren, wenn das SpinLock-Verwendungsmodul 210 nicht länger den exklusiven Zugriff auf die gemeinsam nutzbare Ressource benötigt.
  • Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 bei Entscheidungsblock 504 feststellt, dass es das globale SpinLock nicht erlangt hat (das SpinLock-Verwendungsmodul 210 war beim Erlangen des globalen SpinLocks nicht erfolgreich), kann der Entscheidungsblock 504 von Block 508 gefolgt sein, wobei das SpinLock-Verwendungsmodul 210 weiter auf dem globalen SpinLock Warteschleifen läuft. Das heißt, das SpinLock-Verwendungsmodul 210 läuft Warteschleifen, während es wiederholt versucht, das globale SpinLock zu erlangen.
  • Dementsprechend kann auf den Block 508 der Entscheidungsblock 510 folgen, bei dem das SpinLock-Verwendungsmodul 210 den global erlangten Merker und den lokale erlangten Merker des globalen SpinLocks prüft. Wenn das SpinLock-Verwendungsmodul 210 bei Entscheidungsblock 510 feststellt, dass der global erlangte Merker gesetzt ist (das globale SpinLock wird von einem Prozess gehalten, welcher das globale SpinLock direkt erlangt hat), kann auf den Entscheidungsblock 510 der Entscheidungsblock 512 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 im Versuchen, das globale SpinLock zu erlangen, eine spezifische Anzahl von Malen X Warteschleifen gelaufen ist. Die spezifische Anzahl X gibt eine Begrenzung der Anzahl von Warteschleifen an, die ein Prozess vornehmen kann im Versuchen, das globale SpinLock direkt zu erlangen. Die spezifische Anzahl X dient als eine Grenze, sodass ein Prozess im Versuchen, das globale SpinLock direkt zu erlangen, nicht unendlich Warteschleifen laufen kann. Die spezifische Anzahl X kann von einem Benutzer wie etwa dem Programmierer des SpinLock-Verwendungsmoduls 210, eingestellt werden.
  • Wenn das SpinLock-Verwendungsmodul 210 bei Entscheidungsblock 512 feststellt, dass es nicht über die zugeteilte spezifische Anzahl X hinaus Warteschleifen gelaufen ist, kann danach auf den Entscheidungsblock 512 der Block 508 folgen, dessen Operation vorstehend beschrieben wurde. In diesem Fall kann das SpinLock-Verwendungsmodul 210 fortfahren, auf dem globalen SpinLock Warteschleifen zu laufen (fortfahren mit dem Laufen von Warteschleifen im Versuchen, das globale SpinLock zu erlangen). Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es über die zugeteilte spezifische Anzahl X hinaus Warteschleifen gelaufen ist, kann danach auf den Entscheidungsblock 512 der Block 514 folgen, wobei das SpinLock-Verwendungsmodul 210 versucht, ein lokales, dem globalen SpinLock zugeordnetes SpinLock zu erlangen. In diesem Fall kann das SpinLock-Verwendungsmodul 210 nicht länger fortfahren, auf dem globalen SpinLock Warteschleifen zu laufen (kann nicht fortfahren, Warteschleifen zu laufen im Versuchen, das globale SpinLock zu erlangen), sondern muss zunächst einen der lokalen, dem globalen SpinLock zugeordneten SpinLocks erlangen. Das lokale, dem globalen SpinLock zugeordnete SpinLock ist konfiguriert, den Zugriff auf das globale SpinLock zu schützen. Bei einigen Ausführungsformen wird das lokale SpinLock zufällig aus den vielen lokalen, dem globalen SpinLock zugeordneten SpinLocks ausgewählt. Zum Beispiel kann der Prozessor, auf dem das SpinLock-Verwendungsmodul 210 ausgeführt wird, einen Prozessorbefehl (CPU-Befehl) bereitstellen, der zum zufälligen Auswählen eines der lokalen SpinLocks verwendet werden kann.
  • Unter erneuter Bezugnahme auf den Entscheidungsblock 510, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass der lokal erlangte Merker gesetzt wurde (das globale SpinLock wird von einem Prozess gehalten, der zuerst eins der lokalen, dem globalen SpinLock zugeordneten SpinLocks erlangt hat), kann auf den Entscheidungsblock 510 der Block 514 folgen, wobei das SpinLock-Verwendungsmodul 210 versucht, ein lokales, dem globalen SpinLock zugeordnetes SpinLock zu erlangen. In diesem Fall weiß das SpinLock-Verwendungsmodul 210, dass es zuerst eins der lokalen, dem globalen SpinLock zugeordneten SpinLocks erlangen muss, bevor es versuchen kann, das globale SpinLock zu erlangen. Der lokal erlangte, gesetzte Merker zeigt dem SpinLock-Verwendungsmodul 210 an, dass der Konflikt für das globale SpinLock hoch ist und dass das globale SpinLock nur durch lokale SpinLock-Halter erwerbbar ist.
  • Unter erneuter Bezugnahme auf den Entscheidungsblock 510 kann, wenn das SpinLock-Verwendungsmodul 210 festgestellt hat, dass der global erlangte Merker und der lokal erlangte Merker nicht gesetzt werden (das globale SpinLock verfügbar ist), auf den Entscheidungsblock 510 der Entscheidungsblock 516 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 das globale SpinLock erlangt. In diesem Fall ist das SpinLock-Verwendungsmodul im Versuchen, das globale SpinLock zu erlangen, Warteschleifen gelaufen. Darüber hinaus können andere Prozesse außer dem SpinLock-Verwendungsmodul 210 versucht haben, das globale SpinLock zu erlangen. Wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es das globale SpinLock erlangt hat, kann auf den Entscheidungsblock 516 der Block 506 folgen, wobei das SpinLock-Verwendungsmodul 210 einen global erlangten Merker setzt, um anzuzeigen, dass das globale SpinLock direkt erlangt wurde, ohne zunächst eins der zugeordneten lokalen SpinLocks zu erlangen. Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es das globale SpinLock nicht erlangt hat (das SpinLock-Verwendungsmodul 210 war nicht erfolgreich beim Erlangen des globalen SpinLocks), kann auf den Entscheidungsblock 516 der Entscheidungsblock 512 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 im Versuchen, das globale SpinLock zu erlangen, über die zugeteilte spezifische Anzahl X hinaus Warteschleifen gelaufen ist.
  • Unter erneuter Bezugnahme auf Block 514 kann auf den Block 514 der Entscheidungsblock 516 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 das lokale SpinLock erlangt hat. Wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es das lokale SpinLock erlangt hat, kann danach auf den Entscheidungsblock 516 der Entscheidungsblock 518 folgen, wobei das SpinLock-Verwendungsmodul 210 den global erlangten Merker und den lokal erlangten Merker des globalen SpinLocks prüft (wobei das globale SpinLock durch das lokale SpinLock geschützt ist). Wenn bei dem Entscheidungsblock 518 das SpinLock-Verwendungsmodul 210 feststellt, dass entweder der global erlangte Merker gesetzt ist (das globale SpinLock wird von einem Prozess gehalten, welches das globale SpinLock direkt erlangt hat) oder der lokal erlangte Merker gesetzt ist (das globale SpinLock ist von einem Prozess gehalten, der zuerst eins der lokalen, dem globalen SpinLock zugeordneten SpinLocks erlangt hat), kann auf den Entscheidungsblock 518 der Entscheidungsblock 520 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 im Versuchen, das globale SpinLock zu erlangen, eine spezifische Anzahl von Malen Y Warteschleifen gelaufen ist. Die spezifische Anzahl Y spezifiziert eine Begrenzung der Anzahl von Warteschleifen, die der Prozess, der ein lokales SpinLock hält, im Versuchen, das globale SpinLock zu erlangen, vornehmen kann. Die spezifische Anzahl Y dient als eine Begrenzung, sodass ein Prozess, der ein lokales SpinLock hält, im Versuchen, das globale SpinLock als ein lokaler SpinLock-Halter zu erlangen, nicht unendlich Warteschleifen laufen kann. Die spezifische Anzahl Y kann von einem Benutzer wie etwa dem Programmierer des SpinLock-Verwendungsmoduls 210 eingestellt werden.
  • Wenn das SpinLock-Verwendungsmodul 210 bei Entscheidungsblock 520 feststellt, dass es nicht über die zugeteilte spezifische Anzahl Y hinaus Warteschleifen gelaufen ist, kann danach auf den Entscheidungsblock 520 der Entscheidungsblock 518 folgen, dessen Operation vorstehend beschrieben ist. In diesem Fall kann das SpinLock-Verwendungsmodul 210 mit dem Laufen von Warteschleifen fortfahren, wobei es den global erlangten Merker und den lokal erlangten Merker des globalen SpinLocks prüft. Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es über die zugeteilte spezifische Anzahl Y hinaus Warteschleifen gelaufen ist, kann danach auf den Entscheidungsblock 520 der Block 522 folgen, wobei das SpinLock-Verwendungsmodul 210 das lokale SpinLock freigibt, das von dem SpinLock-Verwendungsmodul 210 erlangt wurde und von diesem gehalten wird. In diesem Fall ist das SpinLock-Verwendungsmodul im Versuchen, das globale SpinLock als ein Halter eines lokalen SpinLocks zu erlangen, die zugeteilte Anzahl von Malen Warteschleifen gelaufen und kann keine weiteren Versuche durchführen, um das globale SpinLock als ein Halter eines lokalen SpinLocks zu erlangen.
  • Auf Block 522 kann Block 524 folgen, in welchem das SpinLock-Verwendungsmodul 210 schläft (in einen Schlafzustand eintritt) als eine Folge, dass es nicht in der Lage war, das globale SpinLock als ein Halter eines lokalen SpinLocks zu erlangen. Der Schlafzustand kann durch einen Zeitraum oder Taktzyklen definiert sein. Der Schlafzustand kann ebenfalls einen Back-off-Algorithmus beinhalten, sodass, wenn zuvor ein Schlaf aufgetreten ist, das SpinLock-Verwendungsmodul 210 bei aufeinanderfolgenden Schlafperioden für einen längeren Zeitraum schlafen wird.
  • Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 bei Entscheidungsblock 518 feststellt, dass der global erlangte Merker und der lokal erlangte Merker nicht gesetzt sind (das globale SpinLock verfügbar ist), kann auf Entscheidungsblock 518 der Entscheidungsblock 526 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 das globale SpinLock erlangt (lokal erlangt) hat. In diesem Fall ist die SpinLock-Verwendung im Versuchen, das globale SpinLock als ein lokaler SpinLock-Halter zu erlangen (lokal zu erlangen), Warteschleifen gelaufen. Darüber hinaus können andere Prozesse außer dem SpinLock-Verwendungsmodul 210 versucht haben, das globale SpinLock zu erlangen. Wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es das globale SpinLock erlangt hat, kann auf den Entscheidungsblock 526 der Block 528 folgen, wobei das SpinLock-Verwendungsmodul 210 einen lokal erlangten Merker setzt, um anzuzeigen, dass das globale SpinLock nicht direkt erlangt wurde, sondern erlangt wurde, indem zuerst eins der zugeordneten lokalen SpinLocks erlangt wurde. Das heißt, dass das globale SpinLock durch einen lokalen SpinLock-Halter erlangt wurde. Auf Block 528 kann Block 530 folgen, wobei das SpinLock-Verwendungsmodul 210 das lokale SpinLock, das erlangt wurde und von dem SpinLock-Verwendungsmodul 210 gehalten wird, freigibt. Das SpinLock-Verwendungsmodul 210 kann das lokale SpinLock freigeben, wenn das SpinLock-Verwendungsmodul 210 das globale SpinLock erfolgreich erlangt hat.
  • Anderenfalls, wenn bei Entscheidungsblock 526 das SpinLock-Verwendungsmodul 210 feststellt, dass es das globale SpinLock nicht erlangt hat (das SpinLock-Verwendungsmodul 210 war beim Erlangen des globalen SpinLocks als ein lokaler SpinLock-Halter nicht erfolgreich), kann auf den Entscheidungsblock 526 der Entscheidungsblock 520 folgen, wobei das SpinLock-Verwendungsmodul 210, dessen Operation vorstehend beschrieben ist. In diesem Fall prüft das SpinLock-Verwendungsmodul 210, um festzustellen, ob das SpinLock-Verwendungsmodul 210 im Versuchen, das globale SpinLock als ein lokaler SpinLock Halter zu erlangen, über die zugeteilte spezifische Anzahl Y hinaus Warteschleifen gelaufen ist.
  • Unter erneuter Bezugnahme auf den Entscheidungsblock 516, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es beim Erlangen des lokalen SpinLocks nicht erfolgreich war, kann auf den Entscheidungsblock 516 der Entscheidungsblock 532 folgen, wobei das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob das SpinLock-Verwendungsmodul 210 versucht hat, alle lokalen, dem globalen SpinLock zugeordneten SpinLocks zu erlangen. Das heißt, das SpinLock-Verwendungsmodul 210 prüft, um festzustellen, ob es ein anderes der mehreren lokalen SpinLocks gibt, welches das SpinLock-Verwendungsmodul 210 versuchen kann zu erlangen. Wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es versucht hat, alle lokalen, dem globalen SpinLock zugeordneten SpinLocks zu erlangen, kann auf den Entscheidungsblock 532 der Block 534 folgen, bei dem das SpinLock-Verwendungsmodul 210 schläft (in einen Schlafzustand eintritt) als eine Folge dessen, dass es nicht in der Lage war, eins der lokalen, dem globalen SpinLock zugeordneten SpinLocks zu erlangen (nicht in der Lage war, eins der lokalen SpinLocks zu erlangen, die den Zugriff auf das globale SpinLock schützen).
  • Anderenfalls, wenn das SpinLock-Verwendungsmodul 210 feststellt, dass es ein anderes lokales SpinLock der mehreren lokalen, dem globalen SpinLock zugeordneten SpinLocks gibt, kann auf den Entscheidungsblock 532 der Block 536 folgen, bei dem das SpinLock-Verwendungsmodul 210 versucht, ein anderes lokales, dem globalen SpinLock zugeordnetes SpinLock zu erlangen. Bei einigen Ausführungsformen wird dieses andere lokale SpinLock auch aus den mehreren verbleibenden lokalen, dem globalen SpinLock zugeordneten SpinLocks zufällig ausgewählt. Auf Block 536 kann der Entscheidungsblock 516 folgen, dessen Operation vorstehend beschrieben ist.
  • 6 stellt ausgewählte Komponenten eines beispielhaften Datenverarbeitungssystems 600 dar, die verwendet werden können, eine der Techniken durchzuführen, wie in dieser Offenbarung verschiedentlich beschrieben. Bei einigen Ausführungsformen kann das Datenverarbeitungssystem 600 konfiguriert sein, eine oder mehrere einer oder allen der mit den skalierbaren SpinLocks aus 1 zugeordneten Komponenten und/oder Modulen zugeordnete Operationen zu implementieren oder anzuweisen. Das SpinLock-Verwendungsmodul 210, das globale SpinLock 104, die lokalen SpinLocks 106 oder jede Kombination derselben können beispielsweise in dem Datenverarbeitungssystem 600 implementiert sein und/oder dasselbe verwenden. In einem beispielhaften Fall wird beispielsweise jedes aus dem SpinLock-Verwendungsmodul 210, dem globalen SpinLock 104 und den lokalen SpinLocks 106 in einen Speicher 604 geladen und ist durch einen Prozessor 602 ausführbar. Das Datenverarbeitungssystem 600 kann jedes Computersystem wie etwa eine Arbeitsstation, ein Server oder eine andere Form von Datenverarbeitungs- oder Telekommunikationsvorrichtung sein, die mehrere Sockel einsetzt und kommunikationsfähig ist sowie eine ausreichende Prozessorleistung und Speicherkapazität aufweist, um die in dieser Offenbarung beschriebenen Operationen durchzuführen. Ein verteiltes Rechensystem kann bereitgestellt sein, das ein Vielfaches solcher Datenverarbeitungsvorrichtungen beinhaltet. Wie abgebildet, kann das Datenverarbeitungssystem 600 einen Prozessor 602, einen Speicher 604 und einen Datenspeicher 606 beinhalten. Der Prozessor 602, der Speicher 604 und der Datenspeicher 606 können kommunikativ gekoppelt sein.
  • Im Allgemeinen kann der Prozessor 602 jeden geeigneten Spezialzweck- oder Allzweck-Computer, Datenverarbeitungseinheit oder Datenverarbeitungs- oder Verarbeitungsvorrichtung einschließlich verschiedener Computerhardware, -firmware oder -softwaremodule beinhalten und kann konfiguriert sein, Befehle auszuführen, wie etwa Programmbefehle, die auf jeglichen anwendbaren computerlesbaren Speichermedien gespeichert sind. Der Prozessor 602 kann beispielsweise einen Mikroprozessor, einen Mikrocontroller, einen digitalen Signalprozessor (DSP), eine anwendungsspezifische integrierte Schaltung (application-specific integrated circuit - ASIC), ein feldprogrammierbares Gate-Array (Field-Programmable Gate Array - FPGA) oder jede andere digitale oder analoge Schaltung beinhalten, die konfiguriert ist, Programmbefehle zu interpretieren und/oder auszuführen und/oder Daten zu verarbeiten. Bei einigen Ausführungsformen beinhaltet der Prozessor 602 jeden geeigneten Einkern- oder Mehrkernprozessor, der zur Verwendung in einem Mehrsockelsystem geeignet ist, einschließlich des Prozessors 204. Obwohl als ein einzelner Prozessor in 6 dargestellt, kann der Prozessor 602 jede Anzahl von Prozessoren und/oder Prozessorkernen beinhalten, die konfiguriert sind, einzeln oder gemeinsam jede Anzahl von in der vorliegenden Beschreibung beschriebenen Operationen durchzuführen oder anzuweisen. Außerdem kann einer oder mehrere der Prozessoren auf einer oder mehreren verschiedenen Vorrichtungen, wie etwa verschiedenen Servern, vorhanden sein
  • Bei einigen Ausführungsformen kann der Prozessor 602 konfiguriert sein, Programmbefehle und/oder Prozessdaten zu interpretieren und/oder auszuführen, die im Speicher 604, im Datenspeicher 606 oder sowohl im Speicher 604 als auch im Datenspeicher 606 gespeichert sind. Bei einigen Ausführungsformen kann der Prozessor 602 Programmbefehle aus dem Datenspeicher 606 abrufen und die Programmbefehle in den Speicher 604 laden. Nachdem die Programmbefehle in den Speicher 604 geladen wurden, kann der Prozessor 602 die Programmbefehle ausführen.
  • Bei einigen Ausführungsformen können beispielsweise einer oder mehrere der Komponenten und/oder Module der skalierbaren SpinLocks, einschließlich des SpinLock-Verwendungsmoduls 210, in den Datenspeicher 606 als Programmbefehle aufgenommen werden. Der Prozessor 602 kann einige oder alle der Programmbefehle aus dem Datenspeicher 606 abrufen und kann die abgerufenen Programmbefehle in den Speicher 604 laden. Nach dem Laden der Programmbefehle in den Speicher 604 kann der Prozessor 602 die Programmbefehle so ausführen, dass das Datenverarbeitungssystem die Operationen wie durch die Befehle angewiesen implementieren kann.
  • Bei einigen Ausführungsformen kann bei der Datenverarbeitungsvorrichtung 600 eine Virtualisierung eingesetzt werden, sodass Infrastruktur und Ressourcen in der Datenverarbeitungsvorrichtung 600 dynamisch gemeinsam genutzt werden können. Es kann beispielsweise eine virtuelle Maschine bereitgestellt sein, um einen Prozess, der auf mehreren Prozessoren läuft, zu bearbeiten, sodass es erscheint, als ob der Prozess an Stelle von mehreren Datenverarbeitungsressourcen nur eine Datenverarbeitungsressource verwendet. Mehrere virtuelle Maschinen können ebenfalls mit einem Prozessor verwendet werden.
  • Der Speicher 604 und der Datenspeicher 606 können computerlesbare Speichermedien beinhalten, die computerausführbare Befehle oder Datenstrukturen tragen oder dieselben darauf gespeichert haben. Solche computerlesbaren Speichermedien können jegliche verfügbare Medien beinhalten, auf die von einem Allzweck- oder Spezialzweckcomputer zugegriffen werden kann, wie etwa dem Prozessor 602. Beispielhaft und nicht einschränkend können solche computerlesbaren Speichermedien nichtflüchtige computerlesbare Speichermedien beinhalten, einschließlich Direktzugriffsspeicher (Random Access Memory - RAM), Nurlesespeicher (Read-Only Memory - ROM), Elektrisch löschbaren programmierbaren Nurlesespeicher (Electrically Erasable Programmable Read-Only Memory - EEPROM), Compact Disc-Nurlesespeicher (Compact Disk Read-Only Memory - CD-ROM) oder andere optische Plattenspeicher, magnetische Plattenspeicher oder andere magnetische Speichervorrichtungen, Flash-Speichervorrichtungen (z. B. Solid-State-Speichervorrichtungen) oder jedes andere Speichermedium, das verwendet werden kann, um spezifischen Programmcode in Form von computerausführbaren Befehlen oder Datenstrukturen zu tragen oder zu speichern, und auf das von einem Allzweck- oder Spezialzweckcomputer zugegriffen werden kann. Kombinationen des Vorstehenden können auch innerhalb des Umfangs der computerlesbaren Speichermedien beinhaltet sein. Computerausführbare Befehle können beispielsweise Befehle und Daten beinhalten, die konfiguriert sind, den Prozessor 602 zu veranlassen, eine bestimmte Operation oder Gruppe von Operationen durchzuführen.
  • Modifikationen, Ergänzungen oder Weglassungen können an dem Datenverarbeitungssystem 600 vorgenommen werden, ohne vom Umfang der vorliegenden Offenbarung abzuweichen. Bei einigen Ausführungsformen kann das Datenverarbeitungssystem 600 beispielsweise jede Anzahl von anderen Komponenten beinhalten, die hier nicht ausdrücklich dargestellt oder beschrieben worden sind.
  • Wie vorstehend angezeigt, können die in der vorliegenden Offenbarung beschriebenen Ausführungsformen die Verwendung eines Spezialzweck- oder Allzweckcomputers beinhalten (z. B. den Prozessor 602 von 6) einschließlich verschiedener Computerhardware- oder -softwaremodulen, wie hier ausführlicher erörtert. Ferner können, wie vorstehend angezeigt, in der vorliegenden Offenbarung beschriebene Ausführungsformen unter Verwendung von computerlesbaren Medien (z. B. dem Speicher 604 von 6) zum Tragen von computerausführbaren Befehlen oder Aufweisen von darauf gespeicherten Datenstrukturen implementiert sein.
  • Beispielhafte Ausführungsformen
  • Die folgenden Beispiele gehören zu weiteren Ausführungsformen, aus denen zahlreiche Permutationen und Konfigurationen ersichtlich sind.
    • Beispiel 1 ist ein Computersystem, konfiguriert für skalierbare Latches für einen nicht einheitlichen Speicherzugriff. Das System beinhaltet mehrere Sockel, wobei jeder Sockel der mehreren Sockel mindestens einen Hauptprozessor (central processing unit - CPU) und lokal angeschlossenen Speicher beinhaltet, wobei jede CPU in jedem Sockel kommunikativ mit dem lokal angeschlossenen Speicher des Sockels gekoppelt ist; ein globales SpinLock, konfiguriert, den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker beinhaltet; und mehrere lokale SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
    • Beispiel 2 beinhaltet den Gegenstand von Beispiel 1, wobei die Anzahl der mehreren lokalen SpinLocks und der mehreren Sockel gleich ist und jedes lokale SpinLock der mehreren lokalen SpinLocks an einen jeweiligen Sockel der mehreren Sockel zugewiesen ist.
    • Beispiel 3 beinhaltet den Gegenstand von Beispiel 1, wobei die mehreren lokalen SpinLocks unter den mehreren Sockeln gleich verteilt sind.
    • Beispiel 4 beinhaltet den Gegenstand von einem der Beispiele 1 bis 3, wobei jedes lokale SpinLock ein Test-and-Set-SpinLock ist.
    • Beispiel 5 beinhaltet den Gegenstand von einem der Beispiele 1 bis 3, wobei jedes lokale SpinLock ein Test- und Test-and-Set-SpinLock ist.
    • Beispiel 6 beinhaltet den Gegenstand von einem der Beispiele 1 bis 6, wobei das globale SpinLock global erlangt werden darf, wenn der erste Merker anzeigt, dass das globale SpinLock global erlangt ist.
    • Beispiel 7 beinhaltet den Gegenstand von einem der Beispiele 1 bis 6, wobei das globale SpinLock nicht global erlangt werden darf, wenn der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist.
    • Beispiel 8 beinhaltet den Gegenstand von einem der Beispiele 1 bis 7, wobei das globale SpinLock nur durch ein lokales SpinLock der mehreren lokalen SpinLocks erlangbar ist, wenn der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist.
    • Beispiel 9 ist ein computerimplementiertes Verfahren zum Steuern des Zugriffs auf eine gemeinsam nutzbare Ressource. Das Verfahren beinhaltet Zuweisen eines globalen SpinLocks, das konfiguriert ist, den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker beinhaltet; und Zuweisen mehrerer lokaler SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
    • Beispiel 10 beinhaltet den Gegenstand von Beispiel 9, wobei das globale SpinLock an einen Sockel aus mehreren Sockeln zugewiesen ist.
    • Beispiel 11 beinhaltet den Gegenstand von Beispiel 10, wobei die Anzahl der mehreren lokalen SpinLocks und der mehreren Sockel gleich ist und jedes lokale SpinLock der mehreren lokalen SpinLocks an einen jeweiligen Sockel der mehreren Sockel zugewiesen ist.
    • Beispiel 12 beinhaltet den Gegenstand von Beispiel 10, wobei die mehreren lokalen SpinLocks unter den mehreren Sockeln verteilt sind.
    • Beispiel 13 beinhaltet den Gegenstand von einem der Beispiele 9 bis 12, wobei das globale SpinLock ein Test-and-Set-SpinLock ist.
    • Beispiel 14 beinhaltet den Gegenstand von einem der Beispiele 9 bis 12, wobei das globale SpinLock ein Test- und Test-and-Set-SpinLock ist.
    • Beispiel 15 beinhaltet den Gegenstand von einem der Beispiele 9 bis 14, ferner beinhaltend Setzen des ersten Merker, um anzuzeigen, dass das globale SpinLock global erlangt ist, in Reaktion auf globales Erlangen des globalen SpinLocks.
    • Beispiel 16 beinhaltet den Gegenstand von einem der Beispiele 9 bis 15, ferner beinhaltend Versuchen, das globale SpinLock global zu erlangen, in Reaktion auf Feststellen, dass der erste Merker anzeigt, dass das globale SpinLock global erlangt ist.
    • Beispiel 17 beinhaltet den Gegenstand von einem der Beispiele 9 bis 16, ferner beinhaltend Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen, in Reaktion auf Laufen von Warteschleifen in einer ersten spezifischen Anzahl von Malen im Versuchen, das globale SpinLock global zu erlangen, ohne das globale SpinLock zu erlangen.
    • Beispiel 18 beinhaltet den Gegenstand von Beispiel 17, wobei das erste lokale SpinLock zufällig ausgewählt ist.
    • Beispiel 19 beinhaltet den Gegenstand von einem der Beispiele 17 und 18, ferner beinhaltend Versuchen, das globale SpinLock lokal zu erlangen, in Reaktion auf Erlangen des ersten lokalen SpinLocks.
    • Beispiel 20 beinhaltet den Gegenstand von Beispiel 19, ferner beinhaltend Setzen des zweiten Merkers, um anzuzeigen, dass das globale SpinLock lokal erlangt ist, in Reaktion auf lokales Erlangen des globalen SpinLock.
    • Beispiel 21 beinhaltet den Gegenstand von einem der Beispiele 17 und 18, ferner beinhaltend Versuchen, ein zweites lokales SpinLock der mehreren lokalen SpinLocks zu erlangen, in Reaktion auf Laufen von Warteschleifen in einer zweiten spezifischen Anzahl von Malen im Versuchen, das erste lokale SpinLock zu erlangen, ohne das erste lokale SpinLock zu erlangen.
    • Beispiel 22 beinhaltet den Gegenstand von Beispiel 21, wobei das zweite lokale SpinLock zufällig ausgewählt ist.
    • Beispiel 23 beinhaltet den Gegenstand von einem der Beispiele 9 bis 16, ferner beinhaltend Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen, in Reaktion auf Feststellen, dass der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist.
    • Beispiel 24 ist ein Computerprogrammprodukt, beinhaltend ein oder mehrere nichtflüchtige maschinenlesbare Medien, die mit Befehlen codiert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, veranlassen, dass ein Prozess ausgeführt wird, um den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern. Der Prozess beinhaltet Zuweisen eines globalen SpinLocks, konfiguriert, den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker umfasst; sowie Zuweisen mehrerer lokaler SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
    • Beispiel 25 beinhaltet den Gegenstand von Beispiel 24, wobei die gemeinsam nutzbare Ressource einen Teil eines nicht einheitlichen Speicherzugriffs (non-uniform memory access - NUMA)-Systems bildet.
    • Beispiel 26 beinhaltet den Gegenstand von Beispiel 25, wobei das NUMA-System mehrere Sockel umfasst und das globale SpinLock an einen Sockel der mehreren Sockel zugewiesen ist.
    • Beispiel 27 beinhaltet den Gegenstand von Beispiel 26, wobei die Anzahl der mehreren lokalen SpinLocks und der mehreren Sockel gleich ist und jedes lokale SpinLock der mehreren lokalen SpinLocks an einen jeweiligen Sockel der mehreren Sockel zugewiesen ist.
    • Beispiel 28 beinhaltet den Gegenstand von Beispiel 26, wobei die mehreren lokalen SpinLocks unter den mehreren Sockeln verteilt sind.
    • Beispiel 29 beinhaltet den Gegenstand von einem der Beispiele 24 bis 28, wobei das globale SpinLock ein Test-and-Set-SpinLock ist.
    • Beispiel 30 beinhaltet den Gegenstand von einem der Beispiele 24 bis 28, wobei das globale SpinLock ein Test- und Test-and-Set-SpinLock ist.
    • Beispiel 31 beinhaltet den Gegenstand von einem der Beispiele 24 bis 30, ferner beinhaltend Versuchen, das globale SpinLock global zu erlangen; und, in Reaktion auf globales Erlangen des globalen SpinLocks, Setzen des ersten Merkers, um anzuzeigen, dass das globale SpinLock global erlangt ist.
    • Beispiel 32 beinhaltet den Gegenstand von einem der Beispiele 24 bis 31, ferner beinhaltend, in Reaktion auf Feststellen, dass der erste Merker anzeigt, dass das globale SpinLock global erlangt ist, Versuchen, das globale SpinLock global zu erlangen.
    • Beispiel 33 beinhaltet den Gegenstand von einem der Beispiele 24 bis 32, ferner beinhaltend Laufen von Warteschleifen in einer ersten Anzahl von Malen im Versuchen, das globale SpinLock zu erlangen; und, in Reaktion auf Laufen von Warteschleifen in einer ersten spezifischen Anzahl von Malen im Versuchen, das globale SpinLock global zu erlangen, ohne das globale SpinLock zu erlangen, Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen.
    • Beispiel 34 beinhaltet den Gegenstand von Beispiel 33, wobei das erste lokale SpinLock zufällig ausgewählt ist.
    • Beispiel 35 beinhaltet den Gegenstand von einem der Beispiele 33 und 34, ferner beinhaltend, in Reaktion auf Erlangen des ersten lokalen SpinLocks, Versuchen, das globale SpinLock lokal zu erlangen.
    • Beispiel 36 beinhaltet den Gegenstand von Beispiel 35, ferner beinhaltend, in Reaktion auf lokales Erlangen des globalen SpinLocks, Setzen des zweiten Merkers, um anzuzeigen, dass das globale SpinLock lokal erlangt ist.
    • Beispiel 37 beinhaltet den Gegenstand von einem der Beispiele 33 und 34, ferner beinhaltend, in Reaktion auf Laufen von Warteschleifen in einer zweiten spezifischen Anzahl von Malen im Versuchen, das erste lokale SpinLock zu erlangen, ohne das erste lokale SpinLock zu erlangen, Versuchen, ein zweites lokales SpinLock der mehreren SpinLocks zu erlangen.
    • Beispiel 38 beinhaltet den Gegenstand von Beispiel 37, wobei das zweite lokale SpinLock zufällig ausgewählt ist.
    • Beispiel 39 beinhaltet den Gegenstand von einem der Beispiele 24 und 32, ferner beinhaltend, in Reaktion auf Feststellen, dass der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist, Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen.
  • Wie in der vorliegenden Offenbarung verwendet, können die Begriffe „Modul“ oder „Komponente“ auf spezifische Hardware-Implementierungen verweisen, die konfiguriert sind, die Aktionen des Moduls oder der Komponente und/oder der Softwareobjekte oder Softwareroutinen durchzuführen, die auf Allzweckhardware (z. B. computerlesbaren Medien, Verarbeitungsvorrichtungen usw.) des Datenverarbeitungssystems gespeichert sein können oder von derselben ausgeführt werden können. Bei einigen Ausführungsformen können die in der vorliegenden Offenbarung beschriebenen unterschiedlichen Komponenten, Module, Engines und Dienste als Objekte oder Prozesse implementiert sein, die auf dem Datenverarbeitungssystem (z. B. als separate Threads) ausgeführt werden. Während einige der in der vorliegenden Offenbarung beschriebenen Systeme und Verfahren im Allgemeinen beschrieben werden als dass sie in Software implementiert sind (auf Allzweckhardware gespeichert und/oder von derselben ausgeführt), sind spezifische Hardware-Implementierungen, Firmware-Implementierungen oder jegliche Kombinationen davon ebenfalls möglich und erwogen. In dieser Beschreibung kann eine „Datenverarbeitungseinheit“ jedes Datenverarbeitungssystem wie vorstehend in der vorliegenden Offenbarung beschrieben oder jedes Modul oder jede Kombination von Modulen, die auf einem Datenverarbeitungssystem ausgeführt werden, sein.
  • Begriffe, die in der vorliegenden Beschreibung und den beigefügten Ansprüchen verwendet werden (z. B. den Hauptteilen der beigefügten Ansprüche) sind allgemein als „offene“ Begriffe beabsichtigt (z. B. sollte der Begriff „beinhaltend“ als „unter anderem beinhaltend“ ausgelegt werden, der Begriff „aufweisend“ sollte als „mindestens aufweisend“ ausgelegt werden, der Begriff „enthält“ sollte als „enthält unter anderem“ ausgelegt werden usw.).
  • Wenn außerdem eine spezifische Anzahl von einer eingeführten Anspruchsangabe beabsichtigt ist, ist eine solche Absicht in dem Anspruch explizit angegeben, und in Abwesenheit einer solchen Angabe liegt keine solche Absicht vor. Als Verständnishilfe können beispielsweise die folgenden beigefügten Ansprüche die Verwendung der einleitenden Ausdrücke „mindestens ein“ und „ein/e/r oder mehrere“ enthalten, um Anspruchsangaben einzuleiten. Die Verwendung solcher Ausdrücke sollte jedoch nicht dahingehend ausgelegt werden, dass sie implizieren, dass die Einleitung einer Anspruchsangabe durch die unbestimmten Artikel „ein“ oder „eine“ einen bestimmten, eine solche eingeleitete Anspruchsangabe enthaltenden Anspruch auf lediglich eine solche Angabe enthaltende Ausführungsformen begrenzt, sogar wenn derselbe Anspruch die einleitenden Ausdrücke „ein/e/r oder mehrere“ oder „mindestens ein“ beinhaltet, und unbestimmte Artikel wie etwa „ein“ oder „eine“ (z. B. „ein“ und/oder „eine“ sollten als bedeutend „mindestens ein/e/r“ oder „ein/e/r oder mehrere“ interpretiert werden); dasselbe gilt für die Verwendung bestimmter, zum Einleiten von Anspruchsangaben verwendete bestimmte Artikel.
  • Sogar wenn außerdem eine spezifische Anzahl von eingeleiteten Anspruchsangaben explizit angegeben ist, werden Fachleute anerkennen, dass eine solche Angabe dahingehend zu interpretieren ist, dass sie mindestens die angegebene Anzahl bedeutet (z. B. die bloße Angabe von „zwei Angaben“ ohne andere Modifikatoren bedeutet mindestens zwei Angaben oder zwei oder mehr Angaben). Ferner ist in jenen Fällen, in denen eine Konvention analog zu „mindestens eins aus A, B und C usw.“ oder „eins oder mehr aus A, B und C usw.“ verwendet wird, im Allgemeinen eine solche Konstruktion beabsichtigt, die nur A, nur B, nur C, A und B gemeinsam, A und C gemeinsam, B und C gemeinsam oder A, B und C gemeinsam usw. beinhaltet. Alle angegebenen Beispiele und Formulierungen mit Bedingungen in der vorliegenden Offenbarung sind auf pädagogischen Ziele gerichtet, um dem Leser behilflich zu sein, die vorliegende Offenbarung sowie die vom Erfinder beigetragenen Konzepte zum Erweitern des Standes der Technik zu verstehen, und sind als ohne Begrenzung auf solche spezifisch angegebenen Beispiele und Bedingungen auszulegen. Obwohl Ausführungsformen der vorliegenden Offenbarung ausführlich beschrieben wurden, könnten verschiedene Änderungen, Ersetzungen und Modifizierungen hierzu vorgenommen werden, ohne vom Geist und Umfang der vorliegenden Offenbarung abzuweichen. Dementsprechend ist beabsichtigt, dass der Umfang der vorliegenden Offenbarung nicht durch diese ausführliche Beschreibung beschränkt wird, sondern eher durch die hier beigefügten Ansprüche.

Claims (25)

  1. Computersystem, Folgendes umfassend: mehrere Sockel, wobei jeder Sockel der mehrere Sockel mindestens einen Hauptprozessor (central processing unit - CPU) und lokal angeschlossenen Speicher umfasst, wobei jede CPU in jedem Sockel kommunikativ mit dem lokal angeschlossenen Speicher des Sockels gekoppelt ist; ein globales SpinLock, konfiguriert, den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker umfasst; und mehrere lokale SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
  2. System nach Anspruch 1, wobei die Anzahl der mehreren lokalen SpinLocks und der mehreren Sockel gleich ist und jedes lokale SpinLock der mehreren lokalen SpinLocks an einem jeweiligen Sockel aus den mehreren Sockeln zugewiesen ist.
  3. System nach Anspruch 1, wobei die mehreren lokalen SpinLocks unter den mehreren Sockeln gleich verteilt sind.
  4. System nach Anspruch 1, wobei jedes lokale SpinLock ein Test-and-Set-SpinLock ist.
  5. System nach Anspruch 1, wobei jedes lokale SpinLock ein Test- und Test-and-Set-SpinLock ist.
  6. System nach einem der Ansprüche 1 bis 5, wobei das globale SpinLock global erlangt werden darf, wenn der erste Merker anzeigt, dass das globale SpinLock global erlangt ist.
  7. System nach einem der Ansprüche 1 bis 5, wobei das globale SpinLock nicht global erlangt werden darf, wenn der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist.
  8. System nach einem der Ansprüche 1 bis 5, wobei das globale SpinLock nur durch ein lokales SpinLock der mehreren lokalen SpinLocks erlangbar ist, wenn der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist.
  9. Computerimplementiertes Verfahren zum Steuern des Zugriffs auf eine gemeinsam nutzbare Ressource, wobei das Verfahren Folgendes umfasst: Zuweisen eines globalen SpinLock, konfiguriert, um den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker umfasst; und Zuweisen mehrerer lokaler SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
  10. Verfahren nach Anspruch 9, wobei das globale SpinLock an einem Sockel aus den mehreren Sockeln zugewiesen ist.
  11. Verfahren nach Anspruch 10, wobei die Anzahl der mehreren lokalen SpinLocks und der mehreren Sockel gleich ist und jedes lokale SpinLock der mehreren lokalen SpinLocks an einem jeweiligen Sockel aus den mehreren Sockeln zugewiesen ist.
  12. Verfahren nach Anspruch 10, wobei die mehreren lokalen SpinLocks unter den mehreren Sockeln verteilt sind.
  13. Verfahren nach Anspruch 9, wobei das globale SpinLock eins aus einem Test- und Test-and-Set-SpinLock oder einem Test-and-Set-SpinLock ist.
  14. Verfahren nach einem der Ansprüche 9 bis 13, ferner umfassend: als Reaktion auf globales Erfassen des globalen SpinLocks, Setzen des ersten Merkers, um anzuzeigen, dass das globale SpinLock global erlangt ist.
  15. Verfahren nach einem der Ansprüche 9 bis 13, ferner umfassend: als Reaktion auf Feststellen, dass der erste Merker anzeigt, dass das globale SpinLock global erlangt ist, Versuchen, das globale SpinLock global zu erlangen.
  16. Verfahren nach Anspruch 15, ferner umfassend: als Reaktion auf Laufen von Warteschleifen in einer ersten spezifischen Anzahl von Malen im Versuchen, das globale SpinLock global zu erlangen, ohne das globale SpinLock zu erlangen, Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen, wobei das erste lokale SpinLock zufällig ausgewählt ist.
  17. Verfahren nach Anspruch 16, ferner umfassend: als Reaktion auf Erlangen des ersten lokalen SpinLocks, Versuchen, das globale SpinLock lokal zu erlangen.
  18. Verfahren nach Anspruch 17, ferner umfassend: als Reaktion auf lokales Erlangen des globalen SpinLocks, Setzen des zweiten Merkers, um anzuzeigen, dass das globale SpinLock lokal erlangt ist.
  19. Verfahren nach Anspruch 16, ferner umfassend: als Reaktion auf Laufen von Warteschleifen in einer zweiten spezifischen Anzahl von Malen im Versuchen, das erste lokale SpinLock zu erlangen, ohne das erste lokale SpinLock zu erlangen, Versuchen, ein zweites lokales SpinLock der mehreren lokalen SpinLocks zu erlangen, wobei das zweite lokale SpinLock zufällig ausgewählt ist.
  20. Verfahren nach einem der Ansprüche 9 bis 13, ferner umfassend: als Reaktion auf Feststellen, dass der zweite Merker anzeigt, dass das globale SpinLock lokal erlangt ist, Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen.
  21. Computerprogrammprodukt, beinhaltend ein oder mehrere nichtflüchtige maschinenlesbare Medien, die mit Befehlen codiert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, veranlassen, dass ein Prozess ausgeführt wird, um den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei der Prozess Folgendes umfasst: Zuweisen eines globalen SpinLocks, konfiguriert, um den Zugriff auf eine gemeinsam nutzbare Ressource zu steuern, wobei das globale SpinLock einen ersten Merker und einen zweiten Merker umfasst; und Zuweisen mehrerer lokaler SpinLocks, wobei jedes lokale SpinLock der mehreren lokalen SpinLocks konfiguriert ist, den Zugriff auf das globale SpinLock zu steuern; wobei der erste Merker anzeigt, ob das globale SpinLock global erlangt ist, und der zweite Merker anzeigt, ob das globale SpinLock lokal erlangt ist.
  22. Computerprogrammprodukt nach Anspruch 21, wobei der Prozess ferner Folgendes umfasst: Versuchen, das globale SpinLock global zu erlangen; und als Reaktion auf globales Erlangen des globalen SpinLocks, Setzen des ersten Merkers, um anzuzeigen, dass das globale SpinLock global erlangt ist.
  23. Computerprogrammprodukt nach einem der Ansprüche 21 und 22, wobei der Prozess ferner Folgendes umfasst: Laufen von Warteschleifen in einer ersten Anzahl von Malen im Versuchen, das globale SpinLock zu erlangen; und als Reaktion auf Laufen von Warteschleifen in der ersten spezifischen Anzahl von Malen im Versuchen, das globale SpinLock global zu erlangen, ohne das globale SpinLock zu erlangen, Versuchen, ein erstes lokales SpinLock der mehreren lokalen SpinLocks zu erlangen.
  24. Computerprogrammprodukt nach Anspruch 23, wobei der Prozess ferner umfasst: als Reaktion auf Erlangen des ersten lokalen SpinLocks, Versuchen, das globale SpinLock lokal zu erlangen.
  25. Computerprogrammprodukt nach Anspruch 24, wobei der Prozess ferner umfasst: als Reaktion auf lokales Erlangen des globalen SpinLocks, Setzen des zweiten Merkers, um anzuzeigen, dass das globale SpinLock lokal erlangt ist.
DE102018213047.7A 2017-09-14 2018-08-03 Skalierbare Spinlocks für einen nicht einheitlichen Speicherzugriff Pending DE102018213047A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/704,799 US10310916B2 (en) 2017-09-14 2017-09-14 Scalable spinlocks for non-uniform memory access
US15/704,799 2017-09-14

Publications (1)

Publication Number Publication Date
DE102018213047A1 true DE102018213047A1 (de) 2019-03-14

Family

ID=65441289

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018213047.7A Pending DE102018213047A1 (de) 2017-09-14 2018-08-03 Skalierbare Spinlocks für einen nicht einheitlichen Speicherzugriff

Country Status (3)

Country Link
US (1) US10310916B2 (de)
CN (1) CN109508240A (de)
DE (1) DE102018213047A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112306699B (zh) * 2019-07-29 2024-04-12 华为技术有限公司 访问临界资源的方法及装置、计算机设备及可读存储介质
CN115934370A (zh) * 2022-12-23 2023-04-07 科东(广州)软件科技有限公司 自旋锁的获取方法、装置、设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4439830A (en) * 1981-11-09 1984-03-27 Control Data Corporation Computer system key and lock protection mechanism
US4965719A (en) * 1988-02-16 1990-10-23 International Business Machines Corporation Method for lock management, page coherency, and asynchronous writing of changed pages to shared external store in a distributed computing system
US5596754A (en) * 1992-10-29 1997-01-21 Digital Equipment Corporation Method for performing private lock management
US7080375B2 (en) * 2000-12-30 2006-07-18 Emc Corporation/Data General Parallel dispatch wait signaling method, method for reducing contention of highly contended dispatcher lock, and related operating systems, multiprocessor computer systems and products
US7529844B2 (en) * 2002-04-26 2009-05-05 Sun Microsystems, Inc. Multiprocessing systems employing hierarchical spin locks
US7376744B2 (en) * 2003-05-09 2008-05-20 Oracle International Corporation Using local locks for global synchronization in multi-node systems
US8694706B2 (en) * 2012-04-27 2014-04-08 Oracle International Corporation System and method for NUMA-aware locking using lock cohorts
US8966491B2 (en) * 2012-04-27 2015-02-24 Oracle International Corporation System and method for implementing NUMA-aware reader-writer locks

Also Published As

Publication number Publication date
US10310916B2 (en) 2019-06-04
US20190079807A1 (en) 2019-03-14
CN109508240A (zh) 2019-03-22

Similar Documents

Publication Publication Date Title
DE102013022299B3 (de) Schutz globaler Register in einem Multithreaded-Prozessor
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112015004750T5 (de) Eine beinahe faire aktive sperre
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE102010044529B4 (de) Autonomes speicher-sub-system mit hardwarebeschleuniger
DE102013204521A1 (de) Transaktionsverwaltung für Datenbanksysteme
DE102007006190A1 (de) Techniken zur Verwendung von Speicher-Attributen
DE102015002191A1 (de) Sicherheits-Hypervisor-Funktion
DE112019001821B4 (de) Verfahren und vorrichtung zur wiedergabe eines aktivierungsrahmens für unterbrechungsfreie speicherbereinigung (pause-less garbage collection)
DE102019102883A1 (de) Technologien zum Bewegen von Arbeitslasten zwischen Hardwarewarteschlangenmanagern
DE102017213160B4 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE102016203808A1 (de) Verringern der Bevorrechtigung virtueller Maschinen in einer virtualisierten Umgebung
DE102020103521A1 (de) Minimieren der Nutzung von Hardware-Zählern bei getriggerten Operationen für kollektive Kommunikation
DE102018213047A1 (de) Skalierbare Spinlocks für einen nicht einheitlichen Speicherzugriff
DE112019005584T5 (de) Arithmetiksteuervorrichtung
DE102018114322A1 (de) Architektur und Dienste zur Unterstützung der rekonfigurierbaren Synchronisation in einem Multiprozessorsystem
DE112011100098B4 (de) Effiziente Mehrkernverarbeitung von Ereignissen
DE102008016180A1 (de) Darlegen von Systemtopologie für die Ausführungsumgebung
DE112016000776T5 (de) Effiziente Durchführung von Einfüge- und Punktabfrage-Operationen in einem Spaltenspeicher
DE102010050432A1 (de) Verfahren, um eine Halbleiterlaufwerk-Leistung unter Verwendung eines programmierbaren Bus-Arbiters zu verbessern
DE112012002562T5 (de) Unterbringung von Daten in Partitionen auf einer Speichereinheit
DE112015003568T5 (de) Auswirkung ungleichmässiger kanalauslastung auf die leistungsreduktion in festkörperlaufwerken
DE112013007299T5 (de) Teilen eingebetteter Hardwareressourcen
DE102013016114B3 (de) Bussystem und Verfahren für geschützte Speicherzugriffe
DE112019000189T5 (de) Programmausführungs-steuerverfahren und fahrzeugsteuervorrichtung

Legal Events

Date Code Title Description
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee