GNU/Linux >> Belajar Linux >  >> Linux

Apa keakuratan penghitung waktu interval di Linux?

Anda benar untuk tidak mengharapkan penghitung waktu menyala lebih awal - dan ternyata tidak. Yang jelas pengaktifan lebih awal adalah karena Anda tidak mengukur waktu sejak penghitung waktu sebelumnya berakhir - Anda mengukur waktu sejak gettimeofday() sebelumnya panggilan. Jika ada penundaan antara penghitung waktu kedaluwarsa dan proses benar-benar dijadwalkan, Anda akan melihat gettimeofday() ini terlambat, dan yang berikutnya berjalan lebih awal dengan jumlah yang sama .

Alih-alih mencatat perbedaan antara gettimeofday() berikutnya panggilan, coba catat waktu absolut yang dikembalikan, lalu bandingkan waktu yang dikembalikan dengan N * 100 md setelah waktu awal.

Jika Anda ingin PREEMPT_RT untuk membantu Anda, Anda perlu menyetel kebijakan penjadwal waktu nyata untuk program pengujian Anda (SCHED_FIFO atau SCHED_RR ), yang membutuhkan root.


Saya membuat beberapa perubahan pada kode Anda, dan terutama mengganti timer sebagai ikuti dan jalankan proses sebagai kemajuan RT (SCHED_FIFO).

setitimer()      ->    timer_create()/timer_settime()
gettimeofday()   ->    clock_gettime()

testbed saya adalah CPU i9-9900k dan Linux yang ditambal PREEMPT-RT dengan kernel 5.0.21. Interval waktu pengatur waktu adalah 1 md dan program berjalan sekitar 10 jam untuk menghasilkan hasil berikut.

Saya juga menjalankan Cyclictest (berdasarkan nanosleep() ) di mesin saya, dan ini menunjukkan kontrol latensi yang lebih baik (latensi maksimum kurang dari 15 us). Jadi, Menurut pendapat saya, jika Anda ingin mewujudkan pengatur waktu resolusi tinggi sendiri, utas RT mandiri yang menjalankan nanosleep pada inti yang terisolasi dapat membantu. Saya baru dalam sistem RT, komentar dipersilakan.


Linux
  1. Apa VPS Terbaik:Windows atau Linux?

  2. Apa tujuan dari grup "roda" di Linux?

  3. Apa tujuan dari file .bashrc di Linux?

  1. Apa yang setara dengan getch() &getche() di Linux?

  2. Apa yang setara dengan Win32 API di linux?

  3. Apa definisi sesi di linux?

  1. Apa yang membuat Linux menjadi OS yang berkelanjutan

  2. Apa yang membuat komunitas Linux istimewa?

  3. Apa urutan default dari jenis Linux?