Langsung ke konten

Arsip

Linux

180 artikel
Teknologi 22 Sep 2026 5 min read

Buffered Write Linux Memisahkan Selesainya Write dari Persistensi Storage

Keberhasilan buffered write() umumnya tidak berarti data file yang baru sudah mencapai storage non-volatile. Pada Linux, jalur buffered I/O yang umum menempatkan data file di page cache, menandai state cache terkait sebagai dirty, lalu membiarkan I/O ke storage berlangsung kemudian. Pemisahan ini merupakan bagian utama dari I/O filesystem normal. Memori menyerap write aplikasi dengan akses yang cepat bagi CPU, sementara kernel dapat menjadwalkan traffic ke backing device secara terpisah. Mekanisme tersebut memberi fleksibilitas dan dapat mengurangi stall storage secara langsung, tetapi juga membentuk batas antara selesainya syscall dan persistensi.

Teknologi 22 Sep 2026 5 min read

Autotuning Receive TCP Linux Memperbesar Kapasitas Buffer Sesuai Kebutuhan Flow

Receiver TCP hanya dapat menerima data selama masih tersedia ruang untuk menyimpan byte yang belum dikonsumsi aplikasi. Di Linux, kapasitas itu tidak harus tetap sebesar alokasi kecil saat koneksi baru dimulai. Receive autotuning dapat memperbesar receive buffer socket ketika koneksi berkembang, dengan tetap mengikuti batas sistem dan kondisi flow. Perilaku ini paling terasa pada koneksi dengan traffic berkelanjutan melalui path yang memiliki bandwidth-delay product cukup besar. Usable window yang terlalu kecil dapat membatasi sender walaupun jaringan dan sender masih mampu membawa lebih banyak data. Kapasitas receive tambahan memberi TCP ruang untuk mempertahankan lebih banyak data in flight saat aplikasi menguras socket.

Linux 21 Sep 2026 5 min read

io_uring Multishot Accept Mempertahankan Satu Request Accept Tetap Aktif

Request accept biasa memiliki pola satu banding satu: satu operasi yang dikirim pada akhirnya menghasilkan satu completion. io_uring multishot accept mengubah hubungan tersebut. Satu SQE accept dapat tetap aktif untuk banyak koneksi masuk dan menghasilkan completion queue entry terpisah bagi setiap socket yang diterima. Request itu persisten, tetapi tidak permanen. Setiap CQE membawa state yang memungkinkan aplikasi menentukan apakah request awal masih dapat menghasilkan completion berikutnya. Boundary ini penting karena server yang menganggap setiap CQE sukses sebagai bukti bahwa accept masih aktif dapat berhenti menerima koneksi secara diam-diam setelah request multishot berakhir.

Linux 21 Sep 2026 4 min read

futex_waitv Menunggu Beberapa Futex Word dalam Satu Wait

Futex wait tradisional menunjuk satu futex word. Model itu cocok untuk mutex atau condition yang blocking state-nya direpresentasikan oleh satu nilai shared 32-bit. Beberapa desain sinkronisasi memiliki kebutuhan berbeda: satu thread perlu sleep sampai salah satu dari beberapa state independen berubah. futex_waitv() menyediakan vector wait tersebut. Caller mengirim array wait descriptor yang masing-masing memuat alamat futex dan expected value. Kernel memeriksa vector dan hanya melakukan block selama semua entry masih cocok dengan state yang diharapkan.

Linux 21 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path Saat Lookup

Path yang diberikan ke openat() diresolusikan oleh kernel, tetapi caller hanya memiliki kontrol terbatas atas traversal komponen perantara. Linux openat2() menambahkan field resolve untuk menerapkan batas pada keseluruhan operasi lookup. Batas tersebut diperiksa ketika komponen path sedang ditelusuri, bukan melalui validasi path di userspace yang dilanjutkan dengan open terpisah. Perbedaan ini relevan saat komponen path dapat berubah secara concurrent. Urutan yang memeriksa path lalu membukanya menghasilkan dua observasi terpisah terhadap state filesystem yang mutable. openat2() menempatkan policy lookup pada system call yang sama dengan operasi yang menghasilkan file descriptor.

