DE102016118210A1 - Granulare Dienstqualität für Computer-Ressourcen - Google Patents

Granulare Dienstqualität für Computer-Ressourcen Download PDF

Info

Publication number
DE102016118210A1
DE102016118210A1 DE102016118210.9A DE102016118210A DE102016118210A1 DE 102016118210 A1 DE102016118210 A1 DE 102016118210A1 DE 102016118210 A DE102016118210 A DE 102016118210A DE 102016118210 A1 DE102016118210 A1 DE 102016118210A1
Authority
DE
Germany
Prior art keywords
thread
processor
computer
tags
module
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
DE102016118210.9A
Other languages
English (en)
Inventor
Bryan Loyd Young
John Scott Crowe
Jennifer Lee-Baron
Nathan J. Peterson
Amy Leigh Rose
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.)
Lenovo Singapore Pte Ltd
Original Assignee
Lenovo Singapore Pte Ltd
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 Lenovo Singapore Pte Ltd filed Critical Lenovo Singapore Pte Ltd
Publication of DE102016118210A1 publication Critical patent/DE102016118210A1/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/5061Partitioning or combining of resources
    • 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
    • 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/5038Allocation 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 the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/5094Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/501Performance criteria
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

Zur Bereitstellung von granularer Servicequalität (QoS) für Computer-Ressourcen in einem Computersystem werden Systeme, Vorrichtungen und Verfahren offenbart. Die Vorrichtung umfasst einen Prozessor mit einer Vielzahl von Prozessorkernen und einem Speicher, der den Code speichert, der durch den Prozessor ausgeführt werden kann, um einen Thread zu identifizieren, der Teil eines Computerprozesses ist, um ein oder mehrere Tags auf Thread-Niveau zu identifizieren, die mit dem Thread assoziiert sind, um eine Rechenanforderung des Threads basierend auf dem einen oder auf den mehreren Tags auf Ebene des Threads zu bestimmen, und den Thread einem der Prozessorkerne basierend auf der Rechenanforderung zuzuweisen. Bestimmte Ausführungsbeispiele können einen Code umfassen, der durch den Prozessor ausgeführt werden kann, um dem Thread Hardware-Ressourcen basierend auf einer Intra-Prozess-Priorität zuzuweisen, wobei die Hardware-Ressourcen aus einem Satz von Hardware-Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist.

