Mi computadora dice:
$ uptime
 10:20:35 up  1:46,  3 users,  load average: 0,03, 0,10, 0,13
Y si reviso lastveo:
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/syslogla 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:34el momento en que mi máquina se ha iniciado.
Sin embargo, me pregunto: ¿cuál es el tiempo exacto que uptimeusa? ¿Es uptimeun 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 blametambié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.cen 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
uptimeutiliza/proc/uptimepara calcular el tiempo de actividad del sistema. Puede verlo más claramente en el código fuente uptime.cfuente
/proc/uptimese calcula a partir del tiempo de actividad.En un sistema UNIX estándar (basado en las fuentes originales *),
uptimelee/var/adm/utmpxy comprueba la última vez que se reinicia la entrada.En otras palabras: esto es recuperar la fecha con la que también obtienes
who -by luego calcula el tiempo desde entonces.*)
uptimees un enlace alwprograma y fue introducido por BSD alrededor de 1980.fuente
/var/adm/utmpxen mi sistema. De hecho, ni siquiera/var/admwse usa la implementación original, las cosas son de esta manera, pero Linux generalmente hace las cosas un poco diferentes.uptimecomando, 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.