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 se ven como 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 núcleo.
En el código fuente del kernel de Linux del archivo fs/proc/uptime.c
en la línea 49 , verá una llamada a la función:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
Esto crea una entrada del sistema de archivos proc llamada uptime
(el procfs generalmente está montado debajo /proc
) y le asocia una función, que define operaciones de archivo válidas en ese pseudo archivo y las funciones asociadas a ellas. En caso de tiempo de actividad es justo read()
y open()
operaciones. Sin embargo, si rastrea las funciones, terminará aquí , donde se calcula el tiempo de actividad.
Internamente, hay una interrupción de temporizador que actualiza periódicamente el tiempo de actividad del sistema (además de otros valores). El intervalo, en el que el temporizador-interrupción marca, está definido por la macro preprocesador HZ
, cuyo valor exacto se define en el archivo de configuración del núcleo 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 pueden calcular en un número (de segundos) desde el último arranque.
Para abordar su pregunta: ¿Desde cuándo comienza a contar el “tiempo de actividad”?
Dado que el tiempo de actividad es un valor interno del núcleo, que marca cada ciclo, comienza a contar cuando el núcleo se ha inicializado. Es decir, cuando el primer ciclo ha terminado. Incluso antes de que se monte algo, directamente después de que el gestor de arranque le da el control a la imagen del núcleo.