Linux 21 Sep 2026 5 min read

File Seal memfd Membekukan State Shared Memory

File dari memfd_create() pada awalnya merupakan file anonim yang mutable. Ukurannya dapat diubah, isinya dapat ditulis, dan file dapat dipetakan seperti file biasa, sementara storage-nya bersifat volatile dan dilepas setelah referensi terakhir hilang. File sealing menambahkan fase lain pada lifecycle tersebut: setelah data selesai diisi, kernel dapat menolak secara permanen kelas perubahan tertentu. Transisi ini berguna saat satu process menyiapkan byte lalu menyerahkan file description yang sama ke process lain. Penerima dapat memeriksa seal yang melekat pada inode, bukan hanya mengandalkan kesepakatan bahwa pengirim tidak akan mengubah objek lagi.

Linux 20 Sep 2026 5 min read

pidfd_getfd Menduplikasi File Descriptor Aktif Antarproses

Sebuah proses dapat memperoleh duplikat file descriptor yang sudah terbuka di proses lain tanpa meminta proses tersebut mengirimkannya melalui UNIX domain socket. Linux pidfd_getfd() melakukan transfer itu melalui PID file descriptor, dengan izin yang dibatasi oleh pemeriksaan akses ptrace. Descriptor yang diterima merupakan entry baru di caller, tetapi objek kernel di baliknya bukan objek independen. Descriptor tersebut merujuk ke open file description yang sama dengan descriptor target. Perbedaan ini menentukan sharing offset, file status flags, dan operasi terhadap objek dasarnya.

Linux 19 Sep 2026 5 min read

Write Protection userfaultfd Mengubah Write Memori Menjadi Event Userspace

Sebuah thread dapat mengakses page yang valid dan resident, tetapi tetap berhenti sebelum mengubah isinya. Dengan mode write-protect Linux userfaultfd, page yang terdaftar dapat ditandai sehingga write menghasilkan event page fault pada userfaultfd. Handler di userspace menerima event tersebut, menjalankan bookkeeping, melepas proteksi, lalu membiarkan thread yang tertahan melanjutkan eksekusi. Mekanisme ini berada di antara permission page biasa dan accounting memori tingkat aplikasi. Page tetap menjadi bagian dari address space proses; kernel mengarahkan write fault ke protokol berbasis file descriptor, sehingga aplikasi tidak perlu membangun jalur kontrol serupa di atas mprotect() dan SIGSEGV.

Keamanan Siber 19 Sep 2026 6 min read

Write Protection userfaultfd Menempatkan Penulisan Memori di Balik Batas Fault User Space

Sebuah thread dapat memiliki virtual memory mapping yang writable tetapi tetap terhenti saat mencoba memodifikasi page tertentu. Mode write-protect userfaultfd Linux memungkinkan user space mendaftarkan range memori, menerapkan write protection pada page di range tersebut, lalu menerima event page fault ketika page yang diproteksi ditulis. VMA dapat tetap writable secara logis sementara state page table membentuk batas intersepsi yang lebih sempit. Mekanisme ini bukan sistem otorisasi umum. userfaultfd adalah interface pengendalian memory fault. Relevansi keamanannya berasal dari posisi titik keputusan: write dapat ditangguhkan sebelum protected page berubah, sehingga handler terpisah dapat mencatat state, mengoordinasikan migrasi, mempertahankan batas snapshot, atau menahan progres dengan membiarkan fault belum terselesaikan.

Teknologi 19 Sep 2026 5 min read

Write MMIO Posted PCIe Dapat Bertahan Setelah Store CPU Selesai

