Langsung ke konten

Arsip

Linux

180 artikel
Linux 26 Sep 2026 4 min read

Resize Gambar Massal dengan Bash dan ImageMagick Tanpa Menimpa File Asli

Perintah untuk resize gambar cukup singkat. Yang perlu diperhatikan saat memproses banyak file adalah bagaimana hasilnya disimpan. Jika hasil langsung menimpa gambar asli, kegagalan di tengah proses bisa menyisakan koleksi yang baru diproses sebagian. Menaruh semua hasil dalam satu folder juga berisiko menimbulkan benturan nama: events/photo.jpg dan products/photo.jpg akan memiliki nama file tujuan yang sama. Direktori hasil yang terpisah menghindari kedua masalah tersebut. Script berikut menerima direktori sumber, direktori tujuan, dan batas panjang sisi gambar. File JPEG, PNG, serta WebP diproses secara rekursif dengan struktur folder dan format tetap dipertahankan, sementara file asli tidak diubah.

Linux 26 Sep 2026 5 min read

Konversi Massal JPEG dan PNG ke WebP dengan Bash dan cwebp

Dua file bernama photo.jpg dan photo.png di direktori yang sama akan menghasilkan nama tujuan yang identik: photo.webp. Jika benturan baru diketahui saat konversi berlangsung, salah satu gambar bisa terlewat atau hasil sebelumnya tertimpa. Daftar input sebaiknya diperiksa sebelum encoding dimulai. Script Bash berikut memakai cwebp dan menyimpan hasil dalam struktur direktori terpisah. Mode auto secara default memakai WebP lossy untuk JPEG dan WebP lossless untuk PNG. File sumber tetap utuh, sedangkan file tujuan yang sudah ada akan dilewati.

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 23 Sep 2026 4 min read

signalfd Mengonsumsi Sinyal yang Diblokir Melalui Read File Descriptor

signalfd Mengonsumsi Sinyal yang Diblokir Melalui Read File Descriptor signalfd() mengubah notifikasi sinyal terpilih menjadi record yang dapat dikonsumsi dengan read(). Sinyal pending yang cocok membuat descriptor menjadi readable, sehingga pemrosesan sinyal dapat berada pada jalur poll(), select(), atau epoll yang sama dengan socket, timer, dan descriptor lain. Descriptor tidak otomatis mengalihkan sinyal hanya karena mask miliknya memuat nomor sinyal tersebut. Aturan signal mask normal tetap berlaku. Pada susunan yang umum, sinyal terpilih diblokir agar tidak dikirim melalui disposition biasa, lalu sebuah signalfd membaca instance yang pending.

Teknologi 23 Sep 2026 4 min read

Probe TCP Keepalive Mendeteksi Peer Mati yang Senyap

Koneksi TCP yang sudah terbentuk dapat tetap senyap dalam waktu lama. Kondisi ini tidak langsung berarti salah satu endpoint gagal: aplikasi mungkin memang sedang tidak memiliki data untuk dipertukarkan. Sifat tersebut berguna untuk sesi berumur panjang, tetapi juga menimbulkan masalah operasional ketika peer menghilang tanpa mengirim FIN atau RST. Mesin dapat kehilangan daya, jalur jaringan dapat terputus, atau state pada perangkat perantara dapat hilang. Endpoint yang masih aktif bisa mempertahankan socket yang tetap terlihat established karena tidak ada paket yang datang untuk membuktikan kondisi sebaliknya. TCP keepalive menyediakan mekanisme opsional untuk menguji koneksi idle seperti ini.

Linux 23 Sep 2026 4 min read

PR_SET_PDEATHSIG Mengikat Notifikasi Child ke Terminasi Thread Parent

PR_SET_PDEATHSIG Mengikat Notifikasi Child ke Terminasi Thread Parent PR_SET_PDEATHSIG memungkinkan sebuah process Linux meminta signal ketika thread yang membuatnya berhenti. Mekanismenya memiliki cakupan sempit: ini adalah notifikasi dari kernel yang terikat pada relasi parent, bukan kontrak umum tentang lifetime process dan bukan jaminan bahwa dua process akan berhenti bersamaan. Batas tersebut penting pada supervisor, launcher, dan helper process. Child dapat bereaksi saat pembuatnya hilang tanpa melakukan polling PID, tetapi identitas parent, waktu pemasangan setting, aturan inheritance, dan transisi credential menentukan batas perilakunya.

