Belajar DragonFlyBSD - LWKT, Scheduler & Performance
Episode 17 of 23

Belajar DragonFlyBSD - LWKT, Scheduler & Performance

Episode ini masuk ke inti kernel DragonFlyBSD: Lightweight Kernel Threading dan per-process scheduler, penguncian CPU affinity dengan cpuset, tuning sysctl seperti kern.sched dan vfs.hammer2, serta pemantauan kinerja dengan systat, top, dan vmstat.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 16 sebelumnya kalian sudah mengelola jaringan tingkat lanjut dengan routing dinamis dan tunneling. Sekarang kita menyelam ke bagian paling khas DragonFlyBSD: kernel-nya. Episode 17 membahas LWKT — arsitektur threading yang menjadi alasan sistem ini di-fork — serta cara kalian mengendalikan scheduler dan mengukur kinerja.

Ingat cerita di episode 1? DragonFlyBSD lahir karena Matthew Dillon menganggap model threading kernel FreeBSD kurang scalable untuk mesin multi-core. LWKT adalah jawabannya: setiap CPU menjalankan kernel thread sendiri secara paralel, dan scheduler bekerja per-proses. Episode ini menjelaskan bagaimana itu bekerja dan bagaimana kalian memanfaatkannya.

LWKT: Lightweight Kernel Threading

Konsep Inti

Di kebanyakan BSD, kernel menggunakan lock global yang membuat hanya satu CPU bisa masuk kernel pada satu waktu — aman tapi lambat di mesin modern. LWKT memecah masalah ini dengan memberi setiap CPU struktur thread sendiri. Kernel thread ringan (LWKT threads) bisa berjalan paralel di banyak CPU, dan migrasi antar CPU dikendalikan dengan aturan yang jelas.

Dampaknya terasa di beban kerja dengan banyak proses dan banyak thread: kernel tidak lagi menjadi satu-satunya bottleneck. Inilah kenapa DragonFlyBSD unggul di mesin dengan banyak core dan beban server yang sibuk.

Per-Process Scheduler

Selain LWKT untuk kernel, DragonFlyBSD menggunakan per-process scheduler — keputusan penjadwalan dibuat dengan mempertimbangkan proses dan CPU tempatnya berada. Scheduler ini menyeimbangkan beban antar CPU dengan migrasi yang bertahap, menjaga afinitas cache, dan merespons beban I/O dengan baik.

Melihat scheduler yang aktif dan parameter terkait:

Parameter scheduler
sysctl kern.sched.name
sysctl kern.sched.slice
sysctl kern.sched.interactive

kern.sched.name menampilkan scheduler aktif; parameter lain mengendalikan perilaku penjadwalan.

cpuset: CPU Affinity

Mengunci Proses ke CPU

cpuset mengikat proses atau thread ke CPU tertentu — sangat berguna untuk aplikasi latency-sensitive yang tidak boleh kena migrasi:

Lihat dan set CPU affinity
cpuset -g -p 1234
cpuset -l 0,1 -p 1234

cpuset -g membaca afinitas proses 1234; cpuset -l 0,1 mengikatnya ke CPU 0 dan 1. Untuk proses yang baru:

Jalankan proses terikat CPU
cpuset -l 2-3 -- ./heavy-task

Perintah ini menjalankan heavy-task hanya di CPU 2 dan 3 — pola umum untuk database dan aplikasi real-time.

Afinitas di Level Sistem

Daftar CPU dan afinitas seluruh sistem:

Daftar CPU dan afinitas
cpuset -g
sysctl hw.ncpu

sysctl hw.ncpu memberi tahu berapa core yang tersedia — titik awal sebelum merencanakan distribusi proses.

Tuning Kernel & HAMMER2

Parameter sysctl yang Sering di-Tune

Beberapa parameter yang paling sering disesuaikan untuk beban kerja tertentu:

Lihat parameter yang relevan
sysctl kern.sched.slice
sysctl vfs.hammer2.double_buffer
sysctl vm.swap_idle_enabled

vfs.hammer2 menyimpan parameter yang memengaruhi perilaku filesystem HAMMER2 — termasuk penggunaan double buffer yang berdampak besar pada beban kerja I/O. Setiap parameter bisa dilihat dan diuji nilainya secara runtime sebelum dipersistenkan di /etc/sysctl.conf.

loader.conf

Parameter yang harus tersedia sejak awal boot — sebelum kernel sepenuhnya hidup — diatur di /boot/loader.conf:

Contoh /boot/loader.conf
kern.maxvnodes="100000"
vfs.hammer2.double_buffer="1"
hw.igb.num_queues="4"

loader.conf dibaca saat boot, lebih awal daripada sysctl.conf. Aturan praktis: atur di loader.conf jika parameter memengaruhi struktur kernel yang dialokasikan saat boot; atur di sysctl.conf jika aman diubah runtime.

Monitoring Kinerja

systat

systat adalah dashboard real-time:

Dashboard kinerja
systat -vmstat 2
systat -ifstat

-vmstat menampilkan CPU, memori, dan I/O setiap 2 detik; -ifstat menampilkan lalu lintas per interface.

top

top menampilkan proses tersibuk dan penggunaan resource:

Proses dan beban sistem
top
top -b -n 5

-b batch mode untuk skrip — berguna untuk menangkap snapshot beban ke log.

vmstat

vmstat memberikan ringkasan virtual memory dan aktivitas sistem:

Statistik virtual memory
vmstat -w 2

Perhatikan kolom cs (context switch), in (interrupt), dan r (run queue) — lonjakan yang tidak wajar di kolom ini adalah tanda awal bottleneck.

Info

Siklus tuning yang benar: ukur dulu (systat, top, vmstat), ubah satu parameter, ukur lagi. Jangan mengubah banyak parameter sekaligus — kalian tidak akan tahu mana yang bekerja. Persistenkan perubahan hanya setelah terbukti membantu.

Penutup

Di episode 17 ini kalian telah memahami inti kernel DragonFlyBSD: Lightweight Kernel Threading dengan per-CPU thread dan per-process scheduler, penguncian CPU affinity dengan cpuset, tuning parameter seperti kern.sched dan vfs.hammer2 via sysctl dan loader.conf, serta pemantauan dengan systat, top, dan vmstat.

Inti yang harus dibawa pulang:

  • LWKT memungkinkan kernel berjalan paralel di banyak CPU — pembeda utama DragonFlyBSD.
  • cpuset -l 0,1 -p PID mengunci proses ke CPU tertentu untuk latency-sensitive workload.
  • Tune kern.sched.* dan vfs.hammer2.* via sysctl; gunakan /boot/loader.conf untuk parameter awal boot.
  • Ukur dengan systat -vmstat, top, vmstat sebelum dan sesudah setiap perubahan.
  • Ubah satu parameter per percobaan — siklus measure-change-measure.

Di episode 18 selanjutnya kita menjalankan dunia di dalam dunia: NVMM & virtualization. Kalian akan mengenal hypervisor tipe-2 nvmm(4), integrasinya dengan QEMU lewat package qemu, mengelola VM, mengatur networking dengan tap dan bridge, serta membuat snapshot VM.

Belajar DragonFlyBSD - LWKT, Scheduler & Performance | Belajar DragonFlyBSD