Langsung ke konten

Arsip

Software Engineering

58 artikel
Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

Cara GitHub Codespaces Menghitung Core-Hours, Meneruskan Port, dan Berhubungan dengan CI

GitHub Codespace adalah mesin development yang berjalan di cloud, bukan CI runner yang kebetulan memiliki editor. Environment ini tetap interaktif ketika developer mengedit file, menjalankan command, menyalakan server, melakukan debugging, dan membuat commit. Perbedaan ini menjelaskan tiga hal yang sering tercampur: cara kuota compute dihitung, cara localhost dapat dibuka dari browser, dan kapan CI mulai bekerja setelah kode di-push. Core-hours mengukur kapasitas mesin dikalikan waktu aktif Compute Codespaces dihitung dalam core-hours. Modelnya sederhana:

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

Bounded Queue Mengubah Overload Menjadi Keputusan Admission yang Eksplisit

Queue di antara producer dan consumer yang lebih lambat dapat menyerap perbedaan laju untuk sementara. Queue tidak dapat menghapus perbedaan tersebut. Jika arrival terus lebih cepat daripada completion, setiap item yang diterima menambah pekerjaan yang belum selesai. Unbounded queue membiarkan state itu menumpuk sampai resource lain menjadi batas efektif, sering kali memory atau timeout eksternal. Bounded queue memindahkan batas tersebut ke interface. Setelah capacity habis, admission harus menghasilkan sesuatu yang dapat diamati: menunggu ruang tersedia, menolak pekerjaan baru, membuang pekerjaan tertentu, atau mengalihkannya ke tempat lain. Karena itu, capacity queue dan perilaku saat penuh menjadi bagian dari kontrak overload sistem.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux pidfd Mengikat Operasi Proses ke Identitas Kernel yang Stabil

PID numerik menamai proses melalui lookup dalam namespace. Nomor tersebut dapat dipakai kembali setelah proses berakhir dan sudah di-reap. PID file descriptor pada Linux mengubah batas ini: sebuah pidfd adalah file descriptor yang merujuk ke task tertentu, sehingga operasi berikutnya dapat menargetkan referensi tersebut tanpa melakukan resolusi PID numerik lagi. Perilaku manajemen proses ini khusus Linux. Perilaku tersebut bukan properti identifier proses POSIX ataupun bahasa C. PID numerik adalah nama, bukan handle permanen Jalur kontrol yang umum menyimpan PID, menunggu kondisi eksternal, lalu memanggil kill(pid, sig). Kedua operasi itu terpisah oleh waktu. Jika proses awal telah berakhir dan PID-nya sudah didaur ulang sebelum operasi signal, lookup numerik baru dapat menunjuk proses yang berbeda.

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

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

Linux signalfd Mengubah Sinyal Pending Menjadi Status Readable

Proses Linux dapat memblokir sinyal tertentu lalu menerimanya dengan membaca file descriptor alih-alih menjalankan handler asinkron. signalfd() membuat sinyal pending tersebut terlihat melalui antarmuka readiness yang sama dengan socket, pipe, dan descriptor lain, termasuk poll() dan epoll. Konversi ini bukan pengganti signal masking. Descriptor memiliki himpunan sinyal sendiri, sementara setiap thread tetap memiliki signal mask yang mengendalikan delivery biasa. Desain yang konsisten bergantung pada keselarasan kedua status tersebut. Descriptor mengamati sinyal pending dari himpunan tertentu signalfd baru dibuat dengan sebuah himpunan sinyal:

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux signalfd Memindahkan Delivery Signal ke Readiness File Descriptor

Linux signalfd Memindahkan Delivery Signal ke Readiness File Descriptor signalfd() mengubah antarmuka konsumsi untuk signal Linux tertentu. Alih-alih mengatur agar asynchronous signal handler berjalan saat signal tersebut dikirim, sebuah proses dapat memblokir signal lalu menerima informasinya dengan membaca file descriptor. Descriptor itu dapat dipantau melalui poll(), epoll, dan mekanisme readiness terkait, sehingga penanganan signal dapat memakai batas dispatch yang sama dengan socket, pipe, timer, dan objek pollable lain. Mekanisme ini tidak menggantikan semantik signal Linux. Pembentukan signal, delivery yang diarahkan ke proses atau thread, mask, pending state, serta aturan antrean standard signal dan real-time signal tetap berlaku. signalfd mengubah antarmuka untuk mengonsumsi signal yang berstatus pending dan termasuk dalam mask miliknya.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Linux pidfd Mengikat Identitas Proses ke File Descriptor

PID numerik adalah nama dari namespace kernel yang dapat digunakan kembali. Setelah sebuah proses keluar dan PID-nya tersedia lagi, proses lain dapat menerima nomor yang sama. Linux pidfd menyediakan bentuk referensi berbeda: file descriptor yang terikat pada task tertentu, bukan nomor yang harus diresolusi ulang pada setiap operasi. Perbedaan ini mengubah batas antara penemuan proses dan kontrol proses berikutnya. Program dapat meresolusi PID sekali melalui pidfd_open(), menyimpan descriptor hasilnya, lalu memakai antarmuka berbasis pidfd tanpa menganggap PID numerik sebagai identitas permanen.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Linux eventfd Membuat Status Counter Dapat Dipantau

Linux eventfd dapat menggabungkan banyak notifikasi ke dalam satu counter yang dikelola kernel sambil tetap dapat digunakan dengan poll(), select(), dan epoll. Writer menambahkan nilai unsigned 64-bit ke counter; readiness menyatakan apakah status tersebut dapat dikonsumsi. Interface ini membawa status aritmetika, bukan byte stream atau antrean pesan individual. Perbedaan tersebut penting pada batas proses dan thread. Sebuah wakeup menyatakan bahwa counter bukan nol. Wakeup itu tidak mempertahankan jumlah operasi write, identitas writer, atau urutan di antara sumber notifikasi yang terpisah.

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.