Linux 23 Sep 2026 4 min read

pidfd_getfd Menduplikasi Descriptor Target ke Proses Pemanggil

pidfd_getfd Menduplikasi Descriptor Target ke Proses Pemanggil pidfd_getfd() dapat menempatkan duplikat file descriptor milik proses lain ke tabel descriptor proses pemanggil. Descriptor hasil menjadi milik pemanggil, tetapi tetap merujuk ke open file description yang sama dengan descriptor terpilih pada proses target. Batas ini penting karena operasi tersebut tidak membuka ulang pathname, membangun ulang socket, atau membuat posisi file independen. Kernel menduplikasi referensi yang sudah ada melintasi batas proses. pidfd dan targetfd menunjuk dua hal berbeda Pemanggilan menerima PID file descriptor serta nomor descriptor milik proses target:

Linux 23 Sep 2026 5 min read

Mode Semaphore eventfd Mengubah Nilai Counter Menjadi Read Satu Unit

Linux eventfd mengekspos counter 64-bit yang dikelola kernel melalui file descriptor. Interface yang ringkas ini memiliki pilihan semantik penting: read normal menguras nilai counter saat itu, sedangkan read dengan EFD_SEMAPHORE hanya mengambil satu unit. Jalur write tetap menambahkan nilai ke counter yang sama. Perbedaan tersebut mengubah objek dari counter notifikasi agregat menjadi sumber unit yang dapat dikonsumsi satu per satu melalui descriptor. Model readiness tetap dapat dipakai bersama poll, epoll, dan mekanisme multiplexing descriptor lain, sehingga satu objek dapat menghubungkan accounting producer dengan event loop tanpa payload pipe terpisah.

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

membarrier Private Expedited Mengurutkan Memori Userspace Antar-Thread

Linux membarrier() dapat memindahkan sebagian biaya sinkronisasi dari jalur yang sangat sering dieksekusi ke jalur koordinasi yang lebih jarang. Dengan MEMBARRIER_CMD_PRIVATE_EXPEDITED, satu thread meminta kernel membentuk titik memory ordering bagi thread yang sedang berjalan dalam proses yang sama. Biaya system call dibayar saat koordinasi diperlukan, bukan dengan menempatkan hardware memory barrier pada setiap eksekusi fast path. Mekanisme ini lebih sempit daripada rendezvous thread umum. membarrier() tidak menjalankan callback aplikasi pada sibling thread, tidak menunggu acknowledgement pada level aplikasi, dan tidak membuat data race biasa menjadi sinkronisasi yang valid. Kontraknya berfokus pada pengurutan akses memori userspace di sekitar barrier.

Linux 23 Sep 2026 3 min read

MADV_WIPEONFORK Mengganti Memori Private yang Diwariskan dengan Nol

MADV_WIPEONFORK Mengganti Memori Private yang Diwariskan dengan Nol fork() normal memberikan child mapping yang berasal dari address space parent, dengan page private yang writable umumnya ditangani melalui copy-on-write. MADV_WIPEONFORK mengubah aturan pewarisan itu untuk range anonymous private tertentu: mapping tetap ada pada child, tetapi isinya menjadi zero-filled. Parent tetap menyimpan byte yang sudah ada. Operasi ini mengubah memori yang terlihat oleh child pada batas pembuatan proses, bukan menghapus range milik parent.

Linux 23 Sep 2026 4 min read

MADV_DONTFORK Mengecualikan Range Memori dari Address Space Child

MADV_DONTFORK mengubah satu bagian spesifik dari pembuatan proses di Linux: mapping yang ditandai dengan advice ini tidak dibuat tersedia pada child hasil fork(). Parent tetap memiliki mapping tersebut. Child dimulai tanpa range address itu, sehingga address yang valid pada parent tidak otomatis valid pada child. Ini adalah kontrol semantik terhadap pewarisan mapping, bukan sekadar petunjuk cache. Operasi ini termasuk extension madvise() khusus Linux yang dapat mengubah perilaku memori yang terlihat oleh program.

Linux 23 Sep 2026 5 min read

Lock OFD fcntl Mengikuti Open File Description, Bukan Proses

