GNU/Linux >> Tutoriales Linux >  >> Linux

En Linux, ¿desde cuándo comienza a contar el tiempo de actividad?

En mi sistema obtiene el tiempo de actividad 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

Desde la página de manual de proc:

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

El sistema de archivos proc contiene un conjunto de pseudo archivos. Esos no son archivos reales, solo parecen archivos, pero contienen valores proporcionados directamente por el núcleo. Cada vez que lee un archivo, como /proc/uptime , su contenido se regenera sobre la marcha. El sistema de archivos proc es una interfaz para el kernel.

En el código fuente del kernel de Linux del archivo fs/proc/uptime.c en la línea 49, verá una llamada de función:

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

Esto crea una entrada en el sistema de archivos proc llamada uptime (el procfs generalmente se monta bajo /proc ), y le asocia una función, que define las operaciones de archivo válidas en ese pseudoarchivo y las funciones asociadas a ellas. En caso de tiempo de actividad, es solo read() y open() operaciones. Sin embargo, si rastrea las funciones, terminará aquí, donde se calcula el tiempo de actividad.

Internamente, hay una interrupción del temporizador que actualiza periódicamente el tiempo de actividad del sistema (además de otros valores). El intervalo, en el que la interrupción del temporizador marca, está definido por el preprocesador-macro HZ , cuyo valor exacto se define en el archivo de configuración del kernel y se aplica en el momento de la compilación.

El tiempo de inactividad y el número de ciclos de CPU, combinados con la frecuencia HZ (ciclos por segundo) se puede calcular en un número (de segundos) desde el último arranque.

Para responder a su pregunta:¿Desde cuándo comienza a contar el "tiempo de actividad"?

Dado que el tiempo de actividad es un valor interno del kernel, que marca cada ciclo, comienza a contar cuando el kernel se ha inicializado. Es decir, cuando ha finalizado el primer ciclo. Incluso antes de que se monte nada, directamente después de que el cargador de arranque le dé control a la imagen del kernel.


Hasta donde yo sé, uptime usa /proc/uptime para calcular el tiempo de actividad del sistema. Puede verlo más claramente en el código fuente 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);
    }

En un sistema UNIX estándar (basado en las fuentes originales *), uptime lee /var/adm/utmpx y comprueba la última vez que se reinicia la entrada.

En otras palabras:esto es recuperar la fecha que también obtienes con who -b y luego calcula el tiempo transcurrido desde entonces.

*) uptime es un enlace al w programa y fue presentado por BSD alrededor de 1980.


Linux
  1. Linux:¿cómo iniciar una partición de Windows desde la línea de comandos de Grub?

  2. Linux:¿Sí automático a las solicitudes al instalar el paquete en Alpine Linux?

  3. Linux – Arch Linux:¿Pacman no funciona al hacer chroot?

  4. Linux:¿cómo ejecutar un gestor de arranque desde Linux?

  5. ¿Cómo funciona internamente copy_from_user del kernel de Linux?

Comando de tiempo de actividad en Linux

Cambiar de Windows a Linux

Documentación del tiempo de actividad del sistema en Linux

Ejemplos de comandos de tiempo de actividad de Linux

¿Cómo comienza PulseAudio?

¿Cómo diferencia Linux los hilos de los procesos secundarios?