Description

  • GEBIET
  • Der hierin offenbarte Gegenstand betrifft eine Dienstqualität (QoS) für Computer-Ressourcen und betrifft insbesondere die Bereitstellung von granularer QoS für Computer-Ressourcen in einem Computersystem.
  • HINTERGRUND
  • BESCHREIBUNG DES STANDS DER TECHNIK
  • Die heutigen Computer laufen Threads in voller Geschwindigkeit ab, ohne dass ihr Bedarf berücksichtigt wird. Die ist der Fall, da Programme keine Möglichkeit haben, dem System mitzuteilen, welche Ressourcen erforderlich sind, oder was hinsichtlich der Ressourcen-Anforderungen zu erwarten ist. Trotz der vielen fortgeschrittenen Scheduler-Algorithmen gibt es immer noch keine Möglichkeit, einem Thread Priorität gegenüber einem anderen Thread bei der gleichen Anwendung zu geben. Es gibt keine wirkliche Möglichkeit, einen einzelnen Thread oder einen einzelnen Kern innerhalb einer Anwendung zu isolieren. Häufige Änderungen des CPU-Zustands verschwenden Leistung und führen zu weiterer Latenz.
  • KURZE ZUSAMMENFASSUNG
  • Es wird eine Vorrichtung zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem offenbart. Ein Verfahren und ein Computerprogrammprodukt führen auch die Funktionen der Vorrichtung aus. Die Vorrichtung umfasst einen Prozessor mit einer Vielzahl von Prozessorkernen und einen Speicher, der einen Code speichert, der durch den Prozessor ausgeführt werden kann. Der Speicher umfasst einen Code, der durch den Prozessor ausgeführt werden kann, um einen Thread zu identifizieren, das Teil eines Computerprozesses ist. Der Speicher umfasst einen Code, der durch den Prozessor ausgeführt werden kann, um ein oder mehrere Tags auf Thread-Niveau zu identifizieren, die mit dem Thread assoziiert sind. Der Speicher umfasst einen Code, der durch den Prozessor ausgeführt werden kann, um eine Rechenanforderung des Threads basierend auf einem oder auf mehreren Tags auf Thread-Niveau zu bestimmen. Der Speicher umfasst einen Code, der durch den Prozessor ausgeführt werden kann, um den Thread zudem einem der Prozessorkerne basierend auf der Rechenanforderung zuzuordnen.
  • In bestimmten Ausführungsbeispielen umfasst der Speicher einen Code, der durch den Prozessor ausgeführt werden kann, um eine Intra-Prozess-Priorität des Threads basierend auf dem einen oder auf den mehreren Tags auf Thread-Niveau zu bestimmen. Der Speicher kann auch einen Code umfassen, der durch den Prozessor ausgeführt werden kann, um dem Thread Hardware-Ressourcen basierend auf der Intra-Prozess-Priorität zuzuweisen, wobei die Hardware-Ressourcen von einem Satz von Hardware-Ressourcen zugewiesen werden, die dem Computerprozess zugeordnet sind. In einigen Ausführungsbeispielen umfasst der Speicher einen Code, der durch den Prozessor ausgeführt werden kann, um Thread-Abhängigkeiten unter einer Vielzahl von Threads zu identifizieren, die Teil des Computerprozesses sind, wobei die Bestimmung der Intra-Prozess-Priorität des Threads die Zuordnung der Intra-Prozess-Priorität basierend auf den Thread-Abhängigkeiten umfasst. In weiteren Ausführungsbeispielen kann der Speicher einen Code, der durch den Prozessor ausgeführt werden kann, umfassen, um eine Extra-Prozess-Priorität des Computerprozesses zu bestimmen, basierend auf einem oder auf mehreren Tags auf Prozesses-Niveau, wobei der Satz von Hardware-Ressourcen, die dem Computerprozess zugeordnet sind. auf der Extra-Prozess-Priorität basiert.
  • In einigen Ausführungsbeispielen umfasst die Vielzahl von Prozessorkernen einen ersten Satz von Prozessorkernen, der mit einer ersten Prozessorgeschwindigkeit arbeitet, und einen zweiten Satz von Prozessorkernen, der mit einer zweiten Prozessorgeschwindigkeit arbeitet, wobei die zweite Prozessorgeschwindigkeit geringer als die erste Prozessorgeschwindigkeit ist. Der Speicher kann einen Code, der durch den Prozessor ausgeführt werden kann, um die Geschwindigkeitsanforderung des Threads basierend auf dem einen oder den mehreren Tags auf Thread-Niveau zu bestimmen, und um eine Thread-Abschlusszeit basierend auf der zweiten Prozessorgeschwindigkeit zu bestimmen, umfassen. In einigen Ausführungsbeispielen umfasst die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung die Zuordnung des Threads zu einem Prozessorkern des zweiten Satzes von Prozessorkernen in Reaktion darauf, dass die Thread-Bearbeitungszeit geringer als die Geschwindigkeitsanforderung ist.
  • In bestimmten Ausführungsbeispielen umfasst der Speicher einen Code, der durch den Prozessor ausgeführt werden kann, um den Leistungszustand des Geräts zu identifizieren, wobei die Zuordnung des Threads zu einem der Prozessorkerne weiter auf dem Leistungszustand basiert. In einigen Ausführungsbeispielen umfasst die Zuordnung des Threads zu einem der Prozessorkerne basierend auf dem Leistungszustand die Zuordnung des Threads zu einem Prozessorkern mit einer geringeren Prozessorgeschwindigkeit in Reaktion darauf, dass der Leistungszustand eine Batterieleistung ist, und die Zuordnung des Threads zu einem Prozessorkern mit einer höheren Prozessorgeschwindigkeit in Reaktion darauf, dass der Leistungszustand eine externe Leistung ist. In bestimmten Ausführungsbeispielen umfasst die Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, die Identifizierung eines Haupt-Arbeits-Threads, und wobei die Zuordnung des Haupt-Arbeits-Threads zu einem der Prozessorkerne die Zuordnung des Haupt-Arbeits-Threads zu einem Prozessorkern umfasst, der für den Haupt-Arbeits-Thread reserviert ist.
  • In einigen Ausführungsbeispielen umfasst der Speicher einen Code, der durch den Prozessor ausgeführt werden kann, um die Zeitanforderung des Computerprozesses basierend auf einem oder auf mehreren Tags auf Prozesses-Niveau zu bestimmen. Der Speicher kann auch einen Code, der durch den Prozessor ausgeführt werden kann, umfassen, um die Kosten der lokalen Ausführung des Computerprozesses zu bestimmen. Der Speicher kann weiter einen Code, der durch den Prozessor ausgeführt werden kann, umfassen, um den Computerprozess an ein entferntes Computergerät basierend auf der Zeitanforderung und den Kosten der lokalen Ausführung des Computerprozesses off zu loaden.
  • Das Verfahren umfasst die Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, unter Verwendung eines Prozessors, die Identifizierung von einem oder von mehreren Tags, die mit dem Thread assoziiert sind, die Bestimmung einer Rechenanforderung der Threads basierend auf einem oder auf mehreren Tags, und die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung. Das Verfahren kann weiter die Identifizierung von Systemeigenschaften eines Computersystems umfassen, das den Computerprozess ausführt, wobei die Zuordnung des Threads zu einem der Prozessorkerne weiter auf den Systemeigenschaften basiert.
  • In einigen Ausführungsbeispielen umfasst die Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, die Identifizierung einer Vielzahl von Threads. Das Verfahren kann die Bestimmung einer Intra-Prozess-Priorität für jeden Thread basierend auf dem einen oder den mehreren Tags umfassen. Das Verfahren kann auch die Identifizierung eines Satzes von Hardware-Ressourcen umfassen, die dem Computerprozess zugeordnet sind. Das Verfahren kann weiter die Zuweisung von Hardware-Ressourcen vom Satz von Hardware-Ressourcen an jeden Thread basierend auf der Intra-Prozess-Priorität umfassen. In bestimmten Ausführungsbeispielen umfasst die Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, die Identifizierung eines Haupt-Arbeits-Threads, und die Zuordnung des Haupt-Arbeits-Threads zu einem der Prozessorkerne umfasst die Isolierung des Haupt-Arbeits-Threads auf seinen eigenen Prozessorkern.
  • In einigen Ausführungsbeispielen umfasst die Bestimmung einer Rechenanforderung des Threads basierend auf dem einen oder den mehreren Tags die Bestimmung eines Zeitempfindlichkeits-Niveaus des Threads, basierend auf dem einen oder den mehreren Tags, und die Zuordnung einer Intra-Prozess-Priorität an den Thread, basierend auf dem Zeitempfindlichkeits-Niveau. In bestimmten Ausführungsbeispielen umfasst die Bestimmung eine Rechenanforderung des Threads basierend auf dem einen oder auf den mehreren Tags, die Identifizierung einer Speichercache-Anforderung des Threads, wobei die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung, die Auswahl eines Prozessorkerns basierend auf der Speichercache-Anforderung umfasst. In weiteren Ausführungsbeispielen umfasst die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung weiter die Abschaltung von Hyper-Threading auf dem ausgewählten Prozessorkern, basierend auf der Speichercache-Anforderung.
  • In einigen Ausführungsbeispielen umfasst die Bestimmung einer Rechenanforderung des Threads basierend auf einem oder auf den mehreren Tags die Identifizierung einer Geschwindigkeits-Anforderung des Threads. In weiteren Ausführungsbeispielen umfasst die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung die Auswahl eines Prozessorkerns basierend auf der Geschwindigkeitsanforderung.
  • Das Computerprogrammprodukt umfasst ein computerlesbares Speichermedium, das Code speichert, der durch einen Prozessor ausgeführt werden kann, wobei der ausführbare Code einen Code umfasst, um Folgendes auszuführen: Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, Identifizierung von einem oder von mehreren Tags, die mit dem Thread assoziiert sind, Bestimmung einer Rechenanforderung des Threads basierend auf einem oder auf mehreren Tags und Zuordnung des Threads an einen der Prozessorkerne basierend auf der Rechenanforderung.
  • In bestimmten Ausführungsbeispielen führt der Code weiter Folgendes aus: Zuweisung von Hardware-Ressourcen zu dem Thread, basierend auf dem einen oder auf den mehreren Tags, wobei die Hardware-Ressourcen von einem Satz von Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist. In einigen Ausführungsbeispielen führt der Code weiter Folgendes aus: Identifizierung eines nicht markierten Threads, wobei der nicht markierte Thread nicht mit Tags assoziiert ist, Vergleich des nicht markierten Threads mit einem oder mit mehreren Thread-Profilen und Assoziierung des einen oder der mehreren Tags mit dem nicht markierten Thread basierend auf dem Vergleich.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Eine genauere Beschreibung der Ausführungsbeispiele, die oben kurz beschrieben wurden, wird durch Bezugnahme auf spezifische Ausführungsbeispiele gegeben, die in den beigefügten Zeichnungen veranschaulicht sind. Davon ausgehend, dass diese Zeichnungen nur einige Ausführungsbeispiele darstellen und daher nicht als den Schutzumfang einschränkend erachtet werden dürfen, werden die Ausführungsbeispiele mit zusätzlicher Spezifität und zusätzlichen Einzelheiten durch die Verwendung der beigefügten Zeichnungen beschrieben und erklärt, in denen:
  • 1 ein schematisches Blockdiagramm ist, das ein Ausführungsbeispiel eines Systems zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht;
  • 2 ein schematisches Blockdiagramm ist, das ein Ausführungsbeispiel einer Vorrichtung zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht;
  • 3A ein schematisches Blockdiagramm ist, das ein Ausführungsbeispiel einer Sammlung von Tags zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht;
  • 3B ein schematisches Blockdiagramm ist, das ein Ausführungsbeispiel eines Computersystems veranschaulicht, das ein granulares QoS für Computer-Ressourcen in einem Computersystem veranschaulicht;
  • 4 ein Flussdiagramm ist, das ein Ausführungsbeispiel eines Verfahrens zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht;
  • 5 ein Flussdiagramm ist, das ein weiteres Ausführungsbeispiel eines Verfahrens veranschaulicht, das ein granulares QoS für Computer-Ressourcen in einem Computersystem bereitstellt; und
  • 6 ein Flussdiagramm ist, das noch ein weiteres Ausführungsbeispiel eines Verfahrens zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht.
  • DETAILLIERTE BESCHREIBUNG
  • Wie von einem Fachmann zu sehen ist, können Gesichtspunkte der Ausführungsbeispiele als ein System, ein Verfahren oder ein Programmprodukt ausgeführt werden. Dementsprechend können Ausführungsbeispiele die Form eines ausschließlichen Hardware-Ausführungsbeispiels, eines ausschließlichen Software-Ausführungsbeispiels (darin eingeschlossen Firmware, residente Software, Microcode usw.) oder eines Ausführungsbeispiels annehmen, das Software- und Hardware-Gesichtspunkte kombiniert, die alle hierin allgemein als “Schaltung”, “Modul” oder “System” bezeichnet werden können. Außerdem können Ausführungsbeispiele die Form eines Programmprodukts annehmen, das in einem oder in mehreren computerlesbaren Speichergeräten verkörpert ist, die einen maschinelesbaren Code, einen computerlesbaren Code und/oder einen Programmcode speichern, der im Folgenden als Code bezeichnet wird. Die Speichergeräte können konkret, nicht-transitorisch und/oder nicht-übertragend sein. Die Speichergeräte können keine Signale verkörpern. In einem bestimmten Ausführungsbeispiel wenden die Speichergerät Signale nur zum Zugriff auf Code an.
  • Viele der funktionellen Einheiten, die in dieser Beschreibung beschrieben werden, werden als Module bezeichnet, um die Unabhängigkeit ihrer Implementierung besonders hervorzuheben. Zum Beispiel kann ein Modul als eine Hardware-Schaltung implementiert sein, umfassend individuell zugeschnittene VLSI-Schaltungen oder Gate-Arrays, serienmäßige Halbleiter wie z. B. logische Chips, Transistoren oder andere diskrete Komponenten. Ein Modul kann auch in programmierbaren Hardware-Geräten wie z. B. Field Programmable Gate-Arrays, programmierbaren logischen Bausteinen, programmierbaren logischen Geräten oder dergleichen implementiert sein.
  • Module können auch im Code und/oder in der Software zur Ausführung durch verschieden Arten von Prozessoren implementiert sein. Ein identifiziertes Modul des Codes kann z. B. einen oder mehrere physische oder logische Blöcke von ausführbarem Code umfassen, die z. B. als ein Gegenstand, ein Prozess oder eine Funktion organisiert sein können. Dennoch müssen die ausführbaren Dateien eines identifizierten Moduls physisch nicht beieinander angeordnet sein, sondern können disparate Anweisungen umfassen, die an verschiedenen Stellen gespeichert sind, die, wenn sie logisch miteinander verbunden sind, das Modul umfassen und den angegebene Zweck für das Modul erzielen.
  • In der Tat kann ein Modul von Code aus einer einzelnen Anweisung oder aus vielen Anweisungen bestehen und kann sogar über mehrere verschiedene Codesegmente, verschieden Programm und verschiedene Speichergeräte verteilt sein. Ähnlich können Betriebsdaten hier innerhalb von Modulen identifiziert und veranschaulicht sein und können in jeder geeigneten Form ausgeführt und innerhalb jeder geeigneten Art von Datenstruktur organisiert sein. Die Betriebsdaten können als ein einzelner Datensatz gesammelt oder können über verschiedene Stellen verteilt sein, darin eingeschlossen über verschiedene computerlesbare Speichergeräte. Dort, wo ein Modul oder Abschnitte eines Moduls in Software implementiert sind, sind die Softwareabschnitte in einer oder in mehreren computerlesbaren Speichergeräten gespeichert.
  • Jede Kombination von einem oder von mehreren computerlesbaren Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Speichermedium sein. Das computerlesbare Speichermedium kann ein Speichergerät sein, welche den Code speichert. Das Speichergerät kann z. B ein(e) elektronische(s), magnetische(s), optische(s), elektromagnetische(s), infrarote(s), holographische(s), mikromechanische(s) oder Halbleiter-System, -Gerät oder -Vorrichtung oder jede geeignete Kombination des oben Angegebenen sein, ist aber nicht darauf beschränkt.
  • Spezifischere Beispiele (einer nicht ausschließlichen Liste) des Speichergerätes umfassen Folgendes: eine elektrische Verbindung mit einem oder mit mehreren Drähten, eine tragbare Computer-Diskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Festwertspeicher (ROM), einen löschbaren, programmierbaren Festwertspeicher (EPROM oder Flash-Speicher), einen tragbaren Kompakt-Disk-Festwertspeicher (CD-ROM), ein optisches Speichergerät, ein magnetisches Speichergerät oder jede geeignete Kombination des oben Angegebenen. Im Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes konkrete Medium sein, das ein Programm zur Verwendung durch oder in Verbindung mit einem/einer Anweisungs-Ausführungs-System, -Vorrichtung oder Gerät enthalten oder speichern kann.
  • Ein Code zur Ausführung von Funktionen für Ausführungsbeispiele kann in jeder Kombination aus einer oder aus mehreren Programmiersprachen geschrieben sein, darin eingeschlossen eine objektorientierte Programmiersprache wie z. B. Python, Ruby, Java, Smalltalk, C++ oder dergleichen, und herkömmliche prozedurale Programmiersprachen wie z. B. die “C”-Programmiersprache oder dergleichen und/oder Maschinensprachen wie z. B. Assemblersprachen. Der Code kann vollständig oder teilweise auf dem Computer des Benutzers ablaufen, als ein eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernten Computer oder vollständig auf dem entfernten Computer oder Server. In letzterem Szenario kann der entfernte Computer mit dem Computer des Benutzers durch jede Art von Netzwerk verbunden sein, darin eingeschlossen ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder kann die Verbindung an einen externen Computer erfolgen (z. B. durch das Internet unter Verwendung eines Internet-Providers).
  • Die Bezugnahme in dieser gesamten Beschreibung auf “ein bestimmtes Ausführungsbeispiel”, “ein Ausführungsbeispiel” oder ähnliche Ausdrücke bedeutet, dass ein spezifisches Merkmal, eine spezifische Struktur oder Eigenschaft, die in Verbindung mit dem Ausführungsbeispiel beschrieben wird, in mindestens einem Ausführungsbeispiel enthalten ist. Somit können sich alle Beispiele der Wendungen “in einem bestimmten Ausführungsbeispiel”, “in einem Ausführungsbeispiel” oder ähnliche Ausrücke in dieser gesamten Beschreibung auf das gleiche Ausführungsbeispiel beziehen, was jedoch nicht notwendigerweise der Fall ist, und bedeuten “eines oder mehrere, jedoch nicht alle Ausführungsbeispiele” falls nicht ausdrücklich anders angegeben. Die Ausdrücke “einschließlich”, “umfassend”, “mit” und Variationen davon bedeuten “einschließlich, jedoch nicht begrenzt auf”, soweit es nicht ausdrücklich anders angegeben ist. Eine aufgezählte Liste von Punkten impliziert nicht, dass einer oder alle der Punkte gegenseitig ausschließlich sind, falls es nicht ausdrücklich anders angegeben ist. Die Ausdrücke “ein/einer/eines” und “der/die/das” beziehen sich auf “ein oder mehrere”, falls es nicht ausdrücklich anders angegeben ist.
  • Außerdem können die beschriebenen Merkmale, Strukturen oder Eigenschaften der Ausführungsbeispiele auf jede geeignete Weise kombiniert sein. In der folgenden Beschreibung werden zahlreiche spezifische Details bereitgestellt, wie Beispiele von Programmierung, Software-Modulen, Benutzerauswahlen, Netzwerktransaktionen, Datenbankanfragen, Datenbankstrukturen, Hardware-Modulen, Hardwareschaltungen, Hardwarechips usw., um ein gründliches Verständnis der Ausführungsbeispiele bereitzustellen. Ein Fachmann erkennt jedoch, dass Ausführungsbeispiele ohne eines oder mehrere spezifische Details oder mit anderen Verfahren, Komponenten, Materialien usw. ausgeführt werden können. In anderen Fällen werden gut bekannte Strukturen, Materialien oder Betriebe nicht gezeigt oder in Einzelheiten beschrieben, um zu vermeiden, dass Gesichtspunkte eines Ausführungsbeispiels unverständlich gemacht werden.
  • Gesichtspunkte der Ausführungsbeispiele, werden unten unter Bezugnahme auf schematische Flussdiagramme und/oder schematische Blockdiagramme von Verfahren, Vorrichtungen, Systemen und Programmprodukten in Übereinstimmung mit Ausführungsbeispielen beschrieben. Es ist zu sehen, dass jeder Block der schematischen Flussdiagramme und/oder der schematischen Blockdiagramme und die Kombinationen von Blöcken in den schematischen Flussdiagrammen und/oder schematischen Blockdiagrammen durch Code implementiert werden können. Dieser Code kann einem Prozessor eines Mehrzweckcomputers, eines Spezialcomputers oder anderer programmierbarer Datenverarbeitungsvorrichtungen bereitgestellt werden, um eine Maschine herzustellen, so dass die Anweisungen, die über den Prozessor des Computers oder andere programmierbare Datenverarbeitungsvorrichtung laufen, Mittel zur Implementierung der Funktionen/Aktionen erzeugen, die im Block oder in den Blöcken der schematischen Flussdiagramme und/oder der schematischen Blockdiagramme spezifiziert sind.
  • Der Code kann auch in einem Speichergerät gespeichert sein, das einen Computer, andere programmierbare Datenverarbeitungsvorrichtung oder andere Geräte anleiten kann, auf eine bestimmte Weise zu funktionieren, so dass die Anweisungen, die in dem Speichergerät gespeichert sind, ein Erzeugnis herstellen können, darin eingeschlossen Anweisungen, die die Funktion/Aktion implementieren, die im Block oder in den Blöcken der schematischen Flussdiagramme und/oder der schematischen Blockdiagramme spezifiziert sind.
  • Der Code kann auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Geräte geladen werden, um zu verursachen, dass eine Reihe von Betriebsschritten auf dem Computer, der anderen programmierbaren Vorrichtung oder andern Geräten ausgeführt werden, um einen computer-implementierten Prozess zu erzeugen, so dass der Code, der auf dem Computer oder der anderen programmierbaren Vorrichtung abläuft, Prozesse zur Implementierung der Funktionen/Aktionen bereitstellt, die im Block oder in den Blöcken des Flussdiagramms und/oder des Blockdiagramms spezifiziert sind.
  • Die schematischen Flussdiagramme und/oder die schematischen Blockdiagramme in den Figuren veranschaulichen die Architektur, die Funktion und den Betrieb von möglichen Implementierungen von Vorrichtungen, Systemen, Verfahren und Programmprodukten gemäß mehreren Ausführungsbeispielen. In dieser Hinsicht kann jeder Block in den schematischen Flussdiagrammen und/oder den schematischen Blockdiagrammen ein Modul, ein Segment oder einen Abschnitt des Codes darstellen, der einen oder mehrere ausführbare Anweisungen des Codes zur Implementierung der spezifischen logischen Funktion(en) umfasst.
  • Es sollte auch beachtet werden, dass, in einigen alternativen Implementierungen, die Funktionen, die im Block angegeben sind, außerhalb der Reihenfolge stattfinden können, die in den Figuren angegeben ist. Zum Beispiel können zwei Blöcke, die aufeinander folgend gezeigt werden, in der Tat im Wesentlichen gleichzeitig ausgeführt werden, oder können die Blöcke manchmal in umgekehrter Reihenfolge ausgeführt werden, je nach der entsprechenden Funktionalität. Es können andere Schritte und Verfahren entworfen werden, die eine gleichwertige Funktion, Logik oder Wirkung wie ein oder mehrere Blöcke oder Abschnitte davon der veranschaulichten Figuren aufweisen.
  • Obwohl verschiedene Pfeilarten und Stricharten im Flussdiagramm und/oder in den Blockdiagrammen verwendet werden können, wird davon ausgegangen, dass sie den Schutzumfang der entsprechenden Ausführungsbeispiele nicht einschränken. In der Tat können einige Pfeile und andere Verbinder verwendet werden, um nur den logischen Fluss des dargestellten Ausführungsbeispiels anzugeben. Zum Beispiel kann ein Pfeil einen Warte- oder Überwachungszeitraum von nicht spezifizierter Dauer zwischen aufgezählten Schritten des dargestellten Ausführungsbeispiels anzeigen. Es ist auch zu sehen, dass jeder Block der Blockdiagramme und/oder der Flussdiagramme und Kombinationen von Blöcken in den Blockdiagrammen und/oder Flussdiagrammen durch auf speziellen Hardwarebasierten Systemen, die die spezifischen Funktionen oder Aktionen ausführen, oder Kombinationen von spezieller Hardware und Code implementiert werden können.
  • Die Beschreibung von Elementen in jeder Figur kann sich auf Elemente von vorhergehenden Figuren beziehen. Ähnliche Nummern beziehen sich auf ähnliche Elemente in allen Figuren, darin eingeschlossen alternative Ausführungsbeispiele von ähnlichen Elementen.
  • Im Allgemeinen stellen die offenbarten Systeme, Vorrichtungen, Verfahren und Programmprodukte mehr granulare QoS für Computer-Ressourcen in einem Computersystem bereit, verglichen mit herkömmlicher Zeitsteuerung. Threads werden mit Identität und Einzelheit markiert, um die Ressourcen-Zuweisung zu verbessern. Während die meisten Anwendungen zahlreiche Threads umfassen, liegt jedoch z. B. im Fall von Spielen und parametrischer Modellierung immer ein Haupt-Arbeits-Thread vor, der beträchtlich anspruchsvoller als die anderen ist. Um die Anwendung zu optimieren, wird der primäre Arbeits-Thread auf einem einzelnen Kern isoliert, wobei nicht vorgesehen ist, dass andere Threads damit interferieren. Andere Threads können frei über die verbleibenden Kerne verteilt sein. Von hier lässt die Einstellung einer Extra-Prozess-Priorität einer Anwendung dem Scheduler wissen, wie die Symmetrie der Anwendung gegenüber anderen Anwendungen herzustellen ist, während die individuellen Threads eines Computerprozesses verschieden gehandhabt werden, basierend auf ihren Erfordernissen, die sich nicht unter dem Anwendungsschirm befinden.
  • Eine heutige CPU schaltet ein und aus, je nach den Änderungen in der Systemanforderung. Dieser Prozess ist rückschrittlich und berücksichtigt nicht, welche Arbeitslasten kommen können, oder wann gegenwärtige Arbeitslasten enden können. Rückschrittliche CPUs bewegen Computerprozesse umher, um Ressourcen neu auszubalancieren und zu optimieren; jedoch ist dieser Prozess teuer und verbraucht möglicherweise unnötige Ressourcen, wenn er Computerprozesse neu verteilt. Durch die Kenntnis der Rechenanforderungen, der Bedeutung und der Empfindlichkeit eines neuen Threads kann der Scheduler den Thread sogleich auf dem richtigen Kern platzieren. Dies könnte eine Mischung von Kernen mit niedrigeren Leistungen umfassen, die mit einer niedrigen und stetigen Geschwindigkeit arbeiten, die jedoch ausreichend für viele Threads ist, die nicht intensiv oder zeitempfindlich arbeiten. Durch die anfängliche korrekte Zuordnung und Ausbalancierung von Ressourcen werden die häufigen Änderungen des CPU-Leistungszustands, die für einen geringeren gesamten Leistungsverbrauch erforderlich sind, oder die Reaktion auf Anforderung stark reduziert. Der Aufwand aufgrund der Neuverteilung der Threads wird beträchtlich reduziert. Diese Effizienz reduziert den durchschnittlichen CPU-Leistungsverbrauch (und dadurch den gesamten Stromverbrauch).
  • Gegenwärtige CPUs weisen eine feste L2/L3-Cachegrösse auf allen Kernen auf. Wenn eine CPU Anforderungen hinsichtlich eines Threads verarbeitet, bewegt sie Ressourcen zwischen Cache L1, L2 und L3, wie erforderlich. Die CPU fordert Daten zuerst vom Cache der reihe nach an. Jede Anfrage, die sich zum nächsten Niveau ausbreiten muss, ist als Cache-Verfehlung bekannt. Jedes aufeinander folgende Cache-Niveau ist bedeutend langsamer als dasjenige darüber, wobei der Hauptspeicher der langsamste Betrieb ist. Daher ist es äußerst vorteilhaft, einen Betrieb im Cache abzuschließen, dass der CPU am nächsten ist, falls möglich.
  • Das Hyper-Threading begrenzt weiter das Cache L2, indem es Letzteres zwischen zwei logischen Kernen aufspaltet, wodurch die Anzahl von verfügbaren Kernen, aber auch die Chancen einer Cache-Verfehlung verdoppelt werden. In den meisten Computerszenarien überwiegt der Vorteil der zusätzlichen Kerne die Kosten der verlorenen Caches. Die Kenntnis der Art von Arbeitslast, die ein Thread mit sich bringt, ermöglicht eine variierende Auswahl von Kernen, einige mit Hyper-Threading, einige ohne diese, die ermöglicht, dass der Thread dem am meisten geeigneten Kern für die Arbeitslast zugewiesen wird. Das Endergebnis ist eine schnellere, effizientere Verarbeitung mit einer geringeren Überbelastung. Die Leistungseinsparungen in diesem Szenario erstrecken sich auf die reduzierte Anforderung des Hauptspeichers.
  • Die Kenntnis der vollständigen Beschaffenheit einer Anwendungs-Arbeitslast könnte eine Bestimmungen dessen ermöglichen, ob die Arbeit lokal verarbeitet oder sie hin zu einer externen Computervorrichtung (z. B., einer Computerfarm) verschoben werden soll. Diese Bestimmung ist viel effizienter bei Netzwerk-Ressourcen, ebenso wie dort, wo die Arbeitslast versendet wird. Sie könnte auch bestimmen, welche Netzwerk-Ressource am effizientesten oder am meisten ausreicht ist, um die Arbeitslast umzuleiten. Dies ist insbesondere nützlich in mobilen Umfeldern, in denen Laptops, die mit Leitung verbunden sind, ausreichend Ressourcen aufweisen können, um die Arbeit lokal am effizientesten abzuschließen, jedoch nicht bei Batterieleistung.
  • 1 zeigt ein System 100 zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem. Das System 100 kann ein elektronisches Gerät 105 umfassen, die selbst einen Prozessor 110, einen Speicher 115, ein granulares Ressourcen-Modul 120 und eine Netzwerkschnittstelle 125 umfasst. In einigen Ausführungsbeispielen kann das elektronische Gerät 105 mit einer anderen Geräten, wie z. B. einer entfernten Computergerät 130, über ein Datennetzwerk 150 verbunden sein. Das Datennetzwerk 150 kann das Internet, ein lokales Netzwerk, ein Fernnetz, ein Wi-Fi-Netzwerk, ein mobiles Telefonnetzwerk oder Kombinationen davon sein.
  • Das elektronische Gerät 105 kann jedes digitale Gerät sein, das dazu in der Lage ist, Computerprozesse auszuführen, unter Verwendung eines Mikroprozessors, einer Mikrosteuerung oder eines anderen Verarbeitungsgerätes v, darin eingeschlossen, jedoch nicht beschränkt auf, ein Mehrzweck-Computergerät, ein spezielles (dediziertes) Computergerät und dergleichen. In einigen Ausführungsbeispielen kann das elektronische Gerät 105 ein Personalcomputer sein, darin eingeschlossen, jedoch nicht beschränkt auf, ein mobiles Telefon, ein Smartphone, ein Tablet-Computer, ein Laptop-Computer, ein Handheld-Computer, ein tragbarer Computer, ein Desktop-Computer, eine Spielkonsole oder dergleichen. In weiteren Ausführungsbeispielen kann das elektronische Gerät 105 ein Embedded Computer sein, wie z. B. ein Systemon-a-Chip (SoC), ein Application Specified Standard Prozessor (ASSP), ein Application-Specific Instruction Set Prozessor (ASIP) oder dergleichen.
  • Der Prozessor 110 kann in einem Ausführungsbeispiel jede bekannte Steuerung umfassen, die dazu in der Lage ist, computerlesbare Anweisungen auszuführen und/oder dazu in der Lage ist, logische Operationen durchzuführen. Zum Beispiel kann der Prozessor 110 eine Mikrosteuerung, einen Mikroprozessor, eine Zentraleinheit (CPU), eine Graphikverarbeitungseinheit (GPU), eine Hilfseinheit, eine FPGA oder eine ähnliche programmierbare Steuerung sein. In einigen Ausführungsbeispielen führt der Prozessor 110 Anweisungen aus, die im Speicher 115 abgelegt sind, um die Verfahren und Routinen durchzuführen, die hierin beschrieben sind. Der Prozessor 110 ist kommunikativ mit dem Speicher 115, dem granularen Ressourcen-Modul 120 und der Netzwerkschnittstelle 125 gekoppelt.
  • In einigen Ausführungsbeispielen kann der Prozessor 110 eine Vielzahl von Verarbeitungseinheiten umfassen, wie z. B. eine Vielzahl von Verarbeitungskernen, eine Vielzahl von CPUs, eine Vielzahl von Mikrosteuerungen oder dergleichen. In bestimmten Ausführungsbeispielen kann die Vielzahl von Verarbeitungseinheiten verschiedene Systemeigenschaften aufweisen. Zum Beispiel kann der Prozessor 110 eine erste CPU mit einer Prozessorgeschwindigkeit von 2,4 GHz und mit acht Prozessorkernen umfassen. Der Prozessor 110 kann auch eine zweite CPU mit einer Prozessorgeschwindigkeit von 4,2 GHz und aufzurufende Prozessorkerne umfassen. In einem weiteren Ausführungsbeispiel können die erste CPU und die zweite CPU verschiedene Mengen von Speichercache aufweisen.
  • Der Speicher 115 ist in einem Ausführungsbeispiel ein computerlesbares Speichermedium. In einigen Ausführungsbeispielen umfasst der Speicher 115 flüchtige Computerspeichermedien. Zum Beispiel kann der Speicher 115 einen Direktzugriffspeicher (RAM) umfassen, darin eingeschlossen einen dynamischen RAM (DRAM), einen synchronen dynamischen RAM (SDRAM) und/oder einen statischen RAM (SRAM). In einigen Ausführungsbeispielen umfasst der Speicher 115 nichtflüchtige Computerspeichermedien. Zum Beispiel kann der Speicher 115 ein Festplattenlaufwerk, einen Flash-Speicher oder jedes andere geeignete nichtflüchtige Computerspeichergerät umfassen. In einigen Ausführungsbeispielen umfasst der Speicher 115 sowohl flüchtige als auch nichtflüchtige Computerspeichermedien.
  • In einigen Ausführungsbeispielen speichert der Speicher 115 Daten, die sich auf die Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem beziehen, z. B. kann der Speicher 115 Tags auf Thread-Niveau, Tags auf Prozess-Niveau, Thread-Profile und dergleichen speichern. In einigen Ausführungsbeispielen speichert der Speicher 115 auch den Programmcode und verwandte Daten, wie z. B. ein Betriebssystem oder andere Steuerungsalgorithmen, die auf dem elektronischen Gerät 105 arbeiten.
  • Das granulare Ressourcen-Modul 120 ist in einem Ausführungsbeispiel konfiguriert, um einen Thread zu identifizieren, der Teil eines Computerprozesses ist, ein oder mehrere Tags auf Thread-Niveau zu identifizieren, die mit dem Thread assoziiert sind, eine Rechenanforderung des Threads basierend dem einen oder den mehreren Tags auf Thread-Niveau zu bestimmen und den Thread einem der Prozessorkerne basierend auf der Rechenanforderung zuzuordnen. Das granulare Ressourcen-Modul 120 kann eine Intra-Prozess-Priorität des Threads basierend auf dem einen oder den mehreren Tags auf Thread-Niveau bestimmen. Das granulare Ressourcen-Modul 120 kann auch dem Thread basierend auf der Intra-Prozess-Priorität Hardware-Ressourcen zuweisen, wobei die Hardware-Ressourcen von einem Satz von Hardware-Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist.
  • In einigen Ausführungsbeispielen kann das granulare Ressourcen-Modul 120 Systemeigenschaften eines Computersystems identifizieren, das den Computerprozess ausführt, wobei die Zuordnung des Threads zu einem der Prozessorkerne weiter auf den Systemeigenschaften basiert. In einem Ausführungsbeispiel kann das granulare Ressourcen-Modul 120 einen nicht markierten Thread identifizieren, wobei der nicht markierte Thread mit keinen Tags assoziiert ist, den nicht markierten Thread mit einem oder mit mehreren Thread-Profilen vergleichen und das eine oder die mehreren Tags mit dem nicht markierten Thread basierend auf dem Vergleich assoziieren.
  • In einigen Ausführungsbeispielen kann x105 auch ein Eingabegerät und/oder ein Ausgabegerät umfassen. In bestimmten Ausführungsbeispielen kann das Eingabegerät jedes bekannte Computereingabegerät umfassen, darin eingeschlossen einen Sensorbildschirm, eine Taste, eine Tastatur, einen Stylus, ein Mikrophon oder dergleichen. In einigen Ausführungsbeispielen kann das Eingabegerät in das Ausgabegerät integriert sein, z. B. als ein Touchscreen oder ein ähnliches berührungsempfindliches Gerät. In einigen Ausführungsbeispielen umfasst das Eingabegerät einen Touchscreen, so dass Text unter Verwendung einer virtuellen Tastatur, die auf dem Touchscreen angezeigt ist, und/oder handschriftlich auf dem Touchscreen eingegeben werden kann. In einigen Ausführungsbeispielen umfasst das Eingabegerät zwei oder mehrere verschiedene Geräte, wie z. B. eine Tastatur und einen Sensorbildschirm.
  • In bestimmten Ausführungsbeispielen kann das Ausgabegerät eine elektronisch steuerbare Anzeige oder Anzeigegerät umfassen. Das Ausgabegerät kann entworfen sein, um visuelle, hörbare und/oder haptische Signale auszugeben. In einigen Ausführungsbeispielen umfasst das Ausgabegerät eine elektronische Anzeige, die dazu in der Lage ist, visuelle Daten an einen Benutzer auszugeben. Zum Beispiel kann das Ausgabegerät eine LCD-Anzeige, eine LED-Anzeige, eine OLED-Anzeige, einen Projektor oder ein ähnliches Anzeigegerät umfassen, das dazu in der Lage ist, Bilder, Text oder dergleichen an einen Benutzer auszugeben, ist jedoch nicht darauf beschränkt. Als ein weiteres, nicht einschränkendes Beispiel kann das Ausgabegerät eine tragbare Anzeige umfassen, wie z. B. eine Smartwatch, Smartglasses, eine Heads-Up-Anzeige oder dergleichen. Weiter kann das Ausgabegerät eine Komponente eines Smartphones, eines Personal Digital Assistants, eines Fernsehers, eines Tischcomputers, eines Notebook-(Laptop-)Computers, eines Personalcomputers, eines Fahrzeug-Armaturenbretts usw. sein.
  • In bestimmten Ausführungsbeispielen umfasst das Ausgabegerät einen oder mehrere Lautsprecher, um einen Ton zu erzeugen. Zum Beispiel kann das Ausgabegerät einen hörbaren Alarm oder eine hörbare Benachrichtigung erzeugen (z. B. ein Piepsignal oder einen Schlag). In einigen Ausführungsbeispielen umfasst das Ausgabegerät ein oder mehrere haptische Geräte, um Vibrationen, Bewegung oder ein anderes haptisches Feedback zu erzeugen. In einigen Ausführungsbeispielen können die Gesamtheit oder Abschnitte des Ausgabegerätes in das Eingabegerät 306 integriert sein. Zum Beispiel können das Eingabegerät und das Ausgabegerät einen Touchscreen oder eine ähnliche berührungsempfindliche Anzeige bilden. In weiteren Ausführungsbeispielen kann das Ausgabegerät in der Nähe des Eingabegerätes angeordnet sein.
  • In bestimmten Ausführungsbeispielen kann das elektronische Gerät 105 eine Netzwerkschnittstelle 125 umfassen. Die Netzwerkschnittstelle 125 umfasst in einem Ausführungsbeispiel Software und/oder Hardware, die das elektronische Gerät 105 mit dem entfernten Computergerät 130 entweder direkt oder über das Datennetzwerk 150 verbindet. Zum Beispiel kann die Netzwerkschnittstelle 125 einen physischen Netzwerkadapter und einen oder mehrere Protokollstapel umfassen, um unter Verwendung von Computernetzwerkprotokollen Anfragen an das entfernte Computergerät 130 zu senden und Antworten und/oder Daten von diesem zu empfangen. In einem Ausführungsbeispiel kann die Netzwerkschnittstelle 125 eine drahtlose Netzwerkschnittstelle umfassen, die das elektronische Gerät 105 mit dem entfernten Computergerät 130 über Funk oder andere drahtlose Kommunikationsmedien verbindet. In einem weiteren Ausführungsbeispiel kann die Netzwerkschnittstelle 125 eine verdrahtete oder faseroptische Schnittstelle umfassen, um das elektronische Gerät 105 mit dem entfernten Computergerät 130 zu verbinden. In einigen Ausführungsbeispielen ist die Netzwerkschnittstelle 125 konfiguriert, um sichere Verbindungen mit dem entfernten Computergerät 130 über das Datennetzwerk 150 festzusetzen.
  • Das entfernte Computergerät 130 ist in einem Ausführungsbeispiel konfiguriert, um einen oder mehrere Computerprozesse bezüglich des elektronischen Gerätes 105 auszuführen. Zum Beispiel kann das elektronische Gerät 105 einen oder mehrere Computerprozesse auf das entfernte Computergerät 130 offloaden, wobei das entfernte Computergerät 130 die offgeloadeten Computerprozesse ausführt und seine Ergebnisse an das elektronische Gerät 105 zurücksendet. In bestimmten Ausführungsbeispielen kann das entfernte Computergerät 130 ein Server sein. In weiteren Ausführungsbeispielen kann das entfernte Computergerät 130 Teil eines Serverbezirks sein.
  • Wie dargestellt, kann das entfernte Computergerät 130 mindestens einen entfernten Prozessor 135, einen entfernten Speicher 140 und eine Netzwerkschnittstelle 145 umfassen. Der entfernte Prozessor 135 kann in einem Ausführungsbeispiel jede bekannte Steuerung umfassen, die dazu in der Lage ist, computerlesbare Anweisungen auszuführen und/oder dazu in der Lage ist, logische Operationen durchzuführen. Zum Beispiel kann der entfernte Prozessor 135 eine Mikrosteuerung, ein Mikroprozessor, eine Zentraleinheit (CPU), eine Graphikverarbeitungseinheit (GPU), eine Hilfseinheit, eine FPGA oder eine ähnliche programmierbare Steuerung sein. In einigen Ausführungsbeispielen führt der entfernte Prozessor 135 Anweisungen aus, die in einem entfernten Speicher 140 abgelegt sind, um die Verfahren und Routinen durchzuführen, die hierin beschrieben sind. Der entfernte Prozessor 135 ist kommunikativ mit dem entfernten Speicher 140 und der Netzwerkschnittstelle 145 gekoppelt.
  • Der entfernte Speicher 140 ist in einem Ausführungsbeispiel ein computerlesbares Speichermedium. In einigen Ausführungsbeispielen umfasst der entfernte Speicher 140 flüchtige Computerspeichermedien. Zum Beispiel kann der entfernte Speicher 140 einen Direktzugriffsspeicher (RAM) umfassen, darin eingeschlossen eine dynamischen RAM (DRAM), einen synchronen dynamischen RAM (SDRAM) und/oder einen statischen RAM (SRAM). In einigen Ausführungsbeispielen umfasst der entfernte Speicher 140 nichtflüchtige Computerspeichermedien. Zum Beispiel kann der entfernte Speicher 140 ein Festplattenlaufwerk, einen Flash-Speicher oder jedes andere geeignete nichtflüchtige Computerspeichergerät umfassen. In einigen Ausführungsbeispielen umfasst der entfernte Speicher 140 sowohl flüchtige als auch nichtflüchtige Computerspeichermedien.
  • In einigen Ausführungsbeispielen speichert der entfernte Speicher 140 Daten, die sich auf die Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem beziehen, z. B. kann der entfernte Speicher 140 Thread-Profile und dergleichen speichern. In einigen Ausführungsbeispielen speichert der entfernte Speicher 140 auch den Programmcode und verwandte Daten, wie z. B. ein Betriebssystem oder andere Steuerungsalgorithmen, die auf dem entfernten Computergerät 130 arbeiten.
  • Die Netzwerkschnittstelle 145 umfasst in einem Ausführungsbeispiel Software und/oder Hardware, die das entfernte Computergerät 130 mit dem elektronischen Gerät 105 entweder direkt oder über das Datennetzwerk 150 verbindet. Zum Beispiel kann die Netzwerkschnittstelle 145 einen physischen Netzwerkadapter und einen oder mehrere Protokollstapel umfassen, um unter Verwendung von Computernetzwerkprotokollen Anfragen von dem elektronischen Gerät 105 zu empfangen und/oder Antworten und/oder Daten von diesem zu senden. In einem Ausführungsbeispiel kann die Netzwerkschnittstelle 145 eine drahtlose Netzwerkschnittstelle umfassen, die das entfernte elektronische Gerät 130 mit dem elektronischen Gerät 105 über Funk oder andere drahtlose Kommunikationsmedien verbindet. In einem weiteren Ausführungsbeispiel kann die Netzwerkschnittstelle 145 eine verdrahtete oder faseroptische Schnittstelle umfassen, um das entfernte Computergerät 130 mit dem elektronischen Gerät 105 zu verbinden. In einigen Ausführungsbeispielen ist die Netzwerkschnittstelle 145 konfiguriert, um sichere Verbindungen mit dem elektronischen Gerät 105 über das Datennetzwerk 150 festzusetzen.
  • In bestimmten Ausführungsbeispielen kann das entfernte Computergerät 130 auch ein granulares Ressourcen-Modul (nicht gezeigt) umfassen. Das granulare Ressourcen-Modul kann im Wesentlichen ähnlich dem granularen Ressourcen-Modul 120, wie oben beschrieben, sein. Zusätzlich kann das entfernte Computergerät 130 in einigen Ausführungsbeispielen ein Eingabegerät und/oder ein Ausgabegerät umfassen, die im Wesentlichen ähnlich denjenigen sind, die oben unter Bezugnahme auf das elektronische Gerät 105 beschrieben wurden.
  • 2 veranschaulicht ein granulares QoS-Gerät 200, um granulare QoS für Computer-Ressourcen in einem Computersystem bereitzustellen. Das granulare QoS-Gerät 200 kann ein granulares Ressourcen-Modul 120 umfassen und kann mit dem Eingabegerät 125 verbindend gekoppelt sein, welches Eingabeanschlagdaten empfängt. Wie veranschaulicht, umfasst das granulare Ressourcen-Modul 120 ein Thread-Modul 205, ein Tag-Modul 210, ein Anforderungs-Modul 215 und ein Zuordnungs-Modul 220. In einigen Ausführungsbeispielen kann das granulare QoS-Gerät 200 auch eines oder mehrere der folgenden umfassen: ein Haupt-Thread-Modul 225, ein Prioritäts-Modul 230, ein Abhängigkeits-Modul 235, ein Intensitäts-Modul 240, ein Zeit-Modul 245, ein Cache-Modul 250, ein Profil-Modul 255, ein Assoziations-Modul 260, ein Eigenschafts-Modul 265, ein Zuweisungs-Modul 270 und ein Kosten-Modul 280. Die Module 205280 können verbindend aneinandergekoppelt sein. In bestimmten Ausführungsbeispielen kann jedes der Module 205280, wie oben beschrieben, in einer Hardware-Schaltung implementiert sein. In anderen Ausführungsbeispielen können eines oder mehrere der Module 205280, wie oben beschrieben, als Firmware und/oder Software implementiert sein, wie z. B. als Programmcode, der in computerlesbaren Medien eingebettet ist.
  • Das Thread-Modul 205 ist in einem Ausführungsbeispiel konfiguriert, um einen Thread zu identifizieren, der Teil des Computerprozesses ist. Der Computerprozess kann in bestimmten Ausführungsbeispielen eine Software-Anwendung sein, die auf dem elektronischen Gerät 105 abläuft. In einigen Ausführungsbeispielen kann der Computerprozess ein Computerprozess mit einem einzigen Thread sein, die einen einzigen Worker-Thread umfasst. In anderen Ausführungsbeispielen kann der Computerprozess ein Computerprozess mit zahlreichen Threads sein, umfassend eine Vielzahl von Arbeits-Threads. In bestimmten Ausführungsbeispielen kann der Computerprozess mit zahlreichen Threads einen Haupt-Arbeits-Thread und einen oder mehrere sekundäre Arbeits-Threads umfassen.
  • In einigen Ausführungsbeispielen kann das Thread-Modul 205 bestimmen, ob ein Thread ein Haupt-Arbeits-Thread oder ein sekundärer Arbeits-Thread ist, kann eine Intra-Prozess-Priorität eines Threads bestimmen, und/oder kann Thread-Abhängigkeiten von Threads des Computerprozesses bestimmen. In bestimmten Ausführungsbeispielen kann das Tag-Modul 210 ein oder mehrere Untermodule umfassen, wie z. B. das Haupt-Thread-Modul 225, das Prioritätsmodul 230, und/oder das Abhängigkeits-Modul 235 zur Durchführung der oben angegebenen Funktionen.
  • Das Haupt-Thread-Modul 225 ist in einem Ausführungsbeispiel konfiguriert, um einen Haupt-Arbeits-Thread für den Computerprozess zu identifizieren. Zum Beispiel kann das Haupt-Arbeits-Modul 255 bestimmen, ob ein Thread der Haupt-Arbeits-Thread ist. In einem Ausführungsbeispiel führt der Haupt-Arbeits-Thread den Grossteil des Computerprozesses durch. In einem weiteren Ausführungsbeispiel kann der Haupt-Arbeits-Thread ein Benutzerschnittstellen-Thread sein, um mit dem Benutzer zu interagieren. In einem weiteren Ausführungsbeispiel kann der Haupt-Arbeits-Thread die sekundären Arbeits-Threads koordinieren.
  • In bestimmten Ausführungsbeispielen ist der Haupt-Arbeits-Thread mit dem Haupt-Arbeits-Tag assoziiert, wobei das Haupt-Thread-Modul 255 den Haupt-Arbeits-Thread unter Verwendung des Haupt-Arbeits-Tags identifiziert. In einem weiteren Ausführungsbeispiel kann das Haupt-Thread-Modul 225 eine Laufzeitanalyse des Computerprozesses verwenden, um zu bestimmen, ob ein Thread ein Haupt-Arbeits-Thread ist. Das Haupt-Arbeits-Modul 255 kann weiter konfiguriert sein, um zu bestimmen, ob ein Thread ein sekundärer Arbeits-Thread ist. In Reaktion auf die Identifizierung des Haupt-Arbeits-Threads kann das Haupt-Arbeits-Modul 225 eine Angabe an das Zuordnungs-Modul bereitstellen, wobei das Zuordnungs-Modul 225 den Haupt-Arbeits-Thread seinem eigenen Prozessorkern zuordnet (z. B. einem Prozessorkern, der nicht einem sekundären Arbeits-Thread des Computerprozesses zugeordnet ist).
  • Das Prioritäts-Modul 230 ist in einem Ausführungsbeispiel konfiguriert, um eine Intra-Prozess-Priorität des Threads basierend auf einem oder auf mehreren Tags auf Thread-Niveau zu bestimmen. Wie hierin verwendet bezieht sich die Intra-Prozess-Priorität eines Threads auf die Bedeutung des Threads (Priorität) mit Bezug auf andere Threads des gleichen Computerprozesses. Zum Beispiel kann ein Thread des Computerprozesses, der Benutzerinteraktionen handhabt, eine höhere Intra-Prozess-Priorität als ein Thread des gleichen Computerprozesses aufweisen, der Daten aus einem nichtflüchtigen Speicher 115 wiedergewinnt. Die Intra-Prozess-Priorität zeigt die Reihenfolge an, in der Computer-Ressourcen innerhalb des Computer-Prozesses zugewiesen werden sollten.
  • In bestimmten Ausführungsbeispielen kann das Prioritäts-Modul 230 weiter konfiguriert sein, um eine Extra-Prozess-Priorität des Computerprozesses basierend auf einem oder auf mehreren Tags auf Prozess-Niveau zu bestimmen. Wie hierin verwendet bezieht sich die Extra-Prozess-Priorität eines Threads auf die Bedeutung (Priorität) des Computerprozesses mit Bezug auf andere Computerprozesse, die auf dem elektronischen Gerät 105 laufen. Das Prioritäts-Modul 230 kann die Extra-Prozess-Priorität einem CPU-Scheduler oder einem ähnlichen Scheduler-Algorithmus angeben, wobei ein Satz von Hardware-Ressourcen dem Computerprozess basierend auf der Extra-Prozess-Priorität zugewiesen wird.
  • In einigen Ausführungsbeispielen kann das Prioritäts-Modul 230 eine Angabe eines Zeitempfindlichkeits-Niveaus eines bestimmten Threads empfangen, wobei das Prioritätsmodul 230 dem Thread eine Intra-Prozess-Priorität basierend auf dem Zeitempfindlichkeits-Niveau zuweist. Zum Beispiel können die Tags die Toleranz eines Threads gegenüber einer Verzögerung (Zeitempfindlichkeits-Niveau) angeben, wobei das Prioritäts-Modul 230 dem Thread eine geringere Intra-Prozess-Priorität in Reaktion darauf, dass der Thread eine höhere Toleranz gegenüber einer Verzögerung aufweist, zuweisen kann. Im Gegensatz dazu kann das Prioritäts-Modul 230 einem Thread eine höhere Intra-Prozess-Priorität in Reaktion darauf, dass der Thread eine niedrigere Toleranz gegenüber einer Verzögerung aufweist, zuweisen.
  • Das Abhängigkeits-Modul 235 ist in einem Ausführungsbeispiel konfiguriert, um Thread-Abhängigkeiten aus der Vielzahl von Threads zu identifizieren, die Teil des Computerprozesses sind. In bestimmten Ausführungsbeispielen kann das Abhängigkeits-Modul 235 die Thread-Abhängigkeiten dem Prioritäts-Modul 230 angeben, wobei das Prioritäts-Modul 230 die Intra-Prozess-Priorität basierend auf den Thread-Abhängigkeiten bestimmt. Zum Beispiel kann das Prioritäts-Modul 230 eine Intra-Prozess-Priorität basierend auf den Thread-Abhängigkeiten zuweisen, die vom Abhängigkeits-Modul 235 identifiziert wurden.
  • In einigen Ausführungsbeispielen kann das Abhängigkeits-Modul 235 Thread-Abhängigkeiten unter Verwendung von Tags identifizieren. Zum Beispiel kann ein Programmierer ein Tag auf Thread-Niveau hinzufügen, der anzeigt, dass ein erster Thread von einem zweiten Thread abhängt. In weiteren Ausführungsbeispielen kann das Abhängigkeits-Modul 235 Thread-Abhängigkeiten durch die Analyse des Laufzeitverhaltens der Threads des Computerprozesses analysieren. Zum Beispiel kann das Abhängigkeits-Modul 235 identifizieren, wann ein erster Thread darauf wartet, dass ein zweiter Thread eine Aufgabe ausführt, bevor er die Ausführung fortsetzt. Das Abhängigkeits-Modul 235 kann weiter einen dritten Thread identifizieren, der auch darauf wartet, dass der zweite Thread seine Aufgabe abschließt, bevor er abläuft, wobei der erste Thread auch darauf wartet, dass der dritte Thread seine Aufgabe abschließt, bevor er abläuft. Hier kann das Laufzeitverhalten anzeigen, dass der erste Thread vom zweiten Thread und vom dritten Thread abhängt, und dass der dritte Thread auch vom zweiten Thread abhängt.
  • Das Tag-Modul 210 ist in einem Ausführungsbeispiel konfiguriert, um ein oder mehrere Tags, die mit dem Thread assoziiert sind, zu identifizieren. In einigen Ausführungsbeispielen kann ein bestimmter Thread mit einem oder mit mehreren Tags auf Thread-Niveau und einem oder mehreren Tags auf Prozesses-Niveau assoziiert sein. Wie hierin verwendet bezieht sich Tag auf Thread-Niveau auf eine Information, die Eigenschaften eines Threads beschreibt. In einigen Ausführungsbeispielen kann ein Tag auf Thread-Niveau eine Thread identifizieren, eine Priorität des Threads angeben, eine Rechenanforderung/-Präferenz für den Thread angeben, eine Beziehung zu einem weiteren Thread des gleichen Computerprozesses oder dergleichen angeben. Wie hierin verwendet bezieht sich Tag auf Prozess-Niveau auf eine Information, die Eigenschaften eines Computerprozesses beschreibt. Jeder Thread eines Computerprozesses ist mit den gleichen Tags auf Prozess-Niveau assoziiert (z. B. vererben die Threads Tags auf Prozess-Niveau des Computerprozesses). In einigen Ausführungsbeispielen kann ein Tag auf Prozess-Niveau einen Computerprozess identifizieren, kann eine Priorität des Computerprozesses angeben, kann eine Rechenanforderung/-Präferenz für den Computerprozess oder dergleichen angeben.
  • In einigen Ausführungsbeispielen kann das Tag-Modul 210 einen Tag identifizieren, der von einem Autor des Computerprozesses bereitgestellt wird. Zum Beispiel kann ein Programmierer, der den Computerprozess erstellt, ein oder mehrere Tags bereitstellen, die Eigenschaften und/oder die Rechenanforderungen der Threads des Computerprozesses angeben. In einem Ausführungsbeispiel kann der Autor ein oder mehrere Tags auf Thread-Niveau bereitstellen. In einem weiteren Ausführungsbeispiel kann der Programmierer ein oder mehrere Tags auf Prozess-Niveau bereitstellen. In weiteren Ausführungsbeispielen kann das Tag-Modul 210 ein Tag identifizieren, das automatisch basierend auf einer Analyse (z. B. einer Laufzeitanalyse) des Computerprozesses erzeugt wurde. Zum Beispiel kann das Assoziations-Modul 245 automatisch ein oder mehrere Tags auf Thread-Niveau und/oder ein oder mehrere Tags auf Prozess-Niveau mit einem Thread basierend auf einer Laufzeitanalyse des Computerprozesses assoziieren.
  • In einigen Ausführungsbeispielen kann das Tag-Modul 210 einen nicht markierten Thread identifizieren, wobei der nicht markierte Thread mit keinen Tags assoziiert ist. In weiteren Ausführungsbeispielen kann das Tag-Modul 210 ein oder mehrere Tags mit einem ansonsten nicht markierten Thread des Computerprozesses assoziieren. Zum Beispiel kann das Tag-Modul 210 einen nicht markierten Thread mit einem Thread-Profil vergleichen und ein oder mehrere Tags auf Thread-Niveau mit dem nicht markierten Thread assoziieren, basierend auf einem passenden Thread-Profil. In bestimmten Ausführungsbeispielen kann das Tag-Modul 210 ein oder mehrere Unter-Module enthalten, wie z. B. das Profil-Modul 240 und/oder das Assoziations-Modul 245, um ein oder mehrere Tags mit einem ansonsten nicht markierten Thread des Computerprozesses zu assoziieren.
  • Das Profil-Modul 240 ist in einem Ausführungsbeispiel konfiguriert, um einen Thread mit einem oder mit mehreren Thread-Profilen zu vergleichen Zum Beispiel kann das Profil-Modul 240 einen nicht markierten Thread mit einem oder mit mehreren Thread-Profilen vergleichen wobei das Assoziations-Modul 245 einen Tag mit dem nicht markierten Thread basierend auf dem Vergleich assoziiert hat. In einem anderen Beispiel kann das Profil-Modul 240 ein dynamisch erzeugtes Thread-Profil mit einem oder mit mehreren gespeicherten Thread-Profilen vergleichen, wobei das Thread-Profil dynamisch für den Thread basierend auf einer Laufzeitanalyse im Speicher erzeugt wird, wobei das Assoziations-Modul 245 einen Tag mit einem nicht markierten Thread basierend auf dem Vergleich assoziiert hat.
  • In einigen Ausführungsbeispielen können das eine oder die mehreren Thread-Profile im Speicher 115 abgelegt sein. In anderen Ausführungsbeispielen können das eine oder die mehreren Thread-Profile einem externen Speicher abgelegt sein, wie z. B. dem entfernten Speicher 140 des entfernten Computergerätes 130. Das Profil-Modul 240 kann die Netzwerkschnittstelle 125 steuern, um das entfernte Computergerät 130 nach Thread-Profilen abzufragen, die zum nicht markierten Thread passen. Das entfernte Computergerät 130 kann ein oder mehrere Tags auf Thread-Niveau in Reaktion auf die Abfrage zurückgeben.
  • In bestimmten Ausführungsbeispielen kann das Profil-Modul 240 ein Profil für den nicht markierten Thread aufbauen. In einem Ausführungsbeispiel basiert das Profil auf Eigenschaften des nicht markierten Threads, darin eingeschlossen, jedoch nicht beschränkt auf, Länge, Anrufe, Kommentare und dergleichen. In einigen Ausführungsbeispielen kann das Profil-Modul 240 die Verwendung des Prozessors 110 überwachen, während der/die nicht markierte(n) Thread(s) laufen, um Eigenschaften zu identifizieren, wie z. B. Wartezeiten (z. B. wie lange der Thread auf einen anderen Thread wartet, um eine Aufgabe abzuschließen), Wartezählungen (z. B. wie oft der Thread auf einen anderen Thread wartet, um eine Aufgabe abzuschließen), Eingabe-/Ausgabe-(I/O)Operationen, Menge der verwendeten CPU-Zeit, eine Menge von Zeit zum Abschluss, (darin eingeschlossen sowohl die Ausführungszeit als auch die Wartezeit), eine Menge von verwendetem Cache-Speicher, eine Anzahl von Cache-Verfehlungen (und/oder Treffer) und dergleichen. Basierend auf gesammelten Daten, die die Thread-Eigenschaften anzeigen, bildet das Profil-Modul 240 ein Profil für den Thread.
  • In Reaktion auf die Erzeugung eines Profils für den nicht markierten Thread, kann das Profil-Modul 240 dann das Profil, das für den nicht markierten Thread aufgebaut wurde, mit dem einen oder mit den mehreren Thread-Profilen vergleichen, die im Speicher abgelegt sind (z. B. dem lokalen Speicher 115 und/oder dem entfernten Speicher 140). In bestimmten Ausführungsbeispielen, können das eine oder die mehreren Thread-Profile mit einem oder mit mehreren Tags auf Thread-Niveau assoziiert sein, wobei das Profil-Modul 240 den einen oder die mehreren Tags auf Thread-Niveau identifiziert, die Thread-Profilen entsprechen, die zum Profil passen, das für den nicht markierten Thread aufgebaut wurde. Das Profil-Modul 240 kann das entsprechende Erzeugungsmodul 245 der Tags auf Thread-Niveau angeben, wobei das Assoziations-Modul 245 das eine oder die mehreren Tags auf Thread-Niveau, die passenden Thread-Profilen entsprechen, mit dem nicht markierten Thread assoziiert.
  • Das Assoziations-Modul 245 ist in einem Ausführungsbeispiel konfiguriert, um ein oder mehrere Tags mit einem nicht markierten Thread zu assoziieren. In bestimmten Ausführungsbeispielen, empfängt das Assoziations-Modul 245 einen oder mehrere passende Tags vom Profil-Modul 240, wobei das Assoziations-Modul 245 die passenden Tags mit dem nicht markierten Thread assoziiert. Die passenden Tags können auf einem Vergleich des nicht markierten Threads mit einem oder mit mehreren Thread-Profilen basieren. In einigen Ausführungsbeispielen kann das Assoziations-Modul 245 eine Datei erzeugen, die den nicht markierten Thread mit dem einem oder den mehreren Tags assoziiert. In anderen Ausführungsbeispielen kann das Assoziations-Modul 245 Metadaten ausgeben, die mit dem nicht markierten Thread assoziiert sind, um den nicht markierten Thread mit dem einem oder den mehreren Tags in den Metadaten zu assoziieren.
  • Das Anforderungs-Modul 215 ist in einem Ausführungsbeispiel konfiguriert, um eine Rechenanforderung des Threads basierend auf dem einen oder den mehreren Tags zu bestimmen. Zum Beispiel kann das Anforderungs-Modul 215 die Rechenanforderung basierend auf mindestens einem Tag auf Thread-Niveau bestimmen, das vom Tag-Modul 210 identifiziert wurde. Die Rechenanforderungen spiegeln, in einem Ausführungsbeispiel, ein Dienstqualitäts (QoS)-Niveau des Threads wieder. Zum Beispiel kann das Anforderungs-Modul 215 eine Rechenanforderung des Threads basierend auf einem Tag auf QoS-Niveau bestimmen.
  • In einigen Ausführungsbeispielen kann das Anforderungs-Modul 215 eine bestimmte Art von Rechenanforderung basierend auf den Tags bestimmen. In einigen Ausführungsbeispielen umfassen die Rechenanforderungen, die vom Anforderungs-Modul 215 identifiziert wurden, eine Rechenintensität des Threads, eine Zeitempfindlichkeit des Threads und eine Cache-/Speicher-Anforderung des Threads, sind jedoch nicht darauf beschränkt. In bestimmten Ausführungsbeispielen kann das Anforderungs-Modul 215 ein oder mehrere Unter-Module umfassen, wie z. B. das Intensitäts-Modul 250, das Zeit-Modul 255 und/oder das Cache-Modul 260, um die Rechenanforderungen des Threads zu identifizieren.
  • Das Intensitäts-Modul 250 ist in einem Ausführungsbeispiel konfiguriert, um eine Rechenintensität des Threads basierend auf Tags auf Thread-Niveau zu bestimmen. Wie hierin verwendet bezieht sich die Rechenintensität eines Threads auf eine Menge von Verarbeitungsleistung, die erforderlich ist, um den Thread auszuführen. In einigen Ausführungsbeispielen kann die Rechenintensität in CPU-Zyklen gemessen werden. In anderen Ausführungsbeispielen kann die Rechenintensität durch eine Anzahl und/oder eine Art von Berechnungen geschätzt werden, die vom Thread erforderlich sind. In einigen Ausführungsbeispielen kann die Rechenintensität eine Geschwindigkeitsanforderung des Threads angeben. Somit kann in bestimmten Ausführungsbeispielen das Intensitäts-Modul 250 eine Geschwindigkeitsanforderung des Threads basierend auf einem oder auf mehreren Tags auf Thread-Niveaus bestimmen. Die Geschwindigkeitsanforderung und/oder die Rechenintensität können in Bezug zu anderen Threads des Computerprozesses und/oder in Bezug zu andern Computerprozessen stehen, die auf dem elektronischen Gerät 105 ablaufen.
  • Zum Beispiel kann der Haupt-Arbeits-Thread von einem sekundären Arbeits-Thread abhängen, um eine bestimmte Aufgabe abzuschließen, bevor der Haupt-Arbeiter mit seiner Ausführung fortfahren kann. In einigen Ausführungsbeispielen kann die Thread-Abhängigkeit durch ein oder durch mehrere Tags angegeben werden, wie z. B. ein Tag, dass anzeigt, dass der Haupt-Arbeits-Thread auf den sekundären Arbeits-Thread warten muss. Das Intensitäts-Modul 250 kann so bestimmen, dass die sekundäre Arbeits-Thread eine hohe Geschwindigkeits-Anforderung aufweist, basierend auf einem oder mehreren Tags. Das Zuordnungs-Modul 220 kann den sekundären Arbeits-Thread einem schnellen Prozessorkern basierend auf der hohen Geschwindigkeitsanforderung zuordnen, um eine Meng Zeit zu minimieren, die der Haupt-Arbeits-Thread auf den sekundären Arbeits-Thread wartet.
  • In einem weiteren Ausführungsbeispiel kann das Intensitäts-Modul 250 einen Prozentsatz der Ressourcen des Computerprozesses identifizieren (z. B. CPU-Zyklen) der von einem bestimmten Thread erfordert wird. Zum Beispiel weisen viele Computerprozesse einen Haupt-Arbeits-Thread auf, der einen größeren Abschnitt der Ressourcen erfordert, und einen oder mehrere Hilfs-/sekundäre Arbeits-Threads, die einen kleineren Abschnitt der Ressourcen erfordern. In einigen Ausführungsbeispielen kann die Rechenintensität einen Abschnitt von Ressourcen anzeigen, die von einem Thread erfordert werden. Somit kann in bestimmen Ausführungsbeispielen des Zuordnungs-Modul 220 einen Thread, der eine größere Menge von Ressourcen erfordert, einem Prozessorkern zuordnen, der größere Ressourcen aufweist (z. B. größere Prozessorgeschwindigkeit und/oder größeres Cache L2/L3) und einen Thread, der eine geringere Menge von Ressourcen benötigt, einem Prozessorkern zuordnen, der weniger Ressourcen aufweist (z. B. einem Kern mit geringerer Geschwindigkeit/weniger Cache oder einen Kern, in dem mehrere Threads den Kern teilen).
  • Das Zeit-Modul 255 ist in einem Ausführungsbeispiel konfiguriert, um ein Zeitempfindlichkeits-Niveaus des Threads basierend auf den Tags zu bestimmen. In einigen Ausführungsbeispielen kann sich das Zeitempfindlichkeits-Niveau auf die Toleranz eines Threads gegenüber Verzögerungen beziehen. Das Zeitempfindlichkeits-Niveau kann auf einem QoS-Wert auf Thread-Niveau basieren, der mit dem Thread assoziiert ist. Zum Beispiel kann ein Thread mit einem geringeren QoS-Niveau toleranter gegenüber Verzögerungen als ein anderer Thread mit einem höheren QoS-Niveau sein. In einigen Ausführungsbeispielen kann die Zeitempfindlichkeit eine Intra-Prozess-Zeitempfindlichkeit sein (z. B. eine Zeitempfindlichkeit mit Bezug auf andere Threads im Computerprozess). In anderen Ausführungsbeispielen kann das Zeitempfindlichkeits-Niveau eine Extra-Prozess- Zeitempfindlichkeit sein (z. B. eine Zeitempfindlichkeit mit Bezug auf andere Anwendungen des Computerprozesses oder Aufgaben, die auf dem elektronischen Gerät 105 laufen). In bestimmten Ausführungsbeispielen kann das Zeitmodul 255 dem Zuordnungs-Modul 220 das Zeitempfindlichkeits-Niveau angeben, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf der Zeitanforderung zuweisen kann.
  • In einem weiteren Ausführungsbeispiel kann das Zeit-Modul 255 weiter konfiguriert sein, um eine Zeitanforderung des Computerprozesses basierend auf einem oder auf mehreren Tags auf Prozess-Niveau zu bestimmen. Die Zeitanforderung kann, in einem Ausführungsbeispiel, eine Menge Zeit sein, in der erwartet wird, dass der Computerprozess und/oder der Thread abgeschlossen werden. In einigen Ausführungsbeispielen kann die Zeitempfindlichkeit eine Intra-Prozess-Zeitempfindlichkeit sein (z. B. eine Zeitempfindlichkeit mit Bezug auf andere Threads im Computerprozess). In anderen Ausführungsbeispielen kann das Zeitempfindlichkeits-Niveau eine Extra-Prozess-Zeitempfindlichkeit sein, (z. B. eine Zeitempfindlichkeit mit Bezug auf andere Anwendungen des Computerprozesses oder Aufgaben, die auf dem elektronischen Gerät 105 laufen). In bestimmten Ausführungsbeispielen kann das Zeit-Modul 255 die Zeitanforderung dem Zuordnungs-Modul 220 angeben, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf der Zeitanforderung zuordnen kann. In weiteren Ausführungsbeispielen kann das Zuordnungs-Modul 220 bestimmen, ob der Thread auf ein entferntes Computergerät 130 basierend auf der Zeitanforderung abgeladen werden soll.
  • Das Cache-Modul 260 ist in einem Ausführungsbeispiel konfiguriert, um eine Speichercache-Anforderung des Threads zu identifizieren. Die Speichercache-Anforderung kann eine bevorzugte Menge von Speichercache (auch als ein CPU-Cache bezeichnet) für einen Thread angeben. Jeder Prozessorkern in dem elektronischen Gerät 105 umfasst ein Speichercache (auch als ein CPU-Cache bezeichnet). Wenn der Prozessorkern einen Datenwert erfordert, sucht er nach einer Kopie des Datenwerts im Speichercache, bevor er im Speicher 110 sucht (z. B. im Hauptspeicher (RAM) oder im nichtflüchtigen Speicher). In einigen Ausführungsbeispielen kann ein Prozessorkern zahlreiche Niveaus der Speichercaches umfassen, wie z. B. L1, L2, L3 usw., die hierarchisch organisiert sind, so dass der Prozessorkern in jedem Niveau der Hierarchie nach einem erforderlichen Datenwert sucht, bevor er im Hauptspeicher (z. B. Speicher 110) sucht.
  • In einigen Ausführungsbeispielen kann ein Tag auf Thread-Niveau anzeigen, dass ein Thread Cache-intensiv ist, wobei das Cache-Modul 260 eine hohe Speicher-Cache-Anforderung identifizieren kann, basierend auf dem Tag, und das Zuordnungs-Modul 220 den Thread einem Prozessorkern mit einem höheren Speichercache-Niveau zuordnen kann. Alternativ kann das Zuordnungs-Modul 220 den Thread einem Prozessorkern zuordnen, dessen Hyper-Threading deaktiviert ist. Beim Hyper-Threading umfasst ein physischer Prozessor zwei logische Prozessoren, die jeweils unabhängig voneinander arbeiten können, und die das Speichercache des Prozessorkerns teilen. Somit steht, wenn das Hyper-Threading deaktiviert ist, dem Cache-intensiven Thread eine größere Menge von Speichercache zur Verfügung.
  • In einigen Ausführungsbeispielen kann das Anforderungs-Modul 215 dem Zuordnungs-Modul 220 die Rechenanforderung(en) angeben, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf der Rechenanforderung zuweist. Zum Beispiel kann das Anforderungs-Modul 215 eine Geschwindigkeitsanforderung, eine Zeitanforderung, ein Zeitempfindlichkeits-Niveau und/oder eine Speichercache-Anforderung dem Zuweisungs-Modul 220 angeben, wobei das Zuordnungs-Modul den Thread einem Prozessorkern basierend auf der Rechenanforderung zuordnet.
  • Das Zuordnungs-Modul 220 ist in einem Ausführungsbeispiel konfiguriert, um den Thread einem der Prozessorkerne basierend auf der Rechenanforderung zuzuordnen. Zum Beispiel kann das Zuordnungs-Modul 220 eine Angabe von einer oder von mehreren Rechenanforderungen eines bestimmten Threads des Computerprozesses empfangen, wobei das Zuordnungs-Modul 220 den bestimmten Thread einem Prozessorkern basierend auf den empfangenen Rechenanforderungen zuordnet. In einigen Ausführungsbeispielen kann das Zuordnungs-Modul 220 einen Haupt-Arbeits-Thread einem der Prozessorkerne zuordnen, der für den Haupt-Arbeits-Thread reserviert ist (z. B. durch Isolierung des Haupt-Arbeits-Threads auf seinen eigenen Prozessorkern)
  • In bestimmten Ausführungsbeispielen kann das Zuordnungs-Modul 220 den Thread weiter basierend auf dem Leistungszustand eines Computersystems (z. B. des elektronischen Gerätes 105) zuordnen, das den Thread ausführt. Zum Beispiel kann das Zuordnungs-Modul 220 den Thread einem Prozessorkern mit einer geringeren Prozessorgeschwindigkeit zuordnen, in Reaktion darauf, dass der Leistungszustand eine Batterieleistung ist, und den Thread einem Prozessorkern mit einer höheren Prozessorgeschwindigkeit zuordnen, in Reaktion darauf, dass der Leistungszustand eine externe Leistung ist.
  • In einigen Ausführungsbeispielen weist das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf der Geschwindigkeitsanforderung des Threads zu. Siehe z. B. ein Computersystem mit einem ersten Satz von Prozessorkernen, die bei einer ersten Geschwindigkeit arbeiten, und einen zweiten Satz von Prozessorkernen, die bei einer zweiten, geringeren Geschwindigkeit arbeiten. Wenn ein bestimmter Thread eine Geschwindigkeitsanforderung, welche größer als eine Schwelle ist, aufweist (alternativ, wenn der Thread eine Ziel-Abschlusszeit unter einer Schwelle aufweist), dann kann das Zuordnungs-Modul 220 den Thread einem Prozessorkern des ersten (schnelleren) Satzes von Prozessorkernen zuordnen, ansonsten kann das Zuordnungs-Modul 220 den Thread einem Prozessorkern des zweiten (langsameren) Satzes von Prozessorkernen zuordnen (z. B. in Reaktion darauf, dass die Thread-Abschlusszeit geringer als die Geschwindigkeitsanforderung ist).
  • In bestimmten Ausführungsbeispielen kann das Zuordnungs-Modul 220 einen Thread einem Prozessorkern basierend auf einer Zeitanforderung zuordnen. Zum Beispiel kann das Zeit-Modul 255 die Zeitanforderung dem Zuordnungs-Modul 220 angeben, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf der Zeitanforderung zuordnen kann. In weiteren Ausführungsbeispielen kann das Zuordnungs-Modul 220 basierend auf der Zeitanforderung bestimmen, ob der Thread auf ein entferntes Computergerät 130 offgeloaded werden soll. Zum Beispiel kann, wenn der Thread nicht zeitempfindlich ist (z. B. mit einer großen Zeitanforderung), das Zuordnungs-Modul 220 den Thread auf ein entferntes Computergerät 130 offloaden, vorausgesetzt, dass die Kosten des Anforderungs-Threads (z. B. die lokalen CPU-Kosten, die lokalen Leistungsverbrauchskosten usw.) geringer als die Kosten der lokalen Verarbeitung des Threads sind.
  • In einigen Ausführungsbeispielen kann das Zuordnungs-Modul 220 die Thread-Abschlusszeit basierend auf einer Prozessorgeschwindigkeit und einer geschätzten Länge des Threads bestimmen. Zum Beispiel kann ein Tag auf Thread-Niveau anzeigen, dass ein Thread ungefähr achtzehntausend (18000) Prozessorzyklen benötigt, um abzuschließen. Das Zuordnungs-Modul 220 kann eine Thread-Abschlusszeit durch Multiplizieren der geschätzten Länge (18000 Prozessorzyklen) durch die Prozessorgeschwindigkeit bestimmen. Das Zuordnungs-Modul 220 kann dann die Thread-Abschlusszeit mit einer Zeitanforderung und/oder Geschwindigkeitsanforderung des Threads vergleichen (wie von einem oder von mehreren Tags auf dem Thread-Niveau angegeben). Das Zuordnungs-Modul kann dann den Thread einem langsamsten Prozessorkern (z. B. mit der geringsten Prozessorgeschwindigkeit) zuordnen, der den Thread abschließen kann (z. B. basierend auf der geschätzten Länge des Threads), während die Zeitanforderung und/oder die Geschwindigkeitsanforderung immer noch eingehalten werden.
  • In einigen Ausführungsbeispielen weist das Zuordnungs-Modul 220 einen Thread einem Prozessorkern basierend auf der Speichercache-Anforderung zu. Zum Beispiel kann x215 eine Speichercache-Anforderung für einen bestimmten Thread identifizieren, während das Zuordnungs-Modul 220 einen Prozessorkern basierend auf einer Speichercache-Anforderung auswählt. In bestimmten Ausführungsbeispielen kann die Speichercache-Anforderung eine vorbestimmte Schwelle überschreiten, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern zuweisen kann, dessen Hyper-Threading deaktiviert ist. Alternativ kann das Zuordnungs-Modul 220 das Hyper-Threading auf einem Prozessorkern deaktivieren, dem der Thread basierend auf der Speichercache-Anforderung zugeordnet wurde.
  • Wie hierin verwendet, bezieht sich Hyper-Threading auf die Teilung eines Prozessorkerns in eine Vielzahl von logischen Prozessoren (im Allgemeinen in zwei logische Prozessoren), wobei jeder logische Prozessor die Arbeitslast des Prozessorkerns teilt. Wenn das Hyper-Threading aktiv ist, wird das Speichercache des Prozessorkerns zwischen den logischen Prozessoren geteilt. Durch die Deaktivierung des Hyper-Threading ermöglicht das Zuordnungs-Modul 220, dass der Thread das gesamte Speichercache auf dem Prozessorkern verwendet. Das Zuordnungs-Modul 220 kann einen Thread einem Verarbeitungskern mit einem deaktivierten Hyper-Threading in Reaktion darauf zuweisen, dass der Thread einen Tag aufweist, der angibt, dass der Thread Speichercache-intensiv ist.
  • In einigen Ausführungsbeispielen kann das Zuordnungs-Modul 220 dem Thread einem Prozessorkern basierend auf einem oder auf mehreren Systemeigenschaften eines Computersystems, das den Thread ausführt, zuordnen. In einem weiteren Ausführungsbeispiel kann das Zuordnungs-Modul 220 dem Thread Computer-Ressourcen in Reaktion auf seine Zuordnung zu einem Prozessorkern zuweisen. In einem weiteren Ausführungsbeispiel kann das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf den Kosten der lokalen Ausführung des Threads zuordnen. In bestimmten Ausführungsbeispielen kann das Zuordnungs-Modul 220 ein oder mehrere Unter-Module umfassen, wie z. B. die Eigenschafts-Module 265, das Zuweisungs-Modul 270 und/oder das Kosten-Modul 275 zur Durchführung der oben angegebenen Funktionen.
  • Das Eigenschafts-Modul 265 ist in einem Ausführungsbeispiel konfiguriert, um die Systemeigenschaften eines Computersystems (z. B. des elektronischen Gerätes 105) zu identifizieren, das den Computerprozess ausführt. In einem weiteren Ausführungsbeispiel kann das Eigenschafts-Modul 265 weiter konfiguriert sein, um einen Leistungszustand des Computersystems zu identifizieren, das den Computerprozess ausführt. Wie hier verwendet bezieht sich der Leistungszustand des Computersystems darauf, ob das Computersystem Leistung von einer internen Quelle bezieht, wie z. B. einer Batterie, oder Leistung von einer externen Leistungsversorgung bezieht, wie z. B. einem AC-Adapter. Der Leistungszustand kann sich weiter auf ein Ladeniveau der Batterie und/oder auf einen Leistungsmodus des elektronischen Gerätes 105 beziehen, wie z. B. einen Leistungseinsparungsmodus, der die Batterielebensdauer durch die Verringerung des Verbrauchs des Prozessors, der Anzeige und/oder der Funk-Transceiver des elektronischen Gerätes 105 verlängern.
  • Die Systemeigenschaften des Computersystems können eine maximale Computergeschwindigkeit, eine minimale Computergeschwindigkeit, einen Leistungsverbrauch bei jeder Computergeschwindigkeit, eine Anzahl von anwesenden Prozessorkernen, eine Anzahl von anwesenden CPUs, eine Menge von Cachespeicher in jeder CPU/jedem Prozessorkern und dergleichen, aufweisen.
  • In einigen Ausführungsbeispielen können das Eigenschafts-Modul 265 und/oder das Anforderungs-Modul 215 dem Zuweisungs-Modul 220 die Systemeigenschaften anzeigen, wobei das Zuweisungs-Modul 220 den Thread einem Prozessorkern basierend auf den Rechenanforderungen zuweist. Zum Beispiel kann das Eigenschafts-Modul 265 den Leistungszustand dem Zuweisungs-Modul 220 anzeigen, wobei das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend weiter auf dem Leistungszustand zuweist. Insbesondere kann das Zuweisungs-Modul 220 den Thread einem Prozessorkern mit einer geringeren Prozessorgeschwindigkeit zuweisen, in Reaktion darauf, dass der Leistungszustand eine Batterieleistung ist, und kann den Thread zu einem Prozessorkern mit einer höheren Prozessorgeschwindigkeit in Reaktion darauf zuweisen, dass der Leistungszustand eine externe Leistung ist (z. B. eingesteckt in einen AC-Adapter oder eine nicht tragbare Leistungsquelle).
  • Das Zuweisungs-Modul 270 ist in einem Ausführungsbeispiel konfiguriert, um einem Thread Hardware-Ressourcen basierend auf einer Intra-Prozess-Priorität des Threads zuzuweisen. Die Hardware-Ressourcen können von einem Satz von Hardware-Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist, z. B. durch einen CPU-Scheduler. In einigen Ausführungsbeispielen funktioniert das Zuweisungs-Modul 270 als ein Unter-Scheduler, der den Satz von Hardware-Ressourcen auf die Threads des Computerprozesses verteilt. Zum Beispiel kann das Zuweisungs-Modul 275 eine Untergruppe des Satzes von Hardware-Ressourcen einem bestimmten Thread basierend seinem Intra-Prozess-Priorität zuweisen. In einem weiteren Beispiel kann das Zuweisungs-Modul 275 eine Untergruppe des Satzes von Hardware-Ressourcen einem bestimmten Thread basierend auf seinen Rechenanforderungen, seinem QoS-Niveau zuweisen.
  • Das Kosten-Modul 275 ist in einem Ausführungsbeispiel konfiguriert, um die Kosten der Ausführung des Threads und/oder des Computerprozesses zu bestimmen. In bestimmten Ausführungsbeispielen kann das Kosten-Modul 275 die Kosten der CPU-Ressourcen (z. B. Zyklen), Speicher-Ressourcen, Leistungsverbrauch, Zeit bis zum Abschluss und dergleichen messen. In einem weiteren Ausführungsbeispiel kann das Kosten-Modul 275 weiter konfiguriert sein, um die Kosten der Übertragung des Computerprozesses (oder des Threads) an ein entferntes Computergerät 130 zu bestimmen. In bestimmten Ausführungsbeispielen kann das Intensitäts-Modul 275 die Kosten der CPU-Ressourcen, Speicher-Ressourcen, des Leistungsverbrauchs, der Netzwerk-Ressourcen, der Zeit bis zum Abschluss und dergleichen messen.
  • In einigen Ausführungsbeispielen kann das Kosten-Modul 275 die berechneten(n) Koste(n) dem Zuweisungs-Modul 220 angeben, wobei das Zuweisungs-Modul 220 den Thread einem Prozessorkern basierend auf den berechneten Kosten zuweisen kann. In einem weiteren Ausführungsbeispiel kann das Zuweisungs-Modul 220 bestimmen, ob der Computerprozesses oder der Thread auf ein entferntes Computergerät 130 basierend auf den Kosten, berechnet vom Kosten-Modul 275, offgeloaded werden soll.
  • 3A ein schematisches Blockdiagramm ist, das ein Ausführungsbeispiel einer Sammlung 300 von Tags zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht. Die Sammlung 300 von Tags kann mit einem Thread eines Computerprozesses assoziiert sein. In einigen Ausführungsbeispielen kann die Sammlung 300 von Tags ein oder mehrere Tags auf Thread-Niveau umfassen, die mit dem Thread assoziiert sind. In weiteren Ausführungsbeispielen kann die Sammlung 300 von Tags ein oder mehreren Tags auf der Ebene des Prozesses umfassen, die mit dem Computerprozess assoziiert sind (und somit auch mit dem Thread assoziiert sind). In einigen Ausführungsbeispielen kann die Sammlung 300 von Tags durch das Tag-Modul 210 identifiziert sein. Zusätzlich kann das Anforderungs-Modul 215 ein oder mehrere Computer-Anforderungen des Threads bestimmen, basierend auf der Sammlung von 300 Tags.
  • Wie veranschaulicht umfasst die Sammlung 300 von Tags einen CPU-intensiven Tag 305, einen Cache-intensiven Tag 310, einen Zeit-empfindlichen Tag 315, einen Haupt-Arbeits-Thread-Tag 320 und einen Prioritäts-Tag 325. In einigen Ausführungsbeispielen kann die Sammlung 300 von Tags jedes der veranschaulichten Tags 305325 umfassen. In weiteren Ausführungsbeispielen kann die Sammlung 300 von Tags eines oder mehrere der veranschaulichten Tags 305325 umfassen. In einem Ausführungsbeispiel kann ein Programmierer oder anderer Autor des Threads die Tags 305325 bereitstellen. In einem weiteren Ausführungsbeispiel kann der Tag 305325 automatisch mit dem Thread assoziiert sein, z. B. durch das Tag-Modul 210 und/oder das Assoziations-Modul 245.
  • Der CPU-intensive Tag 305 zeigt, ein einem Ausführungsbeispiel, eine Computer-Intensität des Threads an. In einigen Ausführungsbeispielen kann der CPU-intensive Tag 305 einen binären Wert aufweisen, wodurch angezeigt wird, dass der Thread entweder Computer-intensiv oder nicht Computer-intensiv ist. In anderen Ausführungsbeispielen kann der CPU-intensive Tag 305 einen einer Reihe von Werten aufweisen, wobei jeder Wert in der Reihe von Werten einen Grad der Computer-Intensität des Threads anzeigt. In einem Ausführungsbeispiel kann das Profil-Modul 240 einen Computer-Intensitäts-Wert (z. B. einen Grad) des Threads identifizieren, und kann das Assoziations-Modul 245 einen CPU-intensiven Tag 305, welcher den entsprechenden Computer-Intensitäts-Wert aufweist, mit dem Thread assoziieren.
  • Der Cache-intensive Tag 310 zeigt, in einem Ausführungsbeispiel, ob der Thread Speichercache-intensiv ist. Zum Beispiel kann ein Thread Speichercache-intensiv sein, basierend auf einer Anzahl von Cache-Anfragen. In einem weiteren Beispiel kann ein Thread Speichercache-intensiv sein, basierend auf einer Rate von Cache-Anfragen. In einigen Ausführungsbeispielen kann der Cache-intensive Tag 310 einen binären Wert aufweisen, wodurch angezeigt wird, dass der Thread entweder Computer-intensiv oder nicht Computer-intensiv ist. In weiteren Ausführungsbeispielen kann der CPU-intensive Tag 310 einen einer Reihe von Werten aufweisen, wobei jeder Wert in der Reihe von Werten einen Grad der Speichercache-Intensität des Threads aufweist. In einem Ausführungsbeispiel kann das Profil-Modul 240 einen Speichercache-Intensitätswert (z. B. einen Grad) des Threads identifizieren, und kann das Assoziations-Modul 245 einen Cache-intensiven Tag 310, welcher den entsprechenden Speichercache-Intensitäts-Wert aufweist, mit dem Thread assoziieren.
  • Der Zeit-empfindliche Tag 315 zeigt in einem Ausführungsbeispiel eine Computer-Intensität des Threads an. Zum Beispiel kann ein Thread zeitempfindlich sein, wenn erwartet wird, dass dieser innerhalb eines bestimmten Zeitraums abschließt. In einem weiteren Beispiel kann ein Thread zeitempfindlich sein, wenn dieser Aufgaben in Echtzeit oder fast in Echtzeit durchführt. In einigen Ausführungsbeispielen kann der zeitintensive Tag 315 einen binären Wert aufweisen, der anzeigt, dass der Thread entweder zeitempfindlich oder nicht zeitempfindlich ist. In weiteren Ausführungsbeispielen kann der zeitempfindliche Tag 315 einen einer Reihe von Werten aufweisen, wobei jeder Wert in der Reihe von Werten einen Grad der Zeitempfindlichkeit des Threads anzeigt. In einem Ausführungsbeispiel kann das Profil-Modul 240 einen Computer-Intensitäts-Wert (z. B. einen Grad) des Threads identifizieren, und kann das Assoziations-Modul 245 einen zeitempfindlichen Tag 315, welcher den entsprechenden zeitempfindlichen Wert aufweist, mit dem Thread assoziieren.
  • Der Haupt-Arbeits-Thread-Tag 320 in einem Ausführungsbeispiel zeigt an, ob der Thread Speichercache-intensiv ist. In einigen Ausführungsbeispielen kann der Arbeits-Thread-Tag 320 einen binären Wert aufweisen, wodurch angezeigt wird, dass der Thread entweder Computer-intensiv oder nicht Computer-intensiv ist. In einem Ausführungsbeispiel kann das Thread-Modul 205 identifizieren, ob der Thread eine Haupt-Arbeits-Thread ist, und kann das Assoziations-Modul 245 kann einen Haupt-Worker-Arbeits-Tag 320, welcher den entsprechenden binären Wert aufweist, mit dem Thread assoziieren.
  • Der Prioritäts-Tag 325 zeigt in einem Ausführungsbeispiel eine Intra-Prozess-Priorität des Threads an. Zum Beispiel kann die Intra-Prozess-Priorität des Threads dem Prozess eine relative Bedeutung des Threads anzeigen (z. B. die Haupt-Arbeits-Thread oder der sekundäre Thread). In einem weiteren Beispiel kann die Intra-Prozess-Priorität des Threads auf den Thread-Abhängigkeiten innerhalb des Computerprozesses basieren. In einigen Ausführungsbeispielen kann der Prioritäts-Tag 325 einen binären Wert aufweisen, wodurch angezeigt wird, ob der Thread wichtig ist oder nicht und gegenüber nicht wichtigen Threads innerhalb des gleichen Computer-Prozesses Priorität erhalten sollte. In anderen Ausführungsbeispielen kann der Prioritäts-Tag 325 einen einer Reihe von Werten aufweisen, wobei jeder Wert in der Reihe von Werten ein Prioritäts-Niveau des Threads aufweist. In einem Ausführungsbeispiel kann das Profil-Modul 240 ein Prioritäts-Niveau des Threads aufweisen, und kann das Assoziations-Modul 245 einen Prioritäts-Tag 325, welcher das entsprechende Prioritäts-Niveau aufweist, mit dem Thread assoziieren.
  • Das veranschaulichte Ausführungsbeispiel zeigt eine spezifische Anzahl von Tags, jedoch ist die Sammlung 300 von Tags nicht auf die beschriebene Anzahl von Tags beschränkt. In einigen Ausführungsbeispielen umfasst die Sammlung 300 von Tags einen einzelnen Tag. In anderen Ausführungsbeispielen kann die Sammlung 300 von Tags ein Dutzend Tags oder mehr umfassen. In noch einem weiteren Ausführungsbeispiel kann die Sammlung 300 von Tags leer sein, wobei das Tag-Modul 210 und/oder das Assoziations-Modul 245 ein oder mehrere Tags mit dem Thread assoziieren können (z. B. basierend auf einem Vergleich mit einem Thread-Profil und/oder basierend auf einer Laufzeitanalyse des Prozesses), wodurch die Sammlung von 300 Tags bestückt wird.
  • 3B ist ein schematisches Blockdiagramm, das ein Ausführungsbeispiel eines Computersystems 350 zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht. In einem Ausführungsbeispiel weist das Computersystem 350 eine elektronische Vorrichtung 105 auf. Das Computersystem 350 umfasst einen Computerprozess 360, der ausgeführt werden soll, eine Hochgeschwindigkeits-CPU 370, und eine Niedergeschwindigkeits-CPU 380. In einem Ausführungsbeispiel umfasst die Hochgeschwindigkeits-CPU zwei Prozessorkerne 372374. In einem Ausführungsbeispiel umfasst die Niedergeschwindigkeits-CPU 380 vier Prozessorkerne 382388.
  • Der Computerprozess 360 umfasst eine Haupt-Arbeits-Thread 362 und drei sekundäre Threads 364368. In einem Ausführungsbeispiel ist der Haupt-Arbeits-Thread 362 ein Benutzerschnittstellen-Thread sein, wobei ein Benutzer mit dem Computer-Prozess 360 über der Haupt-Arbeits-Thread 362 interagiert. In einem weiteren Ausführungsbeispiel ruft der Haupt-Arbeits-Thread 362 den sekundären Arbeits-Thread 364368 auf, um verschiedene Aufgaben auszuführen. In einem weiteren Ausführungsbeispiel kann ein sekundärer Arbeits-Thread, wie z. B. die sekundären Threads 364, von einem weiteren sekundären Arbeits-Thread abhängen, wie z. B. des sekundären Threads 366 und/oder des sekundären Arbeits-Threads 368, um die Aufgabe abzuschließen. Zum Beispiel kann der sekundäre Arbeits-Thread eine Aufgabe durchführen, wobei der sekundäre Arbeits-Thread 364 vom sekundären Arbeits-Thread 366 abhängt, um Daten wiederzugewinnen, die erforderlich sind, um die Aufgabe abzuschließen (z. B. vom lokalen Speicher, vom entfernten Speicher, von den Sensoren oder dergleichen).
  • In einem Ausführungsbeispiel identifiziert das Computersystem 350 den Haupt-Arbeits-Thread 362 und weist den Haupt-Arbeits-Thread 362 der Hochgeschwindigkeits-CPU 370 zu. Das Computer-System 350 kann den Haupt-Arbeits-Thread 362 der Hochgeschwindigkeits-CPU 370 aufgrund der Tatsache, dass der Haupt-Arbeits-Thread 362 Computer-intensiv ist, eine hohe Priorität aufweist und/oder zeitempfindlich ist, zuweisen. Zum Beispiel können ein oder mehrere Tags, die mit dem Haupt-Arbeits-Thread 362 assoziiert sind, eine Computer-Anforderung angeben (z. B. eine Computer-Intensität und/oder eine Zeit-Empfindlichkeit) und/oder eine Priorität des Haupt-Arbeits-Threads 362 angeben. Basierend auf den Computeranforderungen und/oder der Priorität des Haupt-Arbeits-Threads 362 weist das Computersystem 350 den Haupt-Arbeits-Thread 362 dem Prozessorkern 372 der Hochgeschwindigkeits-CPU 370 zu. In einem weiteren Ausführungsbeispiel kann das Computersystem 350 den Haupt-Arbeits-Thread 362 dem dedizierten Prozessorkern 372 zuordnen. Wie veranschaulicht, sind keine weiteren Threads des Computerprozesses 360 dem Prozessorkern 372 zugeordnet.
  • In einem Ausführungsbeispiel identifiziert das Computersystem 350 einen sekundären Haupt-Arbeits-Thread 364 und weist den sekundären Arbeits-Thread 364 der Niedergeschwindigkeits-CPU 380 zu. Das Computersystem 350 kann den sekundären Arbeits-Thread 364 dem Prozessorkern 382 der Niedergeschwindigkeits-CPU 380 aufgrund der Tatsache, dass der sekundäre Thread 364 nicht Computer-intensiv ist, keine hohe Priorität aufweist und/oder nicht zeitempfindlich ist, zuordnen. Zum Beispiel können ein oder mehrere Tags, die mit dem sekundären Arbeits-Thread 364 assoziiert sind, eine Computer-Anforderung angeben (z. B. eine Computer-Intensität und/oder eine Zeit-Empfindlichkeit) und/oder eine Priorität des sekundären Arbeits-Threads 364 angeben. Basierend auf den Computeranordnungen und/oder auf der Priorität des sekundären Arbeits-Threads 364, weist das Computersystem 350 den sekundären Arbeits-Thread 364 dem Prozessorkern 382 der Niedergeschwindigkeits-CPU 380 zu.
  • Während das veranschaulichte Ausführungsbeispiel keine weiteren Threads des Computerprozesses 360 zeigt, die dem Prozessorkern 382 zugeordnet sind, können in weiteren Ausführungsbeispielen weitere Threads (entweder vom gleichen Computerprozess 360) oder von anderen Computerprozessen, die auf dem Computersystem 350 ablaufen) dem Prozessorkern 382 zugeordnet werden.
  • In einem Ausführungsbeispiel identifiziert das Computersystem 350 einen sekundären Worker-Thread 366 und weist einen sekundären Worker-Thread 366 der Niedergeschwindigkeits-CPU 380 zu. Weiter kann das Computersystem 350 den sekundären Worker-Thread 366 dem Prozessorkern 386 der Niedergeschwindigkeits-CPU 380 zuweisen. Das Computersystem 350 kann den sekundären Arbeits-Thread 366 dem Prozessorkern 386 der Niedergeschwindigkeits-CPU 380 aufgrund der Tatsache zuweisen, dass die sekundäre Arbeits-Threads 366 nicht Computer-intensiv sind, keine hohe Priorität aufweisen und/oder nicht zeitempfindlich sind. Zum Beispiel können ein oder mehrere Tags, die mit dem sekundären Worker-Thread 366 assoziiert sind, eine Computer-Anforderung angeben (z. B. eine Computer-Intensität und/oder eine Zeit-Empfindlichkeit) und/oder eine Priorität des sekundären Arbeits-Threads 366 angeben. Basierend auf den Computeranforderungen und/oder auf der Priorität des sekundären Arbeits-Threads 366, weist das Computersystem 350 den sekundären Arbeits-Thread 366 dem Prozessorkern 386 der Niedergeschwindigkeits-CPU 380 zu.
  • In einem weiteren Ausführungsbeispiel kann das Computersystem 350 auch den sekundären Arbeits-Thread 368 dem Prozessorkern 386 der Niedergeschwindigkeits-CPU 380 zuweisen. Das Computersystem 350 kann den sekundären Arbeits-Thread 368 dem Prozessorkern 386 der Niedergeschwindigkeits-CPU 380 basierend auf einem oder auf mehreren Tags zuweisen, die anzeigen, dass der sekundäre Arbeits-Thread 368 nicht Computer-intensiv ist, keine hohe Priorität aufweist und/oder nicht zeitempfindlich ist. In einem Ausführungsbeispiel weist das Computersystem 350 den sekundären Arbeits-Thread 366368 dem gleichen Prozessorkern (z. B. dem Prozessorkern 386) zu, um Leistung an den Prozessorkernen 384 und 388 durch Herunterfahren (z. B. Übergang zu einem Niederleistungs-Zustand) der ruhenden Prozessorkerne 384 und 388 einzusparen. In einem weiteren Ausführungsbeispiel kann das Computersystem 350 den ruhenden Prozessorkern 374 in einen Niederleistungs-Zustand überführen, wodurch Leistung eingespart wird.
  • 4 ein Flussdiagramm ist, das ein Ausführungsbeispiel eines Verfahrens 400 zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht. In einem Ausführungsbeispiel wird das Verfahren 400 durch das elektronische Gerät 105 ausgeführt. In einem weiteren Ausführungsbeispiel kann das Verfahren durch das granulare QoS-Gerät 200 ausgeführt werden. Alternativ kann das Verfahren 400 durch ein computerlesbares Speichermedium wie z. B. den Speicher 115 durchgeführt werden. Das computerlesbare Speichermedium kann den Code speichern, der auf dem Prozessor 110 ausgeführt wird, um die Funktionen des Verfahrens 400 auszuführen.
  • Das Verfahren 400 beginnt und identifiziert 405 mindestens einen Thread eines Computerprozesses. In einem Ausführungsbeispiel Identifiziert das Thread-Modul 205 mindestens einen Thread eines Computerprozesses. In einigen Ausführungsbeispielen umfasst die Identifizierung 405 von mindestens einem Thread eines Computerprozesses die Identifizierung einer Vielzahl von Threads und die Bestimmung eines Haupt-Arbeits-Threads des Computerprozesses aus der Vielzahl von Threads. In weiteren Ausführungsbeispielen umfasst die Identifizierung 405 von mindestens einem Thread des Computerprozesses Thread-Abhängigkeiten unter einer Vielzahl von Threads, die Teil des Computerprozesses sind.
  • Das Verfahren 400 identifiziert 410 ein oder mehrere Tags, die mit dem Thread assoziiert sind. In einem Ausführungsbeispiel identifiziert 410 das Tag-Modul 210 ein oder mehrere Tags, die mit dem Thread assoziiert sind. In einigen Ausführungsbeispielen umfasst die Identifizierung 410 von einem oder von mehreren Tags, die mit dem Thread assoziiert sind, die Identifizierung von mindestens einem Tag auf Thread-Niveau, der mit dem Thread assoziiert ist. In weiteren Ausführungsbeispielen umfasst die Identifizierung 410 von einem oder von mehreren Tags, die mit dem Thread assoziiert sind, die Identifizierung eines Threads, der nicht mit einem Tag identifiziert ist (z. B. Identifizierung und nicht markierte Tags).
  • Das Verfahren 400 bestimmt 415 eine Rechenanforderung des Threads basierend auf den Tags. In einem Ausführungsbeispiel bestimmt 415 das Anforderungs-Modul 215 eine Rechenanforderung des Threads basierend auf den Tags. In einigen Ausführungsbeispielen umfasst die Bestimmung 415 einer Computeranforderung basierend auf dem einen oder den mehreren Tags die Bestimmung eines Geschwindigkeitsanforderungs- und/oder Zeit-Empfindlichkeits-Niveaus des Threads basierend auf dem einen oder den mehreren Tags. In bestimmten Ausführungsbeispielen umfasst die Bestimmung 415 einer Computeranforderung basierend auf dem einen oder den mehreren Tags die Identifizierung einer Speichercache-Anforderung des Threads.
  • Das Verfahren 400 weist 420 den Thread einem der Prozessorkerne basierend auf der Rechenanforderung zu. Das Verfahren 400 endet. In einem Ausführungsbeispiel weist 420 das Zuordnungs-Modul 220 den Thread einem Prozessorkern basierend auf den Rechenanforderungen zu. In bestimmten Ausführungsbeispielen umfasst die Zuweisung 420 des Threads zu einem Prozessorkern die Zuordnung des Haupt-Arbeits-Threads zu einem Prozessorkern, der für den Haupt-Arbeits-Thread reserviert ist. In einigen Ausführungsbeispielen umfasst die Zuweisung 420 des Threads zu einem Prozessorkern die Zuweisung des Threads weiter basierend auf dem Leistungszustand eines Computersystems, das den Thread ausführt.
  • 5 ein schematisches Flussdiagramm ist, das ein Ausführungsbeispiel eines Verfahrens 500 zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht. In einem Ausführungsbeispiel wird das Verfahren 500 durch das elektronische Gerät 105 ausgeführt. In einem weiteren Ausführungsbeispiel kann das Verfahren 500 durch das granulare QoS-Gerät 200 ausgeführt werden. Alternativ kann das Verfahren 500 durch ein computerlesbares Speichermedium durchgeführt werden, wie z. B. den Speicher 115. Das computerlesbare Speichermedium kann den Code speichern, der auf dem Prozessor 110 ausgeführt wird, um die Funktionen des Verfahrens 500 auszuführen.
  • Das Verfahren 500 beginnt und identifiziert 505 mindestens einen Thread eines Computerprozesses. In einem Ausführungsbeispiel identifiziert 505 das Thread-Modul 205 mindestens einen Thread eines Computerprozesses. In einigen Ausführungsbeispielen umfasst die Identifizierung 505 von mindestens einen Thread eines Computerprozesses die Identifizierung einer Vielzahl von Threads und die Bestimmung eines Haupt-Arbeits-Threads des Computerprozesses aus der Vielzahl von Threads. In weiteren Ausführungsbeispielen umfasst die Identifizierung 505 von mindestens einem Thread des Computerprozesses die Identifizierung der Thread-Abhängigkeiten unter einer Vielzahl von Threads, die Teil des Computerprozesses sind.
  • Das Verfahren 500 identifiziert 510 ein oder mehrere Tags auf Thread-Niveau, die mit dem Thread assoziiert sind. In einem Ausführungsbeispiel identifiziert 510 das Tag-Modul 210 ein oder mehrere Tags auf Thread-Niveau, die mit dem Thread assoziiert sind. Das Verfahren 500 bestimmt 515 eine Rechenanforderung für jeden Thread, basierend auf den Tags auf Thread-Niveau. In einem Ausführungsbeispiel bestimmt 515 das Anforderungs-Modul 215 die Rechenanforderung für jeden Thread, basierend auf den Tags auf Thread-Niveau.
  • Das Verfahren 500 bestimmt 520 eine Intra-Prozess-Priorität für jeden Thread basierend auf den Tags auf Thread-Niveau. In einem Ausführungsbeispiel bestimmt 520 Prioritäts-Modul 230 eine Intra-Prozess-Priorität für jeden Thread basierend auf den Tags auf Thread-Niveau. In einigen Ausführungsbeispielen umfasst die Bestimmung 520 der Intra-Prozess-Priorität die Bestimmung einer Intra-Prozess-Priorität basierend auf Thread-Abhängigkeiten.
  • Das Verfahren 500 bestimmt 525 eine Priorität außerhalb des Prozesses für den Computerprozess basierend auf den Tags auf Prozess-Niveau. In einem Ausführungsbeispiel bestimmt 525 das Prioritäts-Modul 230 eine Priorität außerhalb des Prozesses für den Computerprozess basierend Tags auf dem Prozess-Niveau. In einigen Ausführungsbeispielen umfasst die Bestimmung 525 der Priorität außerhalb des Prozesses den Vergleich der Tags auf Prozess-Niveau eines ersten Computerprozesses mit Tags auf Prozess-Niveau eines zweiten Computerprozesses durch das Prioritäts-Modul 230, um eine Priorität außerhalb des Prozesses zwischen dem ersten Computerprozess und dem zweiten Computerprozess zu bestimmen.
  • Das Verfahren 500 bestimmt 530 einen Leistungszustand, z. B. den Leistungszustand des elektronischen Gerätes 105. In einem Ausführungsbeispiel bestimmt 530 das Eigenschaften-Modul 265 den Leistungszustand. In einigen Ausführungsbeispielen umfasst die Bestimmung 530 des Leistungszustands die Bestimmung, ob das elektronische Gerät 105 mit Batterieleistung arbeitet.
  • Das Verfahren 500 weist 535 den Thread einem Prozessorkern basierend auf den Rechenanforderungen, den Prioritäten innerhalb und außerhalb des Prozesses und dem Leistungszustand zu. Das Verfahren 500 endet. In einem Ausführungsbeispiel weist 535 das Zuweisungs-Modul 220 den Thread einem Prozessorkern basierend auf den Rechenanforderungen, den Prioritäten innerhalb und außerhalb des Prozesses und dem Leistungszustand zu.
  • 6 ein schematisches Flussdiagramm ist, das ein weiteres Ausführungsbeispiel eines Verfahrens 600 zur Bereitstellung von granularem QoS für Computer-Ressourcen in einem Computersystem veranschaulicht. In einem Ausführungsbeispiel wird das Verfahren 600 durch das elektronische Gerät 105 ausgeführt. In einem weiteren Ausführungsbeispiel kann das Verfahren 600 durch das granulare QoS-Gerät 200 durchgeführt werden. Alternativ kann das Verfahren 600 durch ein computerlesbares Speichermedium ausgeführt werden, wie z. B. den Speicher 115. Das computerlesbare Speichermedium kann den Code speichern, der auf dem Prozessor 110 durchgeführt wird, um die Funktionen des Verfahrens 600 auszuführen.
  • Das Verfahren 600 beginnt und identifiziert 605 mindestens einen Thread eines Computerprozesses. In einem Ausführungsbeispiel identifiziert 605 das x205 mindestens einen Thread eines Computerprozesses. Das Verfahren 600 identifiziert 610 ein oder mehrere Tags, die mit dem Thread assoziiert sind. In einem Ausführungsbeispiel identifiziert 610 das x210 ein oder mehrere Tags, die mit dem Thread assoziiert sind. In bestimmten Ausführungsbeispielen beschreiben ein oder mehrere Tags Eigenschaften des Threads, wie z. B. Priorität, Zeit-Empfindlichkeit. Computer-Intensität oder dergleichen.
  • Das Verfahren 600 bestimmt 615 eine Geschwindigkeitsanforderung des Threads, basierend auf den Threads. In einem Ausführungsbeispiel bestimmt 615 das x250 eine Geschwindigkeitsanforderung des Thread, basierend auf den Tags. In einigen Ausführungsbeispielen umfasst die Bestimmung 615 die Geschwindigkeitsanforderung die Identifizierung einer geschätzten Länge und/oder einer geschätzten Abschlusszeit des Threads.
  • Das Verfahren 600 bestimmt 620 ein Zeitempfindlichkeits-Niveau des Threads, basierend auf den Tags. In einem Ausführungsbeispiel bestimmt 620 das x255 ein Zeitempfindlichkeits-Niveau des Threads, basierend auf den Tags. In einigen Ausführungsbeispielen umfasst die Bestimmung 620 der Zeit-Empfindlichkeit die Bestimmung, ob der Thread als tolerant gegenüber Verzögerungen markiert ist.
  • Das Verfahren 600 bestimmt 625 Cacheanforderungen des Threads basierend auf den Tags. In einem Ausführungsbeispiel bestimmt 625 das x260 Cacheanforderungen des Threads basierend auf den Tags. In einigen Ausführungsbeispielen umfasst die Bestimmung 625 die Cacheanforderungen die Bestimmung, ob die Threads als Speichercache-intensiv markiert ist.
  • Das Verfahren 600 weist 630 den Thread einem Prozessorkern zu, basierend auf den Geschwindigkeits-Anforderungen, dem Zeitempfindlichkeits-Niveau und den Cacheanforderungen. Das Verfahren 600 endet. In einem Ausführungsbeispiel weist 630 das x220 den Thread einem Prozessorkern zu, basierend auf den Geschwindigkeits-Anforderungen, dem Zeitempfindlichkeits-Niveau und den Cache-Anforderungen.
  • Ausführungsbeispiele können in anderen spezifischen Formen in die Praxis umgesetzt werden. die beschriebenen Ausführungsbeispiele müssen in allen Aspekten lediglich als veranschaulichend und nicht als einschränkend betrachtet werden. Der Kern der Erfindung ist daher durch die beigefügten Ansprüchen anstatt von der oben angeführten Beschreibung angegeben. Alle Änderungen, die sich innerhalb der Bedeutung und des Bereichs der Äquivalenzen der Ansprüche bewegen sind Schutzumfang eingeschlossen.

