Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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