Langsung ke konten

Arsip

Epoll

9 artikel
Teknologi 23 Sep 2026 6 min read

Mode Readiness epoll Mengubah Cara Event Loop Menguras File Descriptor

epoll di Linux memungkinkan satu thread menunggu perubahan readiness pada banyak file descriptor tanpa memindai seluruh descriptor pada setiap iterasi. Interface ini umum dipakai pada server jaringan, proxy, runtime, dan program lain yang mempertahankan banyak socket aktif. Mode registrasinya berpengaruh langsung pada pola kerja event loop. Operasi level-triggered terus melaporkan descriptor selama kondisi terkait masih ready. Operasi edge-triggered melaporkan transisi readiness dan mengharuskan aplikasi mengonsumsi pekerjaan yang tersedia sampai descriptor akan memblokir.

Linux 23 Sep 2026 4 min read

EPOLLEXCLUSIVE Membatasi Wakeup Antar-instance epoll

EPOLLEXCLUSIVE Membatasi Wakeup Antar-instance epoll EPOLLEXCLUSIVE mengubah distribusi event ketika beberapa instance epoll mendaftarkan file description target yang sama. Tanpa flag ini, sebuah event readiness dapat membangunkan waiter yang terkait dengan setiap instance epoll yang berminat. Dengan registrasi eksklusif, Linux dapat membatasi fan-out tersebut dan mengurangi wakeup yang redundan. Flag ini tidak membuat delivery menjadi single-consumer, tidak menetapkan kepemilikan target, dan tidak menggantikan koordinasi pada level aplikasi. Kontraknya lebih sempit: di antara instance epoll yang mendaftarkan target dengan EPOLLEXCLUSIVE, satu atau lebih instance menerima event untuk sebuah wakeup, bukan mewajibkan semuanya menerima event tersebut.

Linux 22 Sep 2026 5 min read

signalfd Mengubah Signal yang Diblokir Menjadi Event yang Dapat Dibaca

Signal Linux biasanya memotong alur thread melalui delivery asinkron. signalfd() menyediakan boundary berbeda untuk signal terpilih: signal tetap diblokir pada thread yang relevan, lalu instance yang pending dikonsumsi dengan membaca file descriptor. Mekanisme signal tidak berubah menjadi byte stream. Kernel tetap memelihara state signal serta aturan delivery process-directed dan thread-directed. signalfd menambahkan interface file descriptor untuk menerima signal dari set yang dikonfigurasi. Blocking dan mask descriptor adalah state yang terpisah Sebuah signalfd memiliki signal-set mask yang menentukan signal mana yang dapat diterimanya. Mask tersebut tidak memblokir signal pada thread. Pemakaian normal karena itu memasangkan pembuatan descriptor dengan operasi signal mask.

Linux 19 Sep 2026 5 min read

PID File Descriptor Memberi Linux Referensi Stabil untuk Siklus Hidup Proses

PID numerik dapat menunjuk satu proses saat ini dan proses lain pada waktu berikutnya. PID file descriptor di Linux mengubah batas tersebut: pidfd adalah file descriptor yang merujuk sebuah task, sehingga operasi proses dapat tetap terikat pada objek kernel yang dituju tanpa mengulang pencarian berdasarkan PID numerik. Perbedaan ini relevan bagi supervisor, service manager, container runtime, dan perangkat lunak lain yang mengamati siklus hidup proses. PID berguna sebagai nama, tetapi bukan capability yang tahan terhadap penggunaan ulang. Pidfd dapat dipertahankan selama jeda antara identifikasi proses dan operasi terhadap proses tersebut.

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

epoll Edge-Triggered Memerlukan Drain Readiness hingga EAGAIN