Claims (20)

  1. Vorrichtung, umfassend: – einen Prozessor, umfassend eine Vielzahl von Prozessorkernen; und – und einem Speicher, der Code speichert, der durch den Prozessor ausgeführt werden kann, um: – einen Thread zu identifizieren, der Teil eines Computerprozesses ist; – ein oder mehrere Tags auf Thread-Niveau zu identifizieren, die mit dem Thread assoziiert sind. – eine Rechenanforderung des Threads, basierend auf einem oder auf mehreren Tags auf Thread-Niveau, zu bestimmen; und – den Thread einen Prozessorkern basierend auf der Rechenanforderung zuzuordnen.
  2. Vorrichtung nach Anspruch 1, wobei der Speicher weiter einen Code umfasst, der durch den Prozessor ausgeführt werden kann, um: – um eine Intra-Prozess-Priorität des Threads basierend auf einem oder auf mehreren Tags auf Thread-Niveau zu bestimmen. – Dem Thread Hardware-Ressourcen basierend auf der Intra-Prozess-Priorität zuzuweisen, wobei die Hardware-Ressourcen von einem Satz von Hardware-Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist.
  3. Vorrichtung nach Anspruch 2, wobei der Speicher weiter einen Code umfasst, der vom Prozessor ausgeführt werden kann, um Thread-Abhängigkeiten unter einer Vielzahl von Threads zu identifizieren, die Teil des Computerprozesses sind, wobei die Bestimmung der Intra-Prozess-Priorität des Threads die Zuordnung der Intra-Prozess-Priorität basierend auf den Thread-Abhängigkeiten umfasst.
  4. Vorrichtung nach Anspruch 2, wobei der Speicher weiter einen Code umfasst, der durch den Prozessor ausgeführt werden kann, um eine Extra-Prozess-Priorität des Computerprozesses basierend auf einem oder auf mehreren Tags auf Prozessebene zu bestimmen, wobei der Satz von Hardware-Ressourcen, der dem Computerprozess zugeordnet ist, auf der Extra-Prozess-Priorität basiert.
  5. Vorrichtung nach Anspruch 1, wobei die Vielzahl von Prozessorkernen einen ersten Satz von Prozessorkernen, die mit einer ersten Prozessorgeschwindigkeit arbeiten, und einen zweiten Satz von Prozessorkernen umfasst, die mit einer zweiten Prozessorgeschwindigkeit arbeiten, wobei die zweite Prozessorgeschwindigkeit geringer als die erste Prozessorgeschwindigkeit ist, wobei der Speicher weiter einen Code umfasst, der durch den Prozessor ausgeführt werden kann, um: – eine Geschwindigkeitsanforderung des Threads, basierend auf dem einem oder auf den mehreren Tags auf Thread-Niveau zu bestimmen; und – und eine Thread-Abschlusszeit basierend auf der zweiten Prozessorgeschwindigkeit zu bestimmen, – wobei die Zuordnung des Threads zu einen der Prozessorkerne basierend auf der Rechenanforderung die Zuordnung des Threads zu einem Prozessorkern des zweiten Satzes von Prozessorkernen in Reaktion darauf, dass die Thread-Abschlusszeit geringer als die Geschwindigkeitsanforderung ist, umfasst.
  6. Vorrichtung nach Anspruch 1, wobei der Speicher weiter einen Code umfasst, der vom Prozessor ausgeführt werden kann, um den Leistungszustand der Vorrichtung zu identifizieren, wobei die Zuordnung des Threads zu einem der Prozessorkerne weiter auf dem Leistungszustand basiert.
  7. Vorrichtung nach Anspruch 6, wobei die Zuordnung des Threads zu einem der Prozessorkerne basierend auf dem Leistungszustand die Zuordnung des Threads zu einem Prozessorkern mit einer geringeren Prozessorgeschwindigkeit in Reaktion darauf, dass der Leistungszustand eine Batterieleistung ist, und die Zuordnung des Threads zu einem Prozessorkern mit einer höheren Prozessorgeschwindigkeit in Reaktion darauf, dass der Leistungszustand eine externe Leistung ist, umfasst.
  8. Vorrichtung nach Anspruch 1, wobei die Identifizierung von mindestens einem Thread, der Teil eines Computerprozesses ist, die Identifizierung eines Haupt-Arbeits-Threads umfasst, und wobei die Zuordnung des Haupt-Arbeits-Threads zu einem der Prozessorkerne die Zuordnung des Haupt-Arbeits-Threads zu einem Prozessorkern umfasst, der für den Haupt-Arbeits-Thread reserviert ist.
  9. Vorrichtung nach Anspruch 1, wobei der Speicher weiter einen Code umfasst, der durch den Prozessor ausgeführt werden kann, um: – eine Zeit-Anforderung des Computerprozesses basierend auf einem oder auf mehreren Tags auf Prozess-Niveau zu bestimmen; – die Kosten der lokalen Ausführung des Computerprozesses zu bestimmen; und – basierend auf der Zeit-Anforderung und den Kosten der lokalen Ausführung des Computerprozesses den Computerprozess auf ein entfernten Computergerät offzuloaden,.
  10. Verfahren umfassend: – Identifizieren, durch die Verwendung eines Prozessors, von mindestens einem Thread, der Teil eines Computerprozesses ist, – Identifizieren von einem oder von mehreren Tags, die mit dem Thread assoziiert sind, – Bestimmen einer Rechenanforderung des Threads basierend auf einem oder auf mehreren Tags; und – Zuordnen des Threads an einen der Prozessorkerne basierend auf der Rechenanforderung.
  11. Verfahren nach Anspruch 10, weiter umfassend Identifizieren der Systemeigenschaften eines Computersystems, das den Computerprozess ausführt, wobei die Zuordnung des Threads zu einem der Prozessorkerne weiter auf den Systemeigenschaften basiert.
  12. Verfahren nach Anspruch 10, wobei das Identifizieren von mindestens einem Thread, der Teil eines Computerprozesses ist, das Identifizieren einer Vielzahl von Threads umfasst, wobei das Verfahren weiter Folgendes umfasst: – Bestimmen eine Intra-Prozess-Priorität für jeden Thread, basierend auf einem oder auf mehreren Tags; – Identifizieren eines Satzes von Hardware-Ressourcen, die dem Computerprozess zugeordnet sind; – Zuweisen von Hardware-Ressourcen aus dem Satz von Hardware-Ressourcen zu jedem Thread, basierend auf der Intra-Prozess-Priorität.
  13. Verfahren nach Anspruch 10, wobei das Identifizieren von mindestens einem Thread, der Teil eines Computerprozesses ist, das Identifizieren eines Haupt-Arbeits-Threads umfasst, und wobei das Zuordnen des Haupt-Arbeits-Threads zu einem der Prozessorkerne das Isolieren des Haupt-Arbeits-Threads auf seinen eigenen Prozessorkern umfasst.
  14. Verfahren nach Anspruch 10, wobei das Bestimmen einer Rechenanforderung des Threads basierend auf dem einem oder den mehreren Tags das Bestimmen eines Zeitempfindlichkeits-Niveaus des Threads basierend auf dem einen oder auf den mehreren Tags umfasst, wobei das Verfahren weiter das Zuordnen einer Intra-Prozess-Priorität zum Thread basierend auf dem Zeitempfindlichkeits-Niveau umfasst.
  15. Verfahren nach Anspruch 10, wobei das Bestimmen einer Rechenanforderung des Threads basierend auf dem einen oder auf den mehreren Tags das Identifizieren einer Speichercache-Anforderung des Threads umfasst, wobei das Zuweisen des Threads zu einem der Prozessorkerne das Auswählen eines Prozessorkerns basierend auf der Speichercache-Anforderung umfasst.
  16. Verfahren nach Anspruch 15, wobei das Zuordnen des Threads an einem der Prozessorkerne basierend auf der Rechenanforderung weiter das Abschalten des Hyper-Threading auf dem ausgewählten Prozessorkern, basierend auf der Speichercache-Anforderung, umfasst.
  17. Verfahren nach Anspruch 10, wobei das Bestimmung einer Rechenanforderung des Threads basierend auf dem einen oder auf den mehreren Tags die Identifizierung einer Geschwindigkeits-Anforderung des Threads umfasst, wobei die Zuordnung des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung. die Auswahl eines Prozessorkerns basierend auf der Geschwindigkeitsanforderung umfasst.
  18. Programmprodukt, umfassend ein computerlesbares Speichermedium, das einen Code speichert, der durch einen Prozessor ausgeführt werden kann, wobei der ausführbare Code einen Code umfasst, um Folgendes auszuführen: – Identifizieren von mindestens einem Thread, der Teil eines Computerprozesses ist; – Identifizieren von einem oder von mehreren Tags, die mit dem Thread assoziiert sind; – Bestimmen einer Rechenanforderung des Threads basierend auf einem oder auf mehreren Tags; und – Zuordnen des Threads zu einem der Prozessorkerne basierend auf der Rechenanforderung.
  19. Programmprodukt nach Anspruch 18, wobei der Code weiter Folgendes ausführt: Zuordnung von Hardware-Ressourcen an den Thread, basierend auf dem einen oder auf den mehreren Tags, wobei die Hardware-Ressourcen aus einem Satz von Hardware-Ressourcen zugewiesen werden, der dem Computerprozess zugeordnet ist.
  20. Programmprodukt nach Anspruch 18, wobei der Code weiter Folgendes ausführt: – Identifizieren eines nicht markierten Threads, wobei der nicht markierte Thread nicht mit einem Tag assoziiert ist; – Vergleichen des nicht markierten Threads mit einem oder mit mehreren Thread-Profilen; und – Assoziieren des einen oder der mehreren Tags mit dem nicht markierten Thread, basierend auf dem Vergleich.
