Mój komputer mówi:
$ uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
A jeśli sprawdzę last
, zobaczę:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
A potem sprawdzam:
$ ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
Potem widzę w /var/log/syslog
pierwszym wierszu dzisiejszego słowa:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
Więc wszystko wydaje się zbieżne w 8:34
czasie, gdy moja maszyna została uruchomiona.
Zastanawiam się jednak: jaki jest dokładny czas uptime
? Czy uptime
proces, który uruchamia i sprawdza jakiś plik, czy jest to coś na sprzęcie?
Używam Ubuntu 14.04.
linux
linux-kernel
uptime
fedorqui
źródło
źródło
systemd-analyze blame
zawiera także czas przed inicjacją jądra, przynajmniej na uefi.Odpowiedzi:
W moim systemie czas przestoju jest uzyskiwany z
/proc/uptime
:Ze strony proc :
System plików proc zawiera zestaw pseudo plików. To nie są prawdziwe pliki, po prostu wyglądają jak pliki, ale zawierają wartości dostarczane bezpośrednio przez jądro. Za każdym razem, gdy czytasz plik, na przykład
/proc/uptime
jego zawartość jest regenerowana w locie. System plików proc jest interfejsem do jądra.W kodzie źródłowym jądra linuksa pliku
fs/proc/uptime.c
w wierszu 49 widać wywołanie funkcji:Tworzy to pozycję systemu plików proc o nazwie
uptime
(procfs jest zwykle montowany pod/proc
) i kojarzy z nią funkcję, która definiuje prawidłowe operacje na pliku na tym pseudo pliku i funkcje z nimi związane. W przypadku przestojów jest to po prosturead()
iopen()
operacji. Jeśli jednak prześledzisz funkcje z powrotem, skończysz tutaj , gdzie obliczany jest czas sprawności.Wewnętrznie występuje przerwa czasowa, która okresowo aktualizuje czas pracy systemu (oprócz innych wartości). Interwał, w którym tyka przerwanie timera, jest definiowany przez makro preprocesora
HZ
, którego dokładna wartość jest zdefiniowana w pliku konfiguracyjnym jądra i stosowana w czasie kompilacji.Czas bezczynności i liczbę cykli procesora w połączeniu z częstotliwością
HZ
(cykli na sekundę) można obliczyć w liczbie (sekundach) od ostatniego uruchomienia.Aby odpowiedzieć na twoje pytanie: od kiedy zaczyna się „uptime”?
Ponieważ czas działania jest wewnętrzną wartością jądra, która zaznacza się w każdym cyklu, zaczyna się odliczać po zainicjowaniu jądra. Oznacza to, że pierwszy cykl się skończył. Nawet zanim cokolwiek zostanie zamontowane, bezpośrednio po tym, jak bootloader daje kontrolę nad obrazem jądra.
źródło
O ile wiem,
uptime
używa/proc/uptime
do obliczania czasu pracy systemu. Widać to wyraźniej w kodzie źródłowym uptime.cźródło
/proc/uptime
jest obliczany na podstawie czasu pracy.W standardowym systemie UNIX (opartym na oryginalnych źródłach *)
uptime
odczytuje/var/adm/utmpx
i sprawdza ostatni wpis ponownego uruchomienia komputera.Innymi słowy: pobiera datę, którą również otrzymujesz,
who -b
a następnie oblicza czas od tego czasu.*)
uptime
to link dow
programu, który został wprowadzony przez BSD około 1980 roku.źródło
/var/adm/utmpx
w moim systemie. W rzeczywistości nawet nie/var/adm
w
używana jest oryginalna implementacja, wszystko działa w ten sposób, ale Linux zwykle robi to nieco inaczej.uptime
polecenia, nie mówiąc już o tym, jak powinien zostać zaimplementowany. AFAICT, OS / X nie ma również / var / adm / utmpx. Niektóre systemy Linux otrzymały certyfikat zgodności z Unixem.