Sous-routine thread_cputime

Objectif

Extrait l'utilisation de l'unité centrale pour une unité d'exécution spécifiée

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/thread.h>
int thread_cputime (tid, ctime)
tid_t tid;
thread_cputime_t * ctime ;
typedef struct {
    uint64_t utime; /* User time in nanosenconds */
    uint64_t stime; /* System time in nanoseconds */
} thread_cputime_t;

Descriptif

La sous-routine Tarau_tarau_tarau_exécution permet à une unité d'exécution d'interroger l'utilisation de l'unité centrale de l'unité d'exécution spécifiée (D) dans le même processus ou dans un autre processus. Si la valeur -1 est transmise dans le champ du paramètre tid, l'utilisation de l'unité centrale du thread appelant est récupérée.

L'utilisation de l'unité centrale n'est pas identique à la durée de vie totale de l'unité d'exécution en temps réel, mais correspond à la quantité réelle de temps UC consommée par l'unité d'exécution depuis sa création. L'utilisation de l'unité centrale extraite par cette sous-routine contient le temps UC consommé par l'unité d'exécution demandée D dans l'espace utilisateur (Utime) et l'espace système (Stime).

L'unité d'exécution à interroger est identifiée à l'aide de l'ID d'unité d'exécution du noyau qui a une portée globale. Il peut être obtenu par l'application à l'aide de l'appel système Thread_self . Seul le mode d'unité d'exécution 1: 1 est pris en charge. Le résultat pour le mode d'unité d'exécution M: N n'est pas défini.

L'utilisation de l'unité centrale d'une unité d'exécution qui n'est pas l'unité d'exécution appelante est en cours à la dernière envoi de l'unité d'exécution. Cette valeur sera désactivée par une petite quantité si l'unité d'exécution cible est en cours d'exécution.

Paramètres

Article Descriptif
ID d'unité d'exécution Identificateur de l'unité d'exécution pour laquelle l'utilisation de l'unité centrale doit être extraite. La valeur -1 entraîne la récupération de l'utilisation de l'unité centrale du thread appelant.
Heure d'heure Utilisation de l'UC renvoyée à l'appelant. L'utilisation de l'unité centrale est renvoyée en termes de nanosecondes de temps système et utilisateur.

Valeurs renvoyées

0
Thread_cputime a abouti
-1
Thread_cputime n'a pas abouti. La variable globale errno est définie pour indiquer l'erreur.

Codes d'erreur

La sous-routine Tarau_tarau_tarau_exécution échoue si une ou plusieurs des informations suivantes sont vraies:

Article Descriptif
ESRCH L'unité d'exécution cible est introuvable.
EINVAL Un ou plusieurs des arguments avaient une valeur non valide.
EDÉFAUT Echec d'une opération de copie vers Heure d'heure .
Note : Si tid vaut -1, c'est-à-dire si l'utilisation du processeur du thread appelant est demandée et que le tampon ctime n'est pas valide, aucune erreur n'est renvoyée. Un SIGSEGV sera généré et l'application appelante va jeter un cliché de base.

Exemple

#include <stdio.h>
#include <sys/thread.h>
cputime.c:
int main( int argc, char *argv[])
{
    thread_cputime_t ut;
    tid_t tid;
    tid = atoi(argv[1]);
    printf("tid = %d\n",tid);
    if (thread_cputime(tid, &ut) == -1)
    {
        perror("Error from thread_cputime");
        exit(0);
    }
    else
    {
        printf("U: %ld nsecs\n", ut.utime);
        printf("S: %ld nsecs\n", ut.stime);
    }
}

Output:
# tcpdump -i en0 > /dev/null &
# echo "th * | grep tcpdump" | kdb | grep tcpdump
(0)> th * | grep tcpdump
pvthread+00A700 167 tcpdump SLEEP 0A7011 044 0 0 nethsque+000290
# echo "ibase=16;obase=A;0A7011" | bc
684049
# ./cputime 684049
tid = 684049
U: 31954040 nsecs
S: 31833069 nsecs