DE102016118210.9A 2015-09-30 2016-09-27 Granulare Dienstqualität für Computer-Ressourcen Pending DE102016118210A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/871,182 US10509677B2 (en) 2015-09-30 2015-09-30 Granular quality of service for computing resources
US14/871,182 2015-09-30

Publications (1)

Publication Number Publication Date
DE102016118210A1 true DE102016118210A1 (de) 2017-03-30

Family

ID=57539869

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016118210.9A Pending DE102016118210A1 (de) 2015-09-30 2016-09-27 Granulare Dienstqualität für Computer-Ressourcen

Country Status (4)

Country Link
US (1) US10509677B2 (de)
CN (1) CN106557367B (de)
DE (1) DE102016118210A1 (de)
GB (1) GB2544609B (de)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10372493B2 (en) * 2015-12-22 2019-08-06 Intel Corporation Thread and/or virtual machine scheduling for cores with diverse capabilities
KR102468286B1 (ko) * 2016-01-04 2022-11-21 한국전자통신연구원 대칭형 다중 처리 시스템에서의 전력 제한 장치 및 방법
US10073718B2 (en) * 2016-01-15 2018-09-11 Intel Corporation Systems, methods and devices for determining work placement on processor cores
CN109308212A (zh) * 2017-07-26 2019-02-05 上海华为技术有限公司 一种任务处理方法、任务处理器及任务处理设备
CN111052083B (zh) * 2017-08-16 2023-11-07 三星电子株式会社 用于在启动期间管理服务的调度的方法和装置
CN109522101B (zh) * 2017-09-20 2023-11-14 三星电子株式会社 用于调度多个操作系统任务的方法、系统和/或装置
US10558499B2 (en) * 2017-10-26 2020-02-11 Advanced Micro Devices, Inc. Wave creation control with dynamic resource allocation
CN109766168B (zh) * 2017-11-09 2023-01-17 阿里巴巴集团控股有限公司 任务调度方法和装置、存储介质以及计算设备
CN109117260B (zh) * 2018-08-30 2021-01-01 百度在线网络技术(北京)有限公司 一种任务调度方法、装置、设备和介质
CN111045814B (zh) * 2018-10-11 2023-12-08 华为技术有限公司 资源调度方法和终端设备
CN109669640B (zh) * 2018-12-24 2023-05-23 浙江大华技术股份有限公司 一种数据存储方法、装置、电子设备及介质
US20200361452A1 (en) * 2019-05-13 2020-11-19 Toyota Research Institute, Inc. Vehicles and methods for performing tasks based on confidence in accuracy of module output
CN110333958A (zh) * 2019-06-28 2019-10-15 烽火通信科技股份有限公司 一种基于DBus信号管理线程的方法及系统
US11074111B2 (en) * 2019-07-15 2021-07-27 Vmware, Inc Quality of service scheduling with workload profiles
CN113110795A (zh) * 2020-01-13 2021-07-13 伊姆西Ip控股有限责任公司 在应用系统中执行作业的方法、设备和计算机程序产品
US11706656B2 (en) * 2020-06-29 2023-07-18 Qualcomm Incorporated Downlink data prioritization for time-sensitive applications
US11500691B2 (en) 2020-07-16 2022-11-15 Vmware, Inc. Predictive scaling of datacenters
US11675631B2 (en) * 2020-09-29 2023-06-13 Kyndryl, Inc. Balancing mainframe and distributed workloads based on performance and costs

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7245725B1 (en) * 2001-05-17 2007-07-17 Cypress Semiconductor Corp. Dual processor framer
US20060080660A1 (en) * 2004-10-07 2006-04-13 Dell Products L.P. System and method for disabling the use of hyper-threading in the processor of a computer system
US20070150895A1 (en) 2005-12-06 2007-06-28 Kurland Aaron S Methods and apparatus for multi-core processing with dedicated thread management
US20070220530A1 (en) * 2006-03-03 2007-09-20 Accton Technology Corporation Power management architectures
US8126911B2 (en) * 2006-04-27 2012-02-28 Intel Corporation System and method for content-based partitioning and mining
US7865895B2 (en) * 2006-05-18 2011-01-04 International Business Machines Corporation Heuristic based affinity dispatching for shared processor partition dispatching
US9030934B2 (en) * 2007-09-07 2015-05-12 Qualcomm Incorporated Host-based quality of service for wireless communications
US8886918B2 (en) 2007-11-28 2014-11-11 International Business Machines Corporation Dynamic instruction execution based on transaction priority tagging
US8776077B2 (en) * 2008-04-02 2014-07-08 Oracle America, Inc. Method for multithreading an application using partitioning to allocate work to threads
US20140298349A1 (en) * 2008-04-21 2014-10-02 Adaptive Computing Enterprises, Inc. System and Method for Managing Energy Consumption in a Compute Environment
US8140830B2 (en) * 2008-05-22 2012-03-20 International Business Machines Corporation Structural power reduction in multithreaded processor
US20100138675A1 (en) * 2008-11-30 2010-06-03 Dell Products L.P. Methods and Systems for Managing Power to Multiple Processors
US9569270B2 (en) 2009-04-21 2017-02-14 Empire Technology Development Llc Mapping thread phases onto heterogeneous cores based on execution characteristics and cache line eviction counts
US8417917B2 (en) * 2009-09-30 2013-04-09 International Business Machines Corporation Processor core stacking for efficient collaboration
US9304570B2 (en) * 2011-12-15 2016-04-05 Intel Corporation Method, apparatus, and system for energy efficiency and energy conservation including power and performance workload-based balancing between multiple processing elements
US9223709B1 (en) * 2012-03-06 2015-12-29 Marvell International Ltd. Thread-aware cache memory management
US9063991B2 (en) * 2013-01-25 2015-06-23 Wipro Limited Methods for identifying unique entities across data sources and devices thereof
CA2885501C (en) * 2014-03-20 2023-12-19 Nanjing Yuyan Information Technology Ltd. Efficient software for transcoding to hevc on multi-core processors
CN104408136A (zh) * 2014-11-26 2015-03-11 合肥晶奇电子科技有限公司 一种公共医疗系统的日志处理方法
CN104572284B (zh) * 2015-01-08 2019-03-15 游道易(北京)科技有限公司 任务实现装置和方法、以及应用
US20160210174A1 (en) * 2015-01-15 2016-07-21 Microsoft Corporation Hybrid Scheduler and Power Manager

