Komputer saya mengatakan:
$ uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
Dan jika saya periksa last
saya melihat:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
Dan kemudian saya periksa:
$ ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
Lalu saya melihat di /var/log/syslog
baris pertama hari ini adalah:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
Jadi semua sepertinya menyatu 8:34
saat mesin saya boot.
Namun, saya bertanya-tanya: berapa tepatnya waktu yang uptime
digunakan? Apakah uptime
proses yang meluncurkan dan memeriksa beberapa file atau ada sesuatu pada perangkat keras?
Saya menjalankan Ubuntu 14.04.
linux
linux-kernel
uptime
fedorqui
sumber
sumber
systemd-analyze blame
juga mengandung waktu sebelum Kernel init, setidaknya di uefi.Jawaban:
Di sistem saya ia mendapat uptime dari
/proc/uptime
:Dari halaman proc :
Sistem file proc berisi satu set file pseudo. Itu bukan file nyata, mereka hanya terlihat seperti file, tetapi mereka berisi nilai-nilai yang disediakan langsung oleh kernel. Setiap kali Anda membaca file, seperti
/proc/uptime
, isinya dibuat ulang dengan cepat. Sistem file proc adalah antarmuka ke kernel.Dalam kode sumber kernel linux file
fs/proc/uptime.c
di baris 49 , Anda melihat panggilan fungsi:Ini menciptakan entri sistem file proc yang disebut
uptime
(procfs biasanya di-mount di bawah/proc
), dan mengaitkan suatu fungsi padanya, yang mendefinisikan operasi file yang valid pada file pseudo itu dan fungsi yang terkait dengannya. Dalam hal uptime, itu hanyaread()
danopen()
operasi. Namun, jika Anda melacak kembali fungsi Anda akan berakhir di sini , di mana uptime dihitung.Secara internal, ada timer-interupt yang memperbarui uptime sistem secara berkala (selain nilai-nilai lainnya). Interval, di mana timer-interupt ticks, ditentukan oleh preprocessor-macro
HZ
, yang nilai pastinya didefinisikan dalam file konfigurasi kernel dan diterapkan pada waktu kompilasi.Waktu idle dan jumlah siklus CPU, dikombinasikan dengan frekuensi
HZ
(siklus per detik) dapat dihitung dalam jumlah (detik) sejak boot terakhir.Untuk menjawab pertanyaan Anda: Kapan "waktu aktif" mulai dihitung?
Karena uptime adalah nilai internal kernel, yang menandai setiap siklus, ia mulai menghitung ketika kernel telah diinisialisasi. Yaitu, ketika siklus pertama telah berakhir. Bahkan sebelum apa pun di-mount, langsung setelah bootloader memberi kendali pada gambar kernel.
sumber
Selama saya tahu,
uptime
digunakan/proc/uptime
untuk menghitung waktu kerja sistem. Anda dapat melihatnya dengan lebih jelas di kode sumber uptime.csumber
/proc/uptime
dihitung dari uptime.Pada sistem UNIX standar (berdasarkan sumber asli *),
uptime
baca/var/adm/utmpx
dan periksa untuk terakhir kali entri reboot.Dengan kata lain: ini mengambil tanggal yang Anda dapatkan bersama
who -b
dan kemudian menghitung waktu sejak itu.*)
uptime
adalah tautan kew
program dan diperkenalkan oleh BSD sekitar tahun 1980.sumber
/var/adm/utmpx
di sistem saya. Bahkan, bahkan tidak/var/adm
w
implementasi aslinya digunakan, dengan cara ini, tetapi Linux biasanya melakukan hal-hal yang sedikit berbeda.uptime
perintah, apalagi bagaimana itu harus diterapkan. AFAICT, OS / X tidak memiliki / var / adm / utmpx. Dan beberapa sistem berbasis Linux telah menerima sertifikasi kepatuhan Unix.