time(7) Miscellaneous Information Manual time(7) NOM time - Survol des fonctions liees au temps et aux temporisateurs DESCRIPTION Temps reel et temps processus Le temps reel est defini comme le temps mesure a partir d'un point fixe, soit un point standard dans le passe (voir la definition de l'epoque et du temps calendaire ci-dessous), soit un point (p.ex. le demarrage) dans la vie d'un processus (temps ecoule). Le temps processus est defini comme le temps CPU utilise par un processus. Il est parfois divise entre une partie utilisateur et une partie systeme. Le temps CPU utilisateur est le temps passe a executer du code en mode utilisateur. Le temps CPU systeme est le temps passe par le noyau en mode systeme pour le processus (p.ex. pendant des appels systeme). La commande time(1) peut etre utilisee pour determiner le temps CPU utilise pendant l'execution du programme. Un programme peut determiner le temps CPU qu'il a utilise avec les fonctions times(2), getrusage(2) et clock(3). L'horloge materielle La plupart des ordinateurs ont une horloge materielle (alimentee par une pile) que le noyau lit au demarrage du systeme pour initialiser l'horloge logicielle. Pour plus de details, consultez rtc(4) et hwclock(8). L'horloge logicielle, HZ, et les Jiffies La precision de divers appels systeme qui definissent des delais (par exemple select(2), sigtimedwait(2)) ou qui mesurent le temps processeur (par exemple getrusage(2)) est limitee par la resolution de l'horloge logicielle, une horloge entretenue par le noyau qui mesure le temps en jiffies (NDT : jiffy - tres courte duree). La duree d'un jiffy est determinee par la valeur de la constante du noyau HZ. La valeur de HZ varie d'une version du noyau et d'une architecture a l'autre. Sur i386, la situation est la suivante : pour les noyaux jusqu'a Linux 2.4.x inclus, HZ vaut 100, ce qui donne une valeur de jiffy de 10 millisecondes ; a partir de Linux 2.6.0, HZ a ete augmente a 1000, ainsi un jiffy etait equivalent a 1 milliseconde. Depuis Linux 2.6.13, la valeur de HZ est un parametre de configuration du noyau, et peut valoir 100, 250 (la valeur par defaut) ou 1000, donnant des valeurs de 10, 4 et 1 millisecondes, respectivement, pour un jiffy. Depuis Linux 2.6.20, il est aussi possible d'utiliser 300 ; cette valeur est un multiple exact de la frequence des formats videos les plus courants (PAL, 25 Hz ; NTSC, 30 Hz). L'appel systeme times(2) est un cas particulier. Il renvoie le temps avec une granularite definie par la constante du noyau USER_HZ. Les applications utilisateur peuvent obtenir la valeur de cette constante avec sysconf(_SC_CLK_TCK). Horloges du systeme et des processus ; espaces de noms de temps Le noyau gere une serie d'horloges qui mesurent differentes sortes de temps ecoules et virtuels (c'est-a-dire, consommes par le CPU). Ces horloges sont decrites dans clock_gettime(2). Quelques unes de ces horloges sont reglables en utilisant clock_settime(2). Les valeurs de certaines horloges sont virtualisees par les espaces de noms temps. Consulter time_namespaces(7). Temporisations haute resolution Avant Linux 2.6.21, la precision des appels systeme de temporisateur et de mise en sommeil (voir plus loin) etait limitee par la taille d'un jiffy. Depuis Linux 2.6.21, Linux gere les temporisateurs haute resolution (HRT : high-resolution timers) de maniere optionnelle en configurant CONFIG_HIGH_RES_TIMERS. Sur les systemes gerant les temporisateurs haute resolution, la precision des mises en sommeil et des appels systeme des temporisateurs n'est plus limitee par le jiffy et peut etre aussi fine que le systeme le permet (une precision d'une microseconde est typique sur les materiels actuels). Vous pouvez savoir si les temporisateurs haute resolution sont geres en verifiant la precision renvoyee par un appel a clock_getres(2) ou en regardant les entrees << resolution >> du fichier /proc/timer_list. Les temporisateurs haute resolution ne sont pas geres par toutes les architectures materielles. Cette gestion est disponible sur x86, ARM et PowerPC, entre autres. L'Epoque (Epoch) Les systemes UNIX representent le temps depuis l'Epoque, qui est le 1er janvier 1970 a 00:00:00 (UTC). Un programme peut determiner le temps calendaire avec l'horloge CLOCK_REALTIME de clock_gettime(2), qui renvoie le temps (en secondes et nanosecondes) ecoule depuis l'Epoque ; time(2) fournit une information similaire, mais avec une precision a la seconde la plus proche. Le temps systeme peut etre modifie avec clock_settime(2). Temps decompose Certaines fonctions de bibliotheque utilisent une structure de type tm pour representer le temps decompose, qui stocke le temps decompose en composantes distinctes (annee, mois, jour, heure, minute, seconde, etc.). Cette structure est decrite dans tm(3type), qui decrit egalement les fonctions qui font la conversion entre temps calendaire et temps decompose. Les fonctions permettant les conversions entre temps decompose et representation sous forme de chaine de caracteres sont decrites dans ctime(3), strftime(3) et strptime(3). Dormir et placer des temporisateurs Divers appels systeme et fonctions permettent a un programme de s'endormir (suspendre son execution) pour une duree specifiee. Consultez nanosleep(2), clock_nanosleep(2) et sleep(3). Divers appels systeme permettent a un processus de placer un temporisateur qui expirera a un point donne dans le futur, et eventuellement a des intervalles repetes. Consultez alarm(2), getitimer(2), timerfd_create(2) et timer_create(2). Marge de temporisateur Depuis Linux 2.6.28, la valeur de cette << marge de temporisateur >> (timer slack) peut etre controlee pour un thread. Cette marge de temporisation est l'intervalle de temps pendant lequel le noyau pourrait differer le reveil de certains appels qui bloquent avec un delai d'expiration. L'activation de ce delai permet au noyau de fusionner les evenements de reveil, reduisant donc ainsieventuellement le nombre de reveils systeme et la consommation d'energie. Veuillez consulter la description de PR_SET_TIMERSLACK dans prctl(2) pour obtenir plus de precisions. VOIR AUSSI date(1), time(1), timeout(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), ntp_adjtime(3), ntp_gettime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3), timeradd(3), usleep(3), rtc(4), time_namespaces(7), hwclock(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Paul Guillonneau Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 time(7)