No meu sistema, ele recebe o tempo de atividade 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
Na página de manual do processo :
/proc/uptime This file contains two numbers: the uptime of the system (seconds), and the amount of time spent in idle process (seconds).
O sistema de arquivos proc contém um conjunto de pseudo-arquivos. Esses não são arquivos reais, eles apenas se parecem com arquivos, mas eles contêm valores que são fornecidos diretamente pelo kernel. Toda vez que você lê um arquivo, como /proc/uptime
, seu conteúdo é regenerado na hora. O sistema de arquivos proc é uma interface para o kernel.
No código-fonte do kernel linux do arquivo fs/proc/uptime.c
na linha 49 , você vê uma chamada de função:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
Isso cria uma entrada do sistema de arquivos proc chamada uptime
(o procfs é geralmente montado sob /proc
) e associa uma função a ele, que define operações válidas de arquivo nesse pseudo arquivo e as funções associadas a ele. Em caso de tempo de atividade, são apenas read()
e open()
operações. No entanto, se você rastrear as funções de volta, você acabará aqui , onde o o tempo de atividade é calculado.
Internamente, há uma interrupção do temporizador que atualiza periodicamente o tempo de atividade do sistema (além de outros valores). O intervalo, no qual o temporizador-intercalar pulsa, é definido pelo pré-processador-macro HZ
, cujo valor exato é definido no kernel config e aplicado em tempo de compilação.
O tempo ocioso e o número de ciclos da CPU, combinados com a frequência HZ
(ciclos por segundo), podem ser calculados em um número (de segundos) desde a última inicialização.
Para responder à sua pergunta: Quando o "tempo de atividade" começa a contar?
Como o tempo de atividade é um valor interno do kernel, que ativa todos os ciclos, ele começa a contar quando o kernel é inicializado. Isto é, quando o primeiro ciclo terminou. Mesmo antes de qualquer coisa ser montada, diretamente depois que o gerenciador de inicialização dá o controle para a imagem do kernel.