CPU dapat menyelesaikan store MMIO sebelum PCIe Memory Write yang terkait mencapai perangkat target. Jarak ini muncul karena request PCIe Memory Write bersifat posted: requester mengirimkannya tanpa menunggu paket completion dari completer. Sifat tersebut membantu throughput, tetapi juga membentuk batas penting. Store instruction yang telah selesai dari sisi software, ordering barrier, dan pengamatan write oleh perangkat bukan otomatis merupakan event yang sama. PCIe Memory Write adalah transaksi posted PCIe mengklasifikasikan Memory Write sebagai posted request. Posted request tidak memiliki Completion TLP normal yang kembali untuk menyatakan keberhasilan kepada requester. Setelah host bridge menerima write MMIO dari CPU, transaksi dapat terus bergerak melalui buffer dan tahap interconnect meski prosesor sudah melanjutkan eksekusi.

Linux 19 Sep 2026 5 min read

userfaultfd Memindahkan Resolusi Page Fault Terpilih ke User Space

Akses memori biasanya masuk ke jalur page fault kernel dan selesai tanpa aplikasi memilih isi page tepat pada saat itu. Linux userfaultfd mengubah batas tersebut untuk rentang alamat virtual yang didaftarkan: fault terpilih menjadi event pada file descriptor, lalu manager di user space dapat menyediakan atau mengaktifkan page sebelum thread yang mengalami fault melanjutkan eksekusi. Mekanisme ini tidak mengganti page table proses dengan struktur data di user space. Kernel tetap memiliki page-table state dan melakukan operasi mapping akhir. User space memperoleh kendali atas kelas fault tertentu beserta waktu resolusinya.

Teknologi 19 Sep 2026 6 min read

TLB Shootdown Memperluas Perubahan Page Table ke Banyak CPU

TLB Shootdown Memperluas Perubahan Page Table ke Banyak CPU Mengubah entry page table di memori tidak otomatis menghentikan setiap translasi yang berasal dari entry tersebut. CPU yang sebelumnya memakai mapping dapat menyimpannya di translation lookaside buffer, atau TLB. Pada sistem multiprosesor, CPU lain dapat memiliki salinan cache masing-masing, sehingga perubahan mapping dapat memerlukan koordinasi di luar CPU yang mengubah page table. Linux memperlihatkan pemisahan ini melalui interface TLB flush. Setelah state page table berubah, kode arsitektur harus membuat translasi yang terdampak tidak dapat digunakan pada setiap CPU yang relevan sebelum software bergantung pada mapping baru atau melepaskan memori yang masih dapat dijangkau mapping lama.

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.

Teknologi 19 Sep 2026 4 min read

Streaming DMA Memindahkan Kepemilikan Buffer antara CPU dan Perangkat

Streaming DMA Memindahkan Kepemilikan Buffer antara CPU dan Perangkat Sebuah DMA buffer dapat menjadi memori yang valid bagi CPU dan perangkat, tetapi tetap memerlukan serah-terima yang ketat di antara keduanya. Streaming DMA mapping di Linux menyatakan serah-terima tersebut. Mapping API menyediakan alamat DMA yang terlihat oleh perangkat sekaligus memberi DMA layer titik untuk menjalankan cache maintenance, translasi alamat, atau bounce buffering yang spesifik terhadap arsitektur. Perilaku ini paling terlihat pada sistem yang DMA perangkatnya tidak otomatis koheren dengan cache CPU. Namun, aturan kepemilikan tetap menjadi bagian dari DMA API portabel, termasuk pada mesin yang tidak memerlukan operasi cache tambahan.

Linux 19 Sep 2026 4 min read

signalfd Mengubah Sinyal Linux Menjadi Event File Descriptor

Sinyal POSIX konvensional dapat menginterupsi thread pada hampir semua batas instruksi lalu memindahkan kontrol ke signal handler. Alur kontrol asinkron tersebut membatasi operasi yang aman di dalam handler dan menambah kerumitan pada program yang control plane utamanya sudah berjalan melalui epoll, poll, atau select. Linux signalfd() menyediakan antarmuka pengiriman yang berbeda. Proses memblokir sinyal tertentu melalui signal mask biasa, membuat signalfd untuk himpunan tersebut, lalu menerima sinyal pending dengan membaca record signalfd_siginfo terstruktur dari descriptor. Pada antarmuka kernel, objek tersebut tetap berupa sinyal; hanya proses konsumsinya yang dipindahkan ke I/O file descriptor biasa.

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

