Langsung ke konten

Arsip

Timer

6 artikel
Linux 23 Sep 2026 4 min read

TFD_TIMER_CANCEL_ON_SET Mengubah Lompatan Clock Realtime Menjadi ECANCELED

Timer absolut yang terikat ke CLOCK_REALTIME memiliki ketergantungan yang tidak dimiliki deadline monotonic: administrator, layanan sinkronisasi, atau proses berprivilege dapat memindahkan wall clock secara diskontinu ketika timer masih aktif. Linux timerfd dapat mengekspos kejadian itu secara eksplisit. Dengan TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET, perubahan clock yang memenuhi syarat membuat read() saat ini atau berikutnya pada descriptor timer gagal dengan ECANCELED. Perilaku ini memisahkan dua kejadian yang mudah tercampur: tercapainya waktu wall clock yang dijadwalkan dan tidak berlakunya basis clock yang dipakai saat jadwal dibuat.

Linux 19 Sep 2026 4 min read

timerfd Membaca Jumlah Expiration Periodik

Timer periodik dapat mencapai expiration beberapa kali sebelum event loop yang sibuk kembali mendapat waktu CPU. Linux timerfd tidak mereduksi keterlambatan itu menjadi notifikasi “timer aktif” semata. read() yang berhasil mengembalikan counter unsigned 64-bit berisi jumlah expiration yang terakumulasi sejak timer diaktifkan atau sejak read sebelumnya yang berhasil. Counter tersebut mengubah semantik penanganan timer yang terlambat. Readiness menyatakan setidaknya satu expiration sedang tertunda; nilai yang dibaca dari descriptor menyatakan berapa banyak periode yang telah berlalu.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

timerfd Mengubah Ekspirasi Timer Menjadi Readiness Descriptor

Sebuah timerfd menjadi readable setelah timernya mengalami ekspirasi. Notifikasi ini bukan pemanggilan signal handler dan bukan pesan byte stream. Linux mencatat ekspirasi yang pending pada objek timer lalu mengekspos status tersebut melalui file descriptor, sehingga timer dapat berada pada batas readiness yang sama dengan socket, pipe, dan descriptor lain. Interface ini lebih dari sekadar penggantian mekanisme notifikasi. Pilihan clock menetapkan domain waktu, flag arming menetapkan apakah deadline bersifat relatif atau absolut, dan setiap read yang berhasil melaporkan jumlah ekspirasi yang terakumulasi sejak read sukses sebelumnya atau konfigurasi ulang timer.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

timerfd Menghitung Ekspirasi melalui Read Descriptor

timerfd periodik dapat mengalami beberapa ekspirasi sebelum user space membacanya. read() sukses berikutnya tidak hanya melaporkan tick terbaru: operasi itu mengembalikan nilai unsigned 64-bit yang berisi jumlah ekspirasi sejak read sukses sebelumnya, atau sejak timer dikonfigurasi jika belum ada read yang selesai. Perilaku ini menjadikan timer sebagai objek event loop tanpa mengubah setiap ekspirasi menjadi signal. Descriptor menjadi readable ketika sedikitnya satu ekspirasi tertunda, dan descriptor yang sama dapat dipantau oleh poll(), select(), atau epoll() bersama socket, pipe, dan sumber event berbasis descriptor lainnya.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Read pada Linux timerfd Melaporkan Akumulasi Expiration

timerfd periodik pada Linux dapat mengalami beberapa expiration sebelum event loop membacanya. read() berikutnya yang berhasil tidak mengembalikan satu record untuk setiap wakeup. Operasi itu mengembalikan satu uint64_t dalam byte order host yang berisi jumlah expiration yang terakumulasi sejak timer terakhir di-arm atau sejak read berhasil sebelumnya. Count tersebut menjadikan readiness timerfd sebagai notifikasi bahwa status timer dapat dikonsumsi, bukan pemetaan satu-ke-satu antara wakeup scheduler dan periode timer. Read mengonsumsi count expiration yang terakumulasi timerfd yang dibuat dengan timerfd_create() merepresentasikan satu timer kernel melalui file descriptor. timerfd_settime() menetapkan expiration awal pada it_value dan, untuk timer periodik, it_interval yang bukan nol.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Linux timerfd Membuat Periode Terlewat Terlihat sebagai Hitungan Expiration

Linux timerfd periodik dapat mengalami beberapa expiration sebelum event loop kembali berjalan. read() berhasil berikutnya tidak sekadar melaporkan bahwa timer telah aktif; operasi itu mengembalikan hitungan unsigned 64-bit untuk expiration yang terakumulasi sejak read berhasil sebelumnya atau sejak timer terakhir dikonfigurasi. Dispatch yang tertunda dengan demikian terlihat sebagai hitungan, bukan rangkaian record timer yang diantrekan. Kontrak tersebut memisahkan jadwal timer dari eksekusi consumer. Sebuah proses dapat kehilangan jatah CPU untuk sementara, event loop dapat menghabiskan waktu pada descriptor lain, atau beberapa periode dapat berlalu sebelum timerfd dikonsumsi. Kernel melacak expiration, sedangkan kode aplikasi menentukan arti beberapa expiration bagi pekerjaan yang terkait dengannya.