Dengan EPOLLET, event loop dapat menerima satu notifikasi, membaca hanya sebagian data yang tersedia, lalu menunggu tanpa batas meskipun masih ada byte yang belum dibaca di buffer socket. Descriptor tetap ready, tetapi tidak ada transisi readiness baru yang memicu edge berikutnya. Perilaku tersebut membuat epoll edge-triggered menjadi kontrak antara semantik notifikasi dan I/O nonblocking. Event menyatakan bahwa readiness berubah; event bukan janji bahwa kernel akan terus mengulang notifikasi yang sama sampai aplikasi menyelesaikan pekerjaannya.

Linux 18 Sep 2026 4 min read

EPOLLEXCLUSIVE Membatasi Wakeup pada epoll Instance yang Bersaing

Satu socket yang ready dapat membangunkan beberapa thread ketika setiap thread menunggu pada epoll instance berbeda yang memantau socket tersebut. Linux menyediakan EPOLLEXCLUSIVE untuk mempersempit fan-out wakeup itu: di antara epoll instance yang mendaftarkan target dengan flag tersebut, sebuah readiness event membangunkan satu atau lebih instance, bukan semuanya. Batas semantiknya sengaja lebih lemah daripada “tepat satu waiter.” EPOLLEXCLUSIVE mengubah seleksi notifikasi antar-epoll instance. Flag ini tidak memindahkan kepemilikan file descriptor, tidak menserialkan seluruh I/O, dan tidak menjamin hanya satu thread yang dapat melihat pekerjaan yang berguna.

Linux 17 Sep 2026 4 min read

SO_RCVLOWAT Menaikkan Ambang Readability pada Socket Linux

Socket Linux dengan SO_RCVLOWAT di atas satu byte dapat memiliki data dalam antrean sementara poll(), select(), atau epoll belum melaporkan readiness baca normal. Sejak Linux 2.6.28, antarmuka readiness tersebut menghormati receive low-water mark yang dikonfigurasi. Opsi ini mengubah ambang yang terkait dengan readiness penerimaan normal. Opsi ini tidak menetapkan batas pesan, tidak mencadangkan ruang receive buffer, dan tidak menjamin operasi penerimaan berikutnya mengembalikan tepat sejumlah byte sesuai nilai konfigurasi. Readability dapat memerlukan lebih dari satu byte dalam antrean Readiness penerimaan socket biasanya diamati dengan low-water mark bawaan sebesar satu byte. Pada kondisi ini, data biasa yang sudah masuk antrean cukup untuk memenuhi bagian volume data dari kondisi readable.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

EPOLLET Melaporkan Transisi Readiness, Bukan Pengosongan Buffer

Dengan EPOLLET, sebuah file descriptor dapat tetap memiliki data yang belum dibaca setelah event readiness-nya sudah dikonsumsi. Pemanggilan epoll_wait() berikutnya tidak wajib melaporkan descriptor itu lagi hanya karena state readable sebelumnya masih bertahan. Perilaku ini merupakan batas utama edge-triggered epoll: notifikasi mengikuti perubahan readiness, sedangkan objek I/O di bawahnya mempertahankan state sendiri secara terpisah. Readiness dan pengiriman event merupakan state terpisah Sebuah epoll instance memiliki interest list dan ready list. Registrasi melalui epoll_ctl() menentukan open file description yang dipantau dan kelas event yang relevan. epoll_wait() mengembalikan entry yang sudah mencapai ready list.

Linux 16 Sep 2026 4 min read

Readiness epoll Edge-Triggered Memerlukan Draining

Consumer epoll edge-triggered dapat terblokir ketika data yang belum dibaca masih tersimpan di buffer. Kegagalan ini muncul ketika sebuah event dikonsumsi, hanya sebagian input yang tersedia dibaca, lalu event loop kembali ke epoll_wait() dengan harapan menerima notifikasi lain untuk byte yang tersisa. Perilaku ini mengikuti langsung semantik EPOLLET. Notifikasi edge-triggered melaporkan perubahan readiness, bukan terus-menerus melaporkan kondisi ready. Setelah sebuah transisi readiness menghasilkan event, membiarkan file descriptor tetap ready tidak dengan sendirinya menciptakan transisi baru.