Record lock POSIX tradisional memiliki sifat yang dapat menimbulkan efek tak terduga pada kode dengan beberapa descriptor untuk file yang sama: kepemilikan lock terkait dengan proses, dan penutupan descriptor untuk file tersebut dapat melepas lock milik proses. Open file description lock di Linux memindahkan batas kepemilikan itu ke open file description kernel yang dirujuk descriptor. Antarmukanya tetap memakai fcntl() dan struct flock, tetapi identitas pemiliknya berubah. F_OFD_SETLK, F_OFD_SETLKW, dan F_OFD_GETLK membuat byte-range lock mengikuti open file description, bukan identitas proses.

Teknologi 23 Sep 2026 5 min read

Grace Period RCU Linux Memisahkan Penghapusan dari Reklamasi

Read-Copy Update, yang umum disebut RCU, adalah keluarga mekanisme sinkronisasi yang banyak dipakai kernel Linux untuk data yang sering dibaca dan lebih jarang diubah. Langkah utamanya adalah memisahkan dua kejadian yang pada locking biasa kerap dianggap satu: menghapus objek dari struktur bersama dan mereklamasi memori yang menyimpannya. Writer dapat memublikasikan state baru atau melepas objek lama sementara reader tetap berjalan di dalam read-side critical section. Storage lama dipertahankan sampai kernel memastikan bahwa setiap reader yang mungkin sempat melihat referensi lama telah melewati quiescent state. Interval tersebut adalah RCU grace period.

Teknologi 23 Sep 2026 5 min read

fork Linux Memakai Copy-on-Write untuk Menunda Salinan Page Privat

fork() membuat proses baru dengan virtual address space yang berasal dari proses pemanggil, tetapi Linux tidak perlu menggandakan setiap physical page privat ketika syscall selesai. Untuk mapping privat yang writable, kernel dapat mengatur page table parent dan child agar keduanya pada awalnya merujuk physical memory yang sama, sementara operasi write dibatasi oleh state copy-on-write. Desain ini membuat biaya pembuatan proses lebih bergantung pada page table dan bookkeeping kernel daripada seluruh ukuran data privat yang resident. Penyalinan fisik ditunda sampai sebuah write membuat kedua address space harus berbeda.

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 23 Sep 2026 5 min read

close_range dengan UNSHARE Memisahkan Cleanup File Descriptor dari Thread Lain

Proses Linux multithread dapat memakai satu tabel file descriptor secara bersama. Pola itu praktis selama eksekusi normal: descriptor yang dibuka satu thread tersedia bagi thread lain. Masalah muncul ketika satu thread sedang menyiapkan konteks eksekusi terbatas dan ingin membuang range descriptor yang luas, sementara thread lain masih dapat mengalokasikan descriptor pada tabel yang sama. close_range() menyediakan operasi berbasis range untuk batas tersebut. Dengan CLOSE_RANGE_UNSHARE, kernel lebih dulu memisahkan caller dari tabel descriptor bersama, lalu menerapkan penutupan yang diminta pada tabel hasil pemisahan milik caller. Secara konsep, operasi ini mendekati gabungan unshare(CLONE_FILES) dan penutupan range, tetapi kernel dapat menghindari pekerjaan yang tidak diperlukan pada kasus umum.

Linux 22 Sep 2026 4 min read

TFD_TIMER_CANCEL_ON_SET Melaporkan Perubahan Diskontinu Clock Realtime

timerfd yang dipasang terhadap wall clock dapat mengalami perubahan clock diskontinu sebelum deadline tercapai. Dengan TFD_TIMER_CANCEL_ON_SET, Linux mengekspos kejadian itu melalui descriptor: read() berikutnya gagal dengan ECANCELED, bukan menyajikan lompatan clock sebagai expiration timer biasa. Cakupan flag ini sengaja sempit. Efeknya berlaku ketika timerfd_settime() memasang timer absolut pada CLOCK_REALTIME atau CLOCK_REALTIME_ALARM, lalu clock tersebut mengalami perubahan diskontinu. Cancellation terikat pada timer realtime absolut timerfd_create() memilih clock yang menjadi basis timer. Descriptor dengan CLOCK_REALTIME mengikuti system wall clock, sedangkan CLOCK_MONOTONIC mengikuti clock yang tidak disetel melalui perubahan wall clock.

Teknologi 22 Sep 2026 5 min read