seccomp User Notification Memindahkan Keputusan Syscall Terpilih ke Broker

Filter seccomp dapat melakukan lebih dari sekadar langsung mengizinkan atau menolak system call. Dengan user notification, call yang cocok dapat ditahan sementara proses lain menerima request terstruktur melalui listener file descriptor dan menentukan hasil yang diterima thread yang diblokir. Mekanisme ini mengubah keputusan syscall terpilih menjadi interface berbasis broker tanpa memindahkan seluruh implementasi syscall ke user space. Batasnya presisi, tetapi lebih sempit daripada lapisan interposition umum. Kernel tetap memiliki syscall dispatch, task state, descriptor table, dan validasi yang dilakukan kode kernel. Broker menerima metadata dan dapat mengembalikan nilai, error, atau pada kasus yang didukung meminta eksekusi syscall asli dilanjutkan. Desain yang benar memperhitungkan memory target yang mutable, lifetime notification, serta fakta bahwa keputusan policy tidak otomatis menjadi transaksi atas state proses.

Keamanan Siber 19 Sep 2026 5 min read

Seal memfd Mengubah Shared Memory Menjadi Payload Immutable yang Ditegakkan Kernel

Shared memory efisien karena dua proses dapat mengamati storage yang sama tanpa menyalin data. Properti itu menjadi masalah keamanan ketika satu pihak memvalidasi byte lalu mengonsumsinya sementara pihak lain masih memiliki kewenangan untuk mengubah objek yang sama. Sealing pada memfd Linux dapat mempersempit race tersebut dengan membuat mutasi tertentu gagal di kernel sebelum file descriptor melewati batas kepercayaan. memfd_create() membuat file anonim dan mengembalikan file descriptor biasa. Objek tersebut dapat diatur ukurannya, ditulis, dipetakan, dan ditransfer melalui UNIX domain socket. Dengan MFD_ALLOW_SEALING, inode dimulai dengan set seal kosong sehingga produsen dapat menambahkan pembatasan yang tidak dapat dibatalkan setelah payload diisi.

Linux 19 Sep 2026 4 min read

Seal memfd Membatasi Mutasi Shared Memory Setelah Handoff

Descriptor dari memfd_create() merujuk ke file anonim dengan penyimpanan pada infrastruktur filesystem berbasis memori. Handoff descriptor saja tidak membekukan objek tersebut: proses yang masih memiliki akses yang sesuai dapat menulis byte, melakukan truncate, atau memperbesar file. File seal Linux menambahkan pembatasan yang ditegakkan kernel sehingga mutasi tertentu gagal setelah producer menyatakan objek selesai dibuat. Mekanisme ini mengubah handoff shared memory dari sekadar konvensi menjadi transisi state yang ditegakkan pada objek file.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Request Terhubung io_uring Mengodekan Dependensi dalam Urutan Submission

Submission queue io_uring dapat memuat banyak operasi sekaligus, tetapi setiap operasi tidak harus independen. Menetapkan IOSQE_IO_LINK pada sebuah submission queue entry mengikatnya ke entry berikutnya, membentuk rantai dengan urutan eksekusi dan propagasi kegagalan sebagai bagian dari struktur request yang terlihat oleh kernel. Kontrak ini berbeda dari dua SQE independen yang koordinasinya baru dilakukan setelah completion. Rantai terhubung menyatakan dependensi sebelum kernel mulai memproses operasi. Perbedaan tersebut penting saat request berikutnya hanya valid setelah request sebelumnya selesai, atau saat kegagalan satu tahap harus mencegah tahap yang tersisa dijalankan.

Linux 19 Sep 2026 5 min read

Request Multishot io_uring Bertahan Melintasi Event Completion

