GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan antara CLOCK_REALTIME dan CLOCK_MONOTONIC?

CLOCK_REALTIME dipengaruhi oleh NTP, dan dapat bergerak maju dan mundur. CLOCK_MONOTONIC tidak, dan maju dengan satu tik per tik.


Buku Robert Love Pemrograman Sistem LINUX Edisi ke-2 , secara khusus membahas pertanyaan Anda di awal Bab 11, hal 363:

Aspek penting dari sumber waktu monoton BUKAN nilai saat ini, tetapi jaminan bahwa sumber waktu meningkat secara linier, dan karenanya berguna untuk menghitung perbedaan waktu antara dua pengambilan sampel

Meskipun demikian, saya yakin dia berasumsi bahwa proses berjalan pada instance OS yang sama, jadi Anda mungkin ingin menjalankan kalibrasi berkala agar dapat memperkirakan penyimpangan.


CLOCK_REALTIME mewakili tebakan terbaik mesin untuk jam dinding saat ini, waktu hari ini. Seperti yang dikatakan Ignacio dan MarkR, ini berarti CLOCK_REALTIME dapat melompat maju dan mundur saat jam waktu hari sistem diubah, termasuk oleh NTP.

CLOCK_MONOTONIC mewakili waktu jam dinding mutlak yang telah berlalu sejak beberapa titik tetap yang berubah-ubah di masa lalu. Ini tidak terpengaruh oleh perubahan pada jam waktu sistem.

Jika Anda ingin menghitung waktu yang telah berlalu antara dua peristiwa yang diamati pada satu mesin tanpa intervensi reboot, CLOCK_MONOTONIC adalah pilihan terbaik.

Perhatikan bahwa di Linux, CLOCK_MONOTONIC tidak mengukur waktu yang dihabiskan dalam penangguhan, meskipun menurut definisi POSIX seharusnya. Anda dapat menggunakan CLOCK_BOOTTIME khusus Linux untuk jam monoton yang terus berjalan selama penangguhan.


Kutipan POSIX 7

POSIX 7 menentukan keduanya di http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:

CLOCK_REALTIME :

Jam ini mewakili jam yang mengukur waktu nyata untuk sistem. Untuk jam ini, nilai yang dikembalikan oleh clock_gettime() dan ditentukan oleh clock_settime() mewakili jumlah waktu (dalam detik dan nanodetik) sejak Epoch.

CLOCK_MONOTONIC (fitur opsional):

Untuk jam ini, nilai yang dikembalikan oleh clock_gettime() mewakili jumlah waktu (dalam detik dan nanodetik) sejak titik yang tidak ditentukan di masa lalu (misalnya, waktu mulai sistem, atau Zaman). Poin ini tidak berubah setelah waktu start-up sistem. Nilai jam CLOCK_MONOTONIC tidak dapat disetel melalui clock_settime().

clock_settime() memberikan petunjuk penting:sistem POSIX dapat mengubah CLOCK_REALITME secara sewenang-wenang dengan itu, jadi jangan mengandalkan itu mengalir baik terus menerus maupun maju. NTP dapat diimplementasikan menggunakan clock_settime() , dan hanya dapat memengaruhi CLOCK_REALTIME .

Implementasi kernel Linux tampaknya mengambil waktu boot sebagai zaman untuk CLOCK_MONOTONIC :Titik awal untuk CLOCK_MONOTONIC


Linux
  1. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  2. Perbedaan Antara Perpipaan Dan Ekspansi Perintah?

  3. Perbedaan Antara Pengguna Sudo Dan Pengguna Root?

  1. Perbedaan antara GNUWin32 dan cygwin

  2. Perbedaan antara ${} dan $() di Bash

  3. perbedaan antara cgroup dan namespace

  1. Perbedaan Antara Shell Login dan Shell Non-login?

  2. Perbedaan Antara 2>&-, 2>/dev/null, |&, &>/dev/null Dan>/dev/null 2>&1?

  3. Apa Perbedaan Antara Sudo Su – Dan Sudo Su —?