Mi computadora dice:
$ uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
Y si reviso last
veo:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
Y luego verifico:
$ ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
Entonces veo en /var/log/syslog
la primera línea de hoy ser:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
Entonces, todo parece converger en 8:34
el momento en que mi máquina se ha iniciado.
Sin embargo, me pregunto: ¿cuál es el tiempo exacto que uptime
usa? ¿Es uptime
un proceso que inicia y verifica algún archivo o es algo en el hardware?
Estoy ejecutando Ubuntu 14.04.
linux
linux-kernel
uptime
fedorqui
fuente
fuente
systemd-analyze blame
también contiene el tiempo antes de Kernel init, al menos en uefi.Respuestas:
En mi sistema obtiene el tiempo de actividad de
/proc/uptime
:Desde la página de manual de proc :
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: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 justoread()
yopen()
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.
fuente
Por lo que sé, se
uptime
utiliza/proc/uptime
para calcular el tiempo de actividad del sistema. Puede verlo más claramente en el código fuente uptime.cfuente
/proc/uptime
se calcula a partir del tiempo de actividad.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 con la que también obtienes
who -b
y luego calcula el tiempo desde entonces.*)
uptime
es un enlace alw
programa y fue introducido por BSD alrededor de 1980.fuente
/var/adm/utmpx
en mi sistema. De hecho, ni siquiera/var/adm
w
se usa la implementación original, las cosas son de esta manera, pero Linux generalmente hace las cosas un poco diferentes.uptime
comando, y mucho menos cómo debe implementarse. AFAICT, OS / X tampoco tiene un / var / adm / utmpx. Y algunos sistemas basados en Linux han recibido la certificación de cumplimiento de Unix.