TCP TIME_WAIT Memisahkan Koneksi yang Sudah Ditutup dari Segmen Terlambat

Sebuah koneksi TCP dapat selesai bertukar data aplikasi tetapi masih meninggalkan catatan socket. State TIME_WAIT merupakan bagian dari mekanisme penutupan TCP, bukan tanda bahwa proses lupa menutup descriptor. Endpoint yang melakukan active close biasanya masuk ke TIME_WAIT setelah closing handshake. Kernel mempertahankan state secukupnya selama interval terbatas agar segmen terlambat dari koneksi lama tidak tercampur dengan traffic dari koneksi baru yang memakai identitas endpoint yang sama. Perilaku ini paling terlihat pada sistem yang membuat banyak koneksi berumur pendek. Jumlah TIME_WAIT yang besar dapat tampak mencolok pada daftar socket, tetapi state tersebut menjaga ketepatan protokol dan tidak berarti setiap entri masih memiliki proses aplikasi.

Linux 22 Sep 2026 4 min read

SO_PEEK_OFF Memberi UNIX Socket Cursor Peek yang Stateful

SO_PEEK_OFF Memberi UNIX Socket Cursor Peek yang Stateful recv(..., MSG_PEEK) biasanya memeriksa data di depan receive queue socket tanpa menghapusnya. Pada UNIX-domain socket Linux, SO_PEEK_OFF dapat mengganti pola yang selalu melihat kepala queue itu dengan cursor yang bergerak maju setelah setiap peek. Cursor tersebut merupakan state milik socket. Peek menggesernya ke depan, sedangkan konsumsi byte dari depan queue menggesernya kembali sebesar jumlah byte yang diambil. Interaksi ini memungkinkan proses memeriksa bagian queue secara berurutan tanpa mengonsumsinya, sambil mempertahankan posisi peek terhadap data yang masih tersisa.

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.

Teknologi 22 Sep 2026 4 min read

Registered Buffer io_uring Menahan Halaman Memori untuk I/O Berulang

Linux io_uring dapat mengirim I/O asynchronous dengan buffer user biasa, tetapi operasi berulang masih dapat membuat kernel harus mencari dan menahan halaman user yang relevan pada setiap request. Registered buffer memindahkan sebagian pekerjaan itu ke fase setup yang eksplisit. Aplikasi mendaftarkan satu atau beberapa region memori ke ring. Kernel mencatat region tersebut dan mempertahankan halaman backing dalam keadaan pinned selama registrasi masih aktif. Request berikutnya dapat merujuk region terdaftar melalui indeks, bukan menyerahkan buffer arbitrer yang harus disiapkan dari awal.

Teknologi 22 Sep 2026 6 min read

Penempatan First-Touch NUMA Mengaitkan Halaman Fisik dengan CPU Pemicu Fault

Pada mesin NUMA, reservasi ruang alamat virtual tidak selalu langsung menentukan node NUMA fisik yang akan menyediakan setiap halaman. Untuk memori anonim, alokasi fisik umumnya terjadi kemudian saat CPU pertama kali memicu page fault pada sebuah halaman. Di bawah kebijakan alokasi lokal default, fault tersebut dapat membuat urutan inisialisasi menjadi bagian dari keputusan penempatan memori. Perilaku ini sering disebut penempatan first-touch. Thread yang pertama kali menulis atau memicu fault pada sebuah halaman dapat membuat Linux mengalokasikan memori backing di dekat node NUMA tempat thread itu berjalan, dengan tetap tunduk pada memory policy aktif, batasan cpuset, ketersediaan memori, dan mekanisme fallback kernel.

Linux 22 Sep 2026 4 min read

EFD_SEMAPHORE Membuat Read eventfd Mengonsumsi Satu Unit Counter

eventfd normal mengubah seluruh counter yang bernilai nonzero menjadi satu hasil read lalu mereset counter ke nol. Saat dibuat dengan EFD_SEMAPHORE, hanya sisi read yang berubah: setiap read yang berhasil mengembalikan nilai 64-bit 1 dan mengurangi counter yang dikelola kernel sebanyak satu. Perbedaan ini membuat beberapa unit yang dikumpulkan writer tetap dapat dikonsumsi secara terpisah. Objeknya tetap sebuah eventfd, dengan counter, aturan write, lifetime descriptor, dan integrasi readiness yang sama.