GNU/Linux >> Tutoriels Linux >  >> Linux

Sous Linux, à partir de quand le temps de disponibilité commence-t-il à compter ?

Sur mon système, il obtient la disponibilité de /proc/uptime :

$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY)         = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4
 10:52:38 up 3 days, 23:38,  4 users,  load average: 0.00, 0.02, 0.05

À partir de la page de manuel proc :

   /proc/uptime
          This file contains two numbers: the uptime of the system
          (seconds), and the amount of time spent in idle process
          (seconds).

Le système de fichiers proc contient un ensemble de pseudo-fichiers. Ce ne sont pas de vrais fichiers, ils ressemblent juste à des fichiers, mais ils contiennent des valeurs fournies directement par le noyau. Chaque fois que vous lisez un fichier, tel que /proc/uptime , son contenu est régénéré à la volée. Le système de fichiers proc est une interface avec le noyau.

Dans le code source du noyau Linux du fichier fs/proc/uptime.c à la ligne 49, vous voyez un appel de fonction :

proc_create("uptime", 0, NULL, &uptime_proc_fops);

Cela crée une entrée de système de fichiers proc appelée uptime (le procfs est généralement monté sous /proc ), et lui associe une fonction, qui définit les opérations de fichier valides sur ce pseudo-fichier et les fonctions qui leur sont associées. En cas de disponibilité, c'est juste read() et open() opérations. Cependant, si vous retracez les fonctions, vous vous retrouverez ici, où le temps de disponibilité est calculé.

En interne, il existe une minuterie d'interruption qui met à jour périodiquement la disponibilité des systèmes (en plus d'autres valeurs). L'intervalle, dans lequel l'interruption du temporisateur se déclenche, est défini par la macro du préprocesseur HZ , dont la valeur exacte est définie dans le fichier de configuration du noyau et appliquée au moment de la compilation.

Le temps d'inactivité et le nombre de cycles CPU, combinés à la fréquence HZ (cycles par seconde) peut être calculé en nombre (de secondes) depuis le dernier démarrage.

Pour répondre à votre question :À partir de quand le "temps de disponibilité" commence-t-il ?

Étant donné que le temps de disponibilité est une valeur interne du noyau, qui augmente à chaque cycle, il commence à compter lorsque le noyau s'est initialisé. C'est-à-dire lorsque le premier cycle est terminé. Même avant que quoi que ce soit ne soit monté, directement après que le chargeur de démarrage donne le contrôle à l'image du noyau.


Tant que je sais, uptime utilise /proc/uptime pour calculer la disponibilité du système. Vous pouvez le voir plus clairement dans le code source uptime.c

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

Sur un système UNIX standard (basé sur les sources d'origine *), uptime lit /var/adm/utmpx et vérifie la dernière heure d'entrée de redémarrage.

En d'autres termes :il s'agit de récupérer la date que vous obtenez également avec who -b puis calcule le temps écoulé depuis.

*) uptime est un lien vers le w programme et a été introduit par BSD vers 1980.


Linux
  1. Comment accélérer le processus de compilation lors de l'installation de packages à partir d'AUR

  2. Linux – Oui automatique aux invites lors de l'installation du package sur Alpine Linux ?

  3. Linux – Arch Linux :Pacman ne fonctionne pas lors du chroot ?

  4. Linux - Comment exécuter un chargeur de démarrage à partir de Linux ?

  5. Crash de l'émulateur Android lors du démarrage dans Android Studio (Linux)

Commande de disponibilité sous Linux

Passer de Windows à Linux

Documenter la disponibilité du système sous Linux

Exemples de commandes de disponibilité Linux

Installer Linux à partir de Linux

Comment Linux distingue-t-il les threads des processus enfants ?