Langsung ke konten

Arsip

Linux

180 artikel
Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Event Linux inotify Merupakan Aliran Perubahan yang Dapat Kehilangan Data

File descriptor inotify memaparkan aktivitas filesystem sebagai antrean terurut berisi record event, tetapi antrean tersebut bukan riwayat otoritatif atas state namespace. Event identik yang belum dibaca dapat digabungkan, kapasitas antrean terbatas, dan overflow secara eksplisit berarti sejumlah event telah hilang. Proses yang memperlakukan aliran ini sebagai transaction log lengkap dapat mempertahankan state yang tidak lagi sesuai dengan filesystem. Model yang lebih tepat adalah notifikasi perubahan dengan kewajiban pemulihan. Event dapat menjaga cache tetap mutakhir secara inkremental selama alirannya utuh; kondisi tertentu memutus riwayat inkremental tersebut dan menuntut rekonsiliasi terhadap state filesystem.

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.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Edge Triggering Linux epoll Melaporkan Transisi Readiness, Bukan Unit Kerja

Edge Triggering Linux epoll Melaporkan Transisi Readiness, Bukan Unit Kerja Dengan EPOLLET, sebuah interest epoll tidak berperilaku seperti antrean yang berisi satu event untuk setiap byte, paket, koneksi, atau pesan aplikasi. Mekanisme ini melaporkan perubahan status readiness. Setelah sebuah file descriptor berada dalam status ready, pekerjaan tambahan dapat terakumulasi tanpa menghasilkan edge lain yang dapat diandalkan aplikasi. Handler karena itu perlu mengonsumsi pekerjaan yang tersedia sampai operasi nonblocking melaporkan bahwa progres berikutnya akan memblokir.

Rekayasa Perangkat Lunak 17 Sep 2026 8 min read

Edge Triggering epoll Mengubah Readiness Menjadi Kewajiban untuk Menguras

Registrasi epoll edge-triggered dapat berhenti menghasilkan notifikasi sementara byte yang belum dibaca masih tersisa di socket atau pipe. Descriptor tetap dapat digunakan untuk I/O, tetapi event loop sudah mengonsumsi notifikasi yang terkait dengan transisi readiness. Jika handler hanya membaca sebagian data yang tersedia lalu kembali ke epoll_wait(), tidak ada keharusan muncul transisi baru, sehingga byte yang tertunda dapat dibiarkan tanpa diproses tanpa batas. Perilaku ini membuat EPOLLET lebih dari sekadar preferensi notifikasi. Ia mengubah kontrak antara ready list kernel dan application state. Loop level-triggered dapat terus menerima descriptor selama kondisi I/O yang diminta tetap benar. Loop edge-triggered harus mempertahankan cukup local state untuk memperlakukan event yang diterima sebagai kewajiban menguras I/O nonblocking yang saat itu tersedia, biasanya sampai operasi mengembalikan EAGAIN.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Counter eventfd Menggabungkan Notifikasi Sebelum Read

Sebuah eventfd Linux dapat menerima beberapa write sebelum consumer berjalan, tetapi descriptor tersebut tidak menyimpan setiap write sebagai pesan terpisah. Setiap write yang diterima menambahkan nilai unsigned 64-bit ke counter yang dikelola kernel. Tanpa EFD_SEMAPHORE, satu read yang berhasil mengembalikan nilai counter saat itu lalu meresetnya menjadi nol. Perilaku tersebut membuat eventfd menjadi primitive notifikasi berbasis counter, bukan message queue. Readiness menyatakan bahwa counter tidak nol; readiness tidak mempertahankan jumlah operasi write, urutan, atau boundary setiap write.

Rekayasa Perangkat Lunak 17 Sep 2026 3 min read

Cookie Rename inotify Mengorelasikan Event Move Tanpa Membuatnya Atomik

Sebuah rename() di Linux yang diamati melalui inotify dapat menghasilkan dua record dengan cookie nonzero yang sama: IN_MOVED_FROM untuk directory entry lama dan IN_MOVED_TO untuk entry baru. Cookie tersebut mengorelasikan kedua record, tetapi tidak mengubahnya menjadi satu item queue yang atomik. Batas ini penting bagi perangkat lunak yang memelihara indeks pathname, menyinkronkan state direktori, atau mengubah notifikasi filesystem menjadi record perubahan tingkat lebih tinggi. Rename merupakan satu operasi filesystem, sedangkan representasinya di inotify dapat berupa pasangan dengan properti pengelompokan delivery yang lebih lemah.

Keamanan Siber 17 Sep 2026 5 min read

close_range dengan UNSHARE Memisahkan Tabel Descriptor Sebelum Penutupan Massal

Proses Linux multithread dapat mencapai batas yang rumit tepat sebelum execve(): satu thread hendak membuang setiap file descriptor di atas standard input, output, dan error, sementara thread lain masih dapat membuat descriptor pada tabel yang sama. Loop pemanggilan close() menangani nomor descriptor satu per satu, tetapi tidak dengan sendirinya mengubah fakta bahwa tabel tersebut dibagi. close_range() dengan CLOSE_RANGE_UNSHARE menangani race spesifik itu. Kernel terlebih dahulu memberi caller tabel file descriptor yang tidak lagi dibagi dengan pengguna lain dari tabel lama, lalu menerapkan penutupan massal yang diminta pada tabel milik caller. Properti keamanannya berkaitan dengan kepemilikan tabel selama pembersihan, bukan sekadar pengurangan jumlah system call.

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.

Linux 16 Sep 2026 6 min read

Linux cgroup memory.high Mengubah Kelebihan Memori Menjadi Tekanan Reclaim

Sebuah cgroup dapat tetap hidup setelah penggunaan memorinya melewati memory.high. Batas ini tidak berperilaku seperti batas alokasi keras: task di dalam cgroup akan di-throttle dan didorong ke tekanan reclaim yang berat, sementara penggunaan memori masih dapat bertahan di atas nilai yang dikonfigurasi dalam kondisi ekstrem. Perilaku tersebut membuat memory.high berbeda secara material dari memory.max. Yang pertama mengubah penggunaan berlebih menjadi biaya eksekusi dan pekerjaan reclaim. Yang kedua adalah hard limit yang dapat memicu cgroup OOM ketika reclaim tidak mampu menurunkan penggunaan secara memadai.

Teknologi 16 Sep 2026 4 min read

fsync pada File Tidak Memastikan Directory Entry Tersimpan Persisten

fsync() yang berhasil pada regular file tidak, dengan sendirinya, menjamin bahwa directory entry yang memberi nama pada file tersebut sudah mencapai persistent storage. Linux mendokumentasikan boundary ini secara eksplisit: sinkronisasi file mencakup data file dan metadata terkait, sedangkan persistence directory entry yang memuatnya membutuhkan fsync() pada file descriptor untuk direktori tersebut. Perbedaan ini penting ketika software membuat file baru atau mengganti pathname yang sudah ada secara atomik. Konten file dan metadata pathname adalah dua bagian filesystem state yang terpisah, dan crash dapat menguji durability boundary di antara keduanya.

Rekayasa Perangkat Lunak 16 Sep 2026 7 min read

File Descriptor Duplikat Berbagi Offset tetapi Tidak Descriptor Flag

Memanggil dup() tidak membuat posisi stream yang independen. Descriptor yang dikembalikan mengacu pada open file description yang sama dengan descriptor sumber, sehingga seek melalui salah satu descriptor mengubah offset yang terlihat melalui keduanya. Pada saat yang sama, state lokal descriptor seperti flag close-on-exec tetap melekat pada masing-masing descriptor secara terpisah. Pemisahan ini mudah terlewat karena kedua jenis state dimanipulasi melalui file descriptor berupa integer. Integer tersebut hanyalah referensi lokal milik proses. Beberapa descriptor dapat menunjuk ke satu open file description, dan objek bersama itulah yang membawa state yang memengaruhi read, write, seek, serta perubahan status flag.

Teknologi 15 Sep 2026 7 min read

Cache Neighbor ARP Menggunakan Kembali Pemetaan IP-ke-MAC Lokal

Mengirim paket IPv4 melalui jaringan Ethernet memerlukan dua jenis alamat yang berbeda. Layer IP memilih alamat IPv4 next hop, sedangkan frame Ethernet memerlukan alamat MAC tujuan yang mengidentifikasi next hop pada link lokal. Address Resolution Protocol (ARP) menghubungkan kedua layer tersebut. Host dapat menanyakan alamat MAC yang sesuai dengan alamat IPv4 lokal, menerima balasan, lalu menyimpan pemetaan yang dihasilkan. Menyimpan hasil itu dalam cache neighbor menghindari broadcast pertanyaan yang sama sebelum setiap paket.