Request io_uring biasa memiliki siklus hidup sederhana: userspace mengirim satu SQE dan kemudian menerima satu CQE. Operasi multishot mengubah hubungan tersebut. Satu request yang dikirim dapat tetap aktif di kernel dan menghasilkan beberapa completion queue entry ketika event yang cocok terjadi. Persistensi itu mengubah asumsi satu CQE per request menjadi protokol siklus hidup yang eksplisit. State penentunya dibawa oleh IORING_CQE_F_MORE: ketika flag ini ada, request asal masih dapat menghasilkan completion lain; ketika flag tidak ada, request multishot tersebut telah berakhir.

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

process_vm_readv dan process_vm_writev Mentransfer Memori Melintasi Batas Proses

process_vm_readv() dan process_vm_writev() memungkinkan satu proses Linux menyalin byte secara langsung antara address space miliknya dan address space proses lain. Kedua call bekerja pada vektor rentang memori lokal dan remote, tetapi keberhasilan pencarian proses tidak membuat remote memory menjadi stabil. Perubahan mapping, aksesibilitas page, permission, dan mutasi concurrent tetap menjadi bagian kontrak yang terpisah. Interface ini merupakan system call khusus Linux. Keduanya tidak menetapkan lifetime object C, sinkronisasi, atau model interprocess memory yang portabel.

Linux 19 Sep 2026 5 min read

process_madvise Menerapkan Memory Advice Lintas Batas Proses

Sebuah proses dapat memakai memory untuk pekerjaan yang koordinasinya berada di komponen lain. Linux process_madvise() memungkinkan koordinator eksternal menerapkan virtual-memory advice terpilih ke rentang dalam proses target tanpa menyuntikkan kode ke proses tersebut. Target diidentifikasi melalui pidfd, sedangkan rentang alamat diberikan sebagai array struct iovec. Susunan ini memisahkan keputusan memory policy dari kode yang memiliki mapping. Runtime manager, service supervisor, atau memory controller dapat meminta perlakuan berorientasi reclaim atau prefetch untuk proses lain, dengan tetap tunduk pada dukungan kernel dan pemeriksaan permission. System call ini tidak memindahkan ownership mapping, tidak membekukan target, dan tidak membuat address space target menjadi statis.

Keamanan Siber 19 Sep 2026 5 min read

Policy fscrypt Mengikat Pohon Direktori ke Kunci Enkripsi Filesystem

Sebuah direktori dapat tetap terlihat penuh pada filesystem Linux yang ter-mount sementara konten regular file dan nama filenya tidak dapat digunakan tanpa kunci tertentu. Dengan fscrypt, batas tersebut melekat pada objek filesystem dan bukan dibentuk dengan me-mount filesystem terenkripsi kedua. Policy enkripsi yang dipasang pada direktori kosong diwarisi oleh regular file, direktori, dan symbolic link yang dibuat di bawahnya. Properti ini lebih sempit daripada kerahasiaan seluruh filesystem. fscrypt mengenkripsi konten dan nama file, tetapi sebagian besar metadata filesystem tetap terlihat, sedangkan pemeriksaan permission biasa tetap menentukan siapa yang dapat mengakses objek setelah kunci terkait tersedia. Policy enkripsi dan kontrol akses karena itu merupakan batas yang terpisah.

Linux 19 Sep 2026 5 min read

pidfd_getfd Menduplikasi Descriptor Aktif Lintas Batas Proses

Sebuah proses dapat memperoleh descriptor baru yang merujuk ke open file description yang sama dengan descriptor milik proses lain tanpa meminta proses target mengirimkannya. Linux menyediakan operasi ini melalui pidfd_getfd(). Descriptor hasilnya berada di descriptor table caller, tetapi objek kernel di belakangnya tetap sama dengan descriptor target. Perbedaan tersebut penting karena nomor descriptor hanya merupakan entri pada descriptor table sebuah proses. Open file description membawa state seperti posisi file saat ini dan file status flags. Duplikasi lintas proses karena itu memberikan referensi ke instance file kernel yang sudah ada, bukan membuka ulang pathname atau membuat instance independen.