Also Published As

Publication number Publication date
CN106557367B (zh) 2021-05-11
US10509677B2 (en) 2019-12-17
GB2544609A (en) 2017-05-24
GB201616381D0 (en) 2016-11-09
GB2544609B (en) 2019-10-23
US20170090988A1 (en) 2017-03-30
CN106557367A (zh) 2017-04-05

Similar Documents

Publication Publication Date Title
DE102016118210A1 (de) Granulare Dienstqualität für Computer-Ressourcen
DE102013104328B4 (de) Aufgabenzuteilung in großen und kleinen Kernen
DE102020120019A1 (de) Proaktive di/dt-spannungs-dachabfall-abschwächung
DE102019106669A1 (de) Verfahren und anordnungen zum verwalten von speicher in kaskadierten neuronalen netzen
DE102020112961A1 (de) Techniken zum dynamischen partitionieren von aufgaben
DE102018132781A1 (de) Heterogenes Rechensystem, welches konfiguriert ist, um eine Cachekohärenz adaptiv zu steuern
DE102010045743A1 (de) Verfahren und Vorrichtung um Turboleistung für das Event-Handling zu verbessern
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE112013000369T5 (de) Verwaltung von Threads innerhalb einer Datenverarbeitungsumgebung
DE202012011944U1 (de) Vorrichtung und System zur Energie-Effizienz und Energie-Einsparung mit einem Strom- und Leistungsabgleich zwischen mehreren Verarbeitungselementen
DE102019122935A1 (de) Verfahren und vorrichtungen zum zuweisen einer arbeitslast an einen beschleuniger unter verwendung von maschinenlernen
DE102017213160B4 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE112020004181T5 (de) Bereitstellen eines direkten datenzugriffs zwischen beschleunigern und speicher in einer datenverarbeitungsumgebung
DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
DE102012210895A1 (de) Vorhersage der ungeordneten Parallelverarbeitung der Befehle von Threads in einem Multithread-Prozessor
DE102013104329A1 (de) Aufgabenzuteilung in großen und kleinen Kernen
DE112017001700T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen zum Abruf von Daten auf der angegebenen Cache-Ebene mit garantiertem Abschluss
DE112014002754T5 (de) Effiziente Aufgabenplanung unter Verwendung eines Sperrmechanismus
DE112013007300T5 (de) Speichersysteme mit adaptiver Löschcode-Generierung
DE112020004661T5 (de) Ermitteln einer optimalen Anzahl von Threads pro Kern in einem Mehrkern-Prozessorkomplex
DE112013000687T5 (de) Verteilte Funktionsausführung für Hybridsysteme
DE112018007751T5 (de) Automatisierte Optimierung von Computer-Betriebssystemen
DE102013216237A1 (de) Verfahren und System zum automatischen Clock-Gating eines Taktgitters bei einer Taktquelle
DE102012204167A1 (de) Vorauslaufende genäherte Berechnungen
DE112015004564T5 (de) Ereignisgesteuerte Reoptimierung einer logisch partitionierten Umgebung zur Energieverwaltung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R083 Amendment of/additions to inventor(s)
R082 Change of representative

Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE