#1 Le 22/11/2014, à 00:30
- Aeroyeur
Mode utilisateur/noyau et Hertz
Bonjour,
Devant faire quelques recherches sur des processus, je lance un
cat /proc/[PID]/stat
et je regarde le résultat. Après quelques recherches, je découvre que ce qui m’intéresse sont les champs 14 et 15, c'est à dire le temps passé par le processus en mode noyau et utilisateur.
Seulement, je ne sais pas trop à quoi correspondent ces modes, donc si quelqu'un pouvait m'expliquer...?
De plus, dans ce que je souhaite faire, j'ai besoin de trouver la valeur des "clock ticks per second" que je n'arrive pas à trouver. On me dit d'utiliser sysconf(_SC_CLK_TCK), mais j'avouerai que je ne sais pas trop quoi faire de ça, est-ce que je le rentre sous simplement en tant que commande ? Est-ce que je fais un echo $sysconf(_SC_CLK_TCK) ? Autre chose ? Sachant que je souhaiterai utiliser cette valeur dans un script shell.
Merci d'avance !
Hors ligne
#2 Le 22/11/2014, à 09:44
- pingouinux
Re : Mode utilisateur/noyau et Hertz
Bonjour,
Voici quelques informations.
Ceci est un extrait de man proc, rubrique /proc/[pid]/stat (désolé, c'est en anglais)
utime %lu (14) Amount of time that this process has been scheduled in user mode, mea‐
sured in clock ticks (divide by sysconf(_SC_CLK_TCK)). This includes guest
time, guest_time (time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do not lose that
time from their calculations.stime %lu (15) Amount of time that this process has been scheduled in kernel mode,
measured in clock ticks (divide by sysconf(_SC_CLK_TCK)).
sysconf est un programme C, mais tu peux obtenir l'information ainsi
getconf CLK_TCK
Cette variable semble obsolete. Voici un extrait de man sysconf, rubrique POSIX.1 variables (toujours en anglais)
clock ticks - _SC_CLK_TCK
The number of clock ticks per second. The corresponding variable is
obsolete. It was of course called CLK_TCK. (Note: the macro
CLOCKS_PER_SEC does not give information: it must equal 1000000.)
Hors ligne
#3 Le 22/11/2014, à 14:47
- Aeroyeur
Re : Mode utilisateur/noyau et Hertz
Je vois... Donc si jamais je souhaitais avoir le temps CPU utilisé par un processus, je devrai additionner utile et stime ? Et ensuite diviser par la valeur de la valeur de la variable ? Ou multiplier ? (Y a un peu tout qui se mélange là)
Et quand on dit que cette variable est obsolète, c'est à dire ? Qu'elle n'est plus utilisable ? Que la valeur renvoyée est fausse ?
Hors ligne
#4 Le 22/11/2014, à 19:33
- pingouinux
Re : Mode utilisateur/noyau et Hertz
Donc si jamais je souhaitais avoir le temps CPU utilisé par un processus, je devrai additionner utile et stime ?
Je dirais oui
Et ensuite diviser par la valeur de la valeur de la variable ?
Oui
Et quand on dit que cette variable est obsolète, c'est à dire ?
J'ai trouvé ceci : time.h, dont voici un extrait
Constantes
CLK_PER_SEC
Constante qui définit le nombre de coups d'horloge par seconde. Elle est utilisée par la fonction clock().
CLOCKS_PER_SEC
Une autre nom de CLK_PER_SEC utilisé par quelques bibliothèques.
CLK_TCK
Une macro obsolète de CLK_PER_SEC.
Tu as aussi la fonction time pour voir le temps pris par une commande.
Cet exemple permet de comparer avec ce qui est fourni par /proc/[PID]/stat.
time for i in $(seq 1000000);do echo $((i*i)); done >/dev/null &
echo utime stime=$(while true; do cut -d\ -f14-15 /proc/$!/stat 2>/dev/null || break; done | tail -1)
echo CLK_TCK=$(getconf CLK_TCK)
qui donne ce résultat
real 0m11.184s
user 0m10.559s
sys 0m0.405s
utime stime=1054 40
CLK_TCK=100
Hors ligne
#5 Le 22/11/2014, à 22:26
- Aeroyeur
Re : Mode utilisateur/noyau et Hertz
Bien bien bien ! Merci beaucoup, ça m'a bien aidé ! J'ai enfin pu calculer tout ça.
Et...si je peux me permettre une dernière question, pas totalement dans le thème, mais qui m'a fait perdre beaucoup de cheveux à force de me les arracher. Dans le cadre d'un projet, je dois afficher le nombre d'utilisateurs connectés, mais sans utiliser la commande "who" ou "users" ou toute autre commande qui donne le résultat directement...et après avoir farfouillé plein de dossiers et de sous-dossiers, avoir eu de faux espoirs, avoir ragé, je souhaiterai savoir s'il était possible de m'indiquer dans quel(s) dossier(s) il me fallait chercher sans toutefois me donner la réponse complète (Juste m'indiquer où cela se trouve me suffit, sinon j'aurai mauvaise conscience...)
Merci beaucoup en tout cas !
Hors ligne