Langsung ke konten

Arsip

Linux

180 artikel
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.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

EPOLLEXCLUSIVE Membatasi Wakeup di Antara Instance epoll yang Bersaing

EPOLLEXCLUSIVE mengubah waiter epoll mana yang dibangunkan saat beberapa instance epoll memantau target yang sama. Tanpa flag ini, sebuah readiness event dapat dikirim ke setiap instance epoll yang terpasang. Dengan registrasi eksklusif, Linux dapat membangunkan subset yang lebih kecil sehingga scheduling redundan berkurang pada konfigurasi yang jika tidak demikian dapat memicu thundering herd. Flag ini mengubah distribusi wakeup. Ia tidak memberikan kepemilikan permanen atas target descriptor, tidak menserialisasi I/O, dan tidak menjamin tepat satu thread aplikasi mengonsumsi setiap unit pekerjaan.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

CLOSE_RANGE_UNSHARE Mengisolasi Pembersihan Tabel Descriptor

Sebuah thread yang bersiap melewati batas execve() dapat perlu menghapus seluruh file descriptor di atas sekumpulan kecil descriptor yang dipertahankan ketika thread lain masih memakai tabel descriptor yang sama. Penutupan descriptor satu per satu membuka race: thread lain dapat mengalokasikan descriptor baru ke interval tersebut saat pembersihan masih berjalan. Di Linux, close_range() dengan CLOSE_RANGE_UNSHARE mengubah batas pemakaian bersama tabel sebelum operasi range diterapkan. Perilaku ini penting karena nomor file descriptor hanya merupakan indeks pada tabel descriptor proses. Dengan CLONE_FILES, beberapa task dapat merujuk tabel yang sama, sehingga penutupan oleh satu task mengubah visibilitas descriptor bagi seluruh task yang berbagi tabel tersebut. CLOSE_RANGE_UNSHARE memberi task pemanggil tabel descriptor privat sebagai bagian dari operasi.

Linux 18 Sep 2026 5 min read

close_range Mengontrol Pewarisan Descriptor pada Batas exec

Sebuah proses yang bersiap memanggil execve() dapat memiliki ratusan atau ribuan file descriptor terbuka, sementara program baru hanya seharusnya mewarisi beberapa descriptor tertentu. Menutup descriptor satu per satu menimbulkan biaya pencatatan sekaligus masalah concurrency: thread lain dapat mengalokasikan descriptor ketika loop pembersihan masih berjalan. Linux close_range() memindahkan operasi tersebut ke batas tabel descriptor. Caller menentukan rentang angka inklusif dan meminta kernel menutup descriptor dalam rentang itu atau menandainya close-on-exec. Dengan CLOSE_RANGE_UNSHARE, caller dapat lebih dahulu memisahkan tabel descriptornya dari thread atau proses yang berbagi tabel tersebut.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

userfaultfd Memindahkan Resolusi Missing Page ke User Space

Sebuah thread dapat mengakses alamat virtual yang valid lalu berhenti sebelum akses selesai karena page tersebut belum memiliki backing yang present. Pada range yang didaftarkan dengan UFFDIO_REGISTER_MODE_MISSING, Linux dapat melaporkan fault itu melalui userfaultfd alih-alih menyelesaikannya sepenuhnya di kernel. Manager di user space kemudian menentukan isi page yang menjadi terlihat sebelum akses yang tertahan dilanjutkan. Mekanisme ini memindahkan kendali atas satu bagian penanganan page fault. Kernel tetap mendeteksi fault, memvalidasi virtual memory area, menahan eksekusi yang mengalami fault, dan memasang mapping melalui antarmuka UFFDIO_*. User space memperoleh kendali atas isi dan waktu resolusi untuk fault yang terdaftar.

Linux 17 Sep 2026 4 min read

Truncating File yang Dipetakan Dapat Memicu SIGBUS

Sebuah process dapat tetap memiliki rentang address mmap() yang valid setelah operasi lain mengecilkan backing file, lalu menerima SIGBUS ketika menyentuh mapped page yang berada di luar akhir file baru. Mapping-nya sendiri tidak hilang. Backing object-nya tidak lagi mencakup setiap page yang semula direferensikan oleh virtual mapping. Boundary ini mudah terlewat karena mapping lifetime dan file size adalah state yang terpisah. Menutup file descriptor awal tidak membatalkan mapping yang sudah terbentuk, dan mengecilkan file tidak bertindak seperti munmap() pada setiap process yang memetakannya.

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.

Linux 17 Sep 2026 5 min read

TCP_NODELAY Menonaktifkan Penggabungan Nagle pada Socket

Socket TCP dapat menahan write kecil alih-alih langsung mengirimkannya ketika data sebelumnya belum menerima acknowledgment. Perilaku ini berasal dari penggabungan Nagle: aliran segmen TCP kecil dibatasi dengan membiarkan data yang masih outstanding memengaruhi pengiriman byte yang baru masuk antrean. Di Linux, pengaturan TCP_NODELAY menonaktifkan aturan penggabungan tersebut untuk socket. Write kecil menjadi memenuhi syarat untuk segera dikirim, dengan tetap tunduk pada bagian lain dari stack TCP, congestion control, flow control, keadaan antrean, dan penjadwalan perangkat.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

SO_REUSEPORT Memindahkan Distribusi Koneksi TCP ke Kernel

Dengan SO_REUSEPORT, beberapa socket TCP Linux dapat listen pada alamat lokal dan port yang sama secara bersamaan. Koneksi masuk ditetapkan ke salah satu anggota reuseport group sebelum aplikasi memanggil accept(). Aplikasi tidak lagi membutuhkan satu listening socket bersama sebagai satu-satunya titik handoff antara network stack dan banyak worker. Perubahan ini lebih dari sekadar kelayakan bind(). Distribusi koneksi dipindahkan ke kernel dan setiap listener memiliki identitas socket serta jalur accept sendiri. Arsitektur yang dihasilkan memiliki sifat queueing, lifecycle, dan routing yang berbeda dari desain ketika banyak worker berebut satu listening socket.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

SO_REUSEPORT Membentuk Grup Socket dengan Seleksi oleh Kernel

Beberapa socket Linux dapat melakukan bind ke alamat lokal yang sama ketika setiap socket mengaktifkan SO_REUSEPORT sebelum bind(). Traffic masuk kemudian ditetapkan ke salah satu anggota reuseport group, bukan dikirim ke setiap socket. Alamat bersama tersebut menjadi batas seleksi oleh kernel, bukan endpoint broadcast. Perilaku ini mendukung receive loop atau accept loop yang berdiri sendiri tanpa memaksa seluruh pekerjaan melewati satu listening descriptor. Konsekuensinya juga jelas: keanggotaan grup dan kebijakan seleksi menentukan socket yang menerima packet atau connection.

Linux 17 Sep 2026 6 min read

SO_REUSEPORT Membagi Trafik ke Beberapa Grup Socket

SO_REUSEPORT mengubah satu endpoint lokal dari binding satu socket menjadi sebuah grup socket. Di Linux, beberapa socket TCP atau UDP dapat melakukan bind ke alamat lokal yang sama ketika semua socket yang ikut mengaktifkan opsi ini sebelum bind() dan kredensial binding memenuhi aturan reuse dari kernel. Perilaku ini berbeda dari sekadar melonggarkan pemeriksaan konflik alamat. Trafik yang masuk juga harus diarahkan ke salah satu anggota grup. Batas pemilihan ini memengaruhi arsitektur listener, isolasi antrean, restart proses, penempatan flow UDP, dan desain apa pun yang menganggap satu port selalu identik dengan satu socket.

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

signalfd Mengubah Sinyal Pending Menjadi Record yang Dapat Dibaca

Sinyal yang masuk ke mask signalfd dapat membuat file descriptor menjadi readable alih-alih menjalankan handler asinkron, selama sinyal tersebut diblokir dari delivery biasa. read() yang berhasil kemudian mengonsumsi status sinyal pending dan mengembalikan satu atau beberapa record signalfd_siginfo. Perubahan ini mengganti antarmuka penerimaan untuk sinyal terpilih, tetapi tidak mengganti semantik signal Linux. Signal mask, delivery yang diarahkan ke process atau thread, penggabungan standard signal, serta status khusus SIGKILL dan SIGSTOP tetap menentukan batas perilaku descriptor.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

signalfd Mengonsumsi Signal yang Diblokir melalui Read Descriptor

Sebuah signalfd di Linux menjadi readable ketika signal yang dipilih oleh mask miliknya berstatus pending bagi konteks pembaca. read() yang berhasil tidak sekadar mengamati status tersebut: operasi itu mengonsumsi kemunculan signal yang dikembalikan dan menghapusnya dari status pending. Perilaku ini memberi signal jalur konsumsi berbasis descriptor. Mekanisme tersebut tidak mengubah subsistem signal menjadi byte stream, dan tidak menggantikan signal mask yang mengendalikan delivery biasa. Mask descriptor memilih signal pending yang memenuhi syarat signalfd() mengaitkan sebuah signal set dengan file descriptor. Ketika argumen pertama bernilai -1, Linux membuat objek signalfd baru. Jika descriptor signalfd yang sudah ada diberikan, mask pada objek tersebut diganti.

Rekayasa Perangkat Lunak 17 Sep 2026 7 min read

Shared Ring io_uring Menjadikan Memory Ordering Bagian dari ABI

Queue io_uring adalah shared memory yang diubah oleh dua domain eksekusi independen. User space menyiapkan submission entry dan memajukan metadata queue; kernel mengonsumsi submission tersebut lalu memublikasikan completion entry. Layout ring menghilangkan satu batas copy, tetapi pada saat yang sama membuat visibilitas memori menjadi bagian dari kontrak interface. Assignment biasa pada level source ke tail queue tidak cukup sebagai model publikasi yang portabel. Data entry harus terlihat lebih dulu sebelum nilai tail yang membuat entry tersebut boleh dikonsumsi. Di sisi completion, user space harus mengamati publikasi completion dari kernel sebelum membaca field di completion tersebut. Relasi ordering ini adalah bagian dari correctness, bukan sekadar detail optimasi.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Seal memfd Mengubah File Bersama Menjadi Objek Monotonik

Sebuah memfd Linux dapat bermula sebagai file anonim yang writable, lalu memperoleh pembatasan yang tidak dapat dihapus. Pembatasan tersebut melekat pada inode, sehingga transfer atau duplikasi descriptor tidak menghasilkan tampilan yang lebih longgar. Setelah sebuah seal berhasil ditambahkan, setiap descriptor yang merujuk inode itu tunduk pada seal tersebut. Sifat ini berbeda dari access mode pada descriptor. Descriptor dapat membawa flag lokal, sedangkan seal mengubah batas mutasi pada objek file bersama itu sendiri.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Seal Linux memfd Mengubah Status File Mutable Menjadi Kontrak Terbatas

Seal Linux memfd Mengubah Status File Mutable Menjadi Kontrak Terbatas File yang dikembalikan memfd_create() bermula sebagai status file mutable pada penyimpanan berorientasi memori, tetapi Linux dapat menghapus operasi mutasi dari file tersebut secara bertahap. Saat pembuatan memakai MFD_ALLOW_SEALING, fcntl() dengan F_ADD_SEALS dapat melarang penyusutan, pertumbuhan, penulisan, penulisan pada masa berikutnya, atau perubahan lanjutan terhadap kumpulan seal. Pembatasan itu melekat pada inode, bukan pada satu descriptor, sehingga pemindahan descriptor lain untuk objek yang sama tidak memulihkan operasi yang telah dihapus oleh seal.

Keamanan Siber 17 Sep 2026 6 min read

SCM_RIGHTS Memindahkan Otoritas File Descriptor Melalui Unix Socket

SCM_RIGHTS Memindahkan Otoritas File Descriptor Melalui Unix Socket Sebuah layanan berprivilege dapat membuka file yang tidak dapat dibuka proses lain melalui pathname, lalu mengirim akses tersebut melalui Unix-domain socket. Proses penerima memperoleh file descriptor baru yang merujuk ke state open-file kernel yang sama. Tidak diperlukan lookup pathname kedua, dan kemampuan penerima untuk membuka path tersebut tidak dievaluasi ulang sebagai bagian dari transfer. Properti itu membuat SCM_RIGHTS lebih dari sekadar fasilitas IPC. Mekanisme ini memindahkan capability kernel yang sudah terbentuk melewati batas proses. Keamanan bergantung pada kedua sisi pertukaran: pengirim harus membatasi descriptor yang boleh keluar dari domain otoritasnya, sedangkan penerima harus memperlakukan descriptor masuk sebagai objek berprivilege yang propertinya perlu divalidasi.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

renameat2 RENAME_EXCHANGE Menukar Dua Path dalam Satu Operasi Filesystem

renameat2() dengan RENAME_EXCHANGE mengubah dua directory entry yang sudah ada sebagai satu operasi rename atomik. Sebelum pemanggilan, setiap pathname mengarah ke objek asalnya; setelah pemanggilan berhasil, setiap pathname mengarah ke objek yang sebelumnya memakai path satunya. Tidak ada keadaan sukses antara kedua titik itu ketika salah satu nama hanya terhapus atau tertimpa. Sifat ini berbeda dari rename() biasa. Rename konvensional dapat mengganti destination secara atomik, tetapi replacement menghilangkan nama destination dari namespace. Exchange mempertahankan kedua objek bernama dan menukar posisi keduanya.

Linux 17 Sep 2026 4 min read

rename Mengganti Directory Entry Secara Atomik di Linux

Pemanggilan rename() yang berhasil dapat mengganti pathname tujuan yang sudah ada tanpa memperlihatkan keadaan perantara ketika nama tujuan tersebut hilang. Proses yang melakukan resolusi terhadap tujuan akan melihat directory entry lama atau penggantinya, dengan tetap tunduk pada batasan filesystem dan mount. Transisi namespace atomik tersebut lebih sempit daripada sejumlah sifat yang sering diasosiasikan dengan penggantian file. Operasi ini tidak membuat write sebelumnya menjadi durable, tidak memaksa metadata direktori ke penyimpanan stabil, dan tidak membatalkan file descriptor yang sudah merujuk ke file yang diganti.

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 4 min read

pidfd Menjaga Identitas Proses Tetap Stabil Saat PID Dipakai Ulang

PID numerik Linux dapat dipakai ulang setelah prosesnya berakhir. Sebaliknya, PID file descriptor merujuk ke task tertentu, sehingga operasi berikutnya melalui descriptor tersebut tidak diam-diam beralih ke proses lain yang kemudian memperoleh PID numerik yang sama. Sifat ini mengubah identitas proses dari lookup yang diulang pada setiap operasi menjadi referensi yang dipertahankan kernel dengan semantik descriptor. Perbedaannya relevan untuk pengiriman signal, pemantauan exit, dan event loop yang menyimpan handle proses selama pekerjaan asinkron berlangsung.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

pidfd Linux Mengubah Identitas Proses Menjadi Handle yang Dapat Dipantau

PID Linux adalah angka dari namespace yang dapat digunakan ulang. pidfd berbeda: ia adalah file descriptor yang merujuk ke proses tertentu. Perbedaan itu mengubah pengelolaan proses dari lookup berulang berdasarkan nama numerik menjadi operasi terhadap handle yang dipertahankan kernel dan identitasnya tidak diam-diam berpindah ketika PID didaur ulang. Perbedaannya paling terlihat pada supervisor, launcher, sandbox, dan service manager yang mempertahankan referensi proses melintasi pekerjaan asynchronous. PID numerik dapat tetap valid secara sintaksis setelah proses asli keluar, tetapi kemudian mengidentifikasi proses lain. pidfd menjaga referensi tetap terikat pada objek proses asli dan juga dapat berpartisipasi dalam event loop berbasis descriptor.

Keamanan Siber 17 Sep 2026 5 min read

openat2 Menjadikan Kebijakan Resolusi Path Bagian dari Operasi Open

openat2 Menjadikan Kebijakan Resolusi Path Bagian dari Operasi Open Sebuah layanan menerima pathname relatif dan bermaksud membuka hanya objek di bawah direktori yang sudah dipercaya. Pemeriksaan leksikal dapat menolak komponen .. yang jelas, tetapi namespace filesystem dapat memuat symbolic link, mount point, atau rename bersamaan yang mengubah path walk setelah pemeriksaan tersebut. Keputusan keamanan dan operasi pembukaan file lalu menggambarkan dua momen berbeda. Linux openat2() menyediakan batas yang lebih sempit. Flag resolve membatasi operasi resolusi path kernel yang menghasilkan file descriptor. Mekanisme ini tidak membuat penanganan path arbitrer otomatis aman, tetapi dapat memindahkan beberapa aturan pembatasan dari logika pemeriksaan awal string ke lookup yang benar-benar memilih objek.