getcpu(2)

BEZEICHNUNG
getcpu - Bestimmt den CPU- und NUMA-Knoten, auf dem der aufrufende Thread läuft

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#define _GNU_SOURCE             /* siehe feature_test_macros(7) */
#include <sched.h>

int getcpu(unsigned int *_Nullable CPU, unsigned int *_Nullable Knoten);

BESCHREIBUNG
Der Systemaufruf getcpu() identifiziert den Prozessor und Knoten, auf dem der aufrufende Thread derzeit läuft und schreibt sie in Ganzzahlen, auf die die Argumente CPU und Knoten zeigen. Der Prozessor ist eine kleine, eindeutige Ganzzahl, die die CPU identifiziert. Der Knoten ist ein kleiner eindeutiger Kennzeichner, der einen NUMA-Knoten identifiziert. Wenn entweder CPU oder Knoten NULL ist, wird auf den entsprechenden Zeiger nichts geschrieben.

Die in CPU abgelegte Information wird nur zum Zeitpunkt des Aufrufs als aktuell garantiert. Der Kernel kann jederzeit die CPU ändern, außer die CPU-Affinität wurde mit sched_setaffinity(2) festgelegt. (Normalerweise passiert dies nicht, da der Scheduler die Bewegungen zwischen CPUs zu minimieren versucht, um die Zwischenspeicher aktuell zu halten, aber es ist möglich.) Der Aufrufende muss die Möglichkeit in Betracht ziehen, dass die in CPU und Knoten zurückgelieferten Informationen zum Zeitpunkt des Abschlusses des Aufrufs nicht mehr aktuell sind.

RÜCKGABEWERT
Bei Erfolg wird 0 zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

EFAULT
    Argumente zeigen außerhalb des Adressraums des aufrufenden Prozesses.

STANDARDS
Linux.

GESCHICHTE
Linux 2.6.19 (X86-64 und I386), Glibc 2.29.

  Unterschiede C-Bibliothek/Kernel
Der Kernel-Systemaufruf hat ein drittes Argument:

int getcpu(unsigned int *CPU, unsigned int *Knoten,
           struct getcpu_cache *tcache);

Das Argument tcache wird seit Linux 2.6.24 nicht mehr verwandt und sollte (beim direkten Aufruf des Systemaufrufs) als NULL angegeben werden, außer die Portabilität zu Linux 2.6.23 oder älter wird benötigt.

In Linux 2.6.23 und älter legte das Argument tcache, wenn es nicht NULL war, einen Zeiger auf einen Puffer, der vom aufrufenden in einem Thread-lokalen Speicher reserviert wurde, fest, der zur Bereitstellung eines Zwischenspeichermechanismus für getcpu() verwandt wurde. Die Verwendung des Zwischenspeichers beschleunigte die Aufrufe von getcpu(), es gab allerdings eine sehr kleine Wahrscheinlichkeit, dass die zurückgelieferte Information veraltet war. Der Zwischenspeichermechanismus wurde als Problemursache bei der Migration von Threads zwischen CPUs betrachtet und daher wird das Argument jetzt ignoriert.

ANMERKUNGEN
Linux bemüht sich so gut wie möglich, diesen Aufruf schnellstmöglich durchzuführen. (Auf einigen Architekturen erfolgt dies durch eine Implementierung in vdso(7).) Die Idee hinter getcpu() besteht darin, es Programmen zu erlauben, Optimierungen für CPU-bezogene Daten oder für NUMA durchzuführen.

SIEHE AUCH
mbind(2), sched_setaffinity(2), set_mempolicy(2), sched_getcpu(3), cpuset(7), vdso(7)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).