- Sandbox proses tunggal berbasis KVM
- Program Linux umum atau program yang menggunakan API tertentu dapat dijalankan di dalam sandbox
- Menyediakan performa native dengan menggunakan virtualisasi perangkat keras
- Hanya menggunakan sebagian dari KVM API → codebase kecil dan efisien
Desain TinyKVM
- Mendukung eksekusi program Linux ELF statis
- Dukungan untuk executable dinamis direncanakan akan ditambahkan nanti
- Dapat juga diperluas dengan API untuk menyediakan akses ke server HTTP eksternal atau cache
- Saat ini berjalan di AMD64(x86_64), dengan rencana porting ke AArch64 (ARM 64-bit)
- Dukungan hugepage
- Dapat membuat hugepage pada halaman guest
- Hugepage juga dapat digunakan di host → meningkatkan performa
- Contoh: saat mengalokasikan halaman 2MB, performa kompilasi LLVM tercatat meningkat 5%
- Pemanggilan fungsi cepat
- Overhead saat memanggil fungsi dari guest adalah 2μs
- Saat dijalankan tanpa timer, overhead turun menjadi 1.2μs
- Dukungan debugging jarak jauh
- Mendukung debugging jarak jauh dengan GDB
- Setelah debugging, program dapat dilanjutkan kembali secara normal
- Dukungan Copy-on-Write
- Mendukung fitur fork sendiri → meminimalkan penyalinan memori
- Contoh: saat menggandakan model 6GB, hanya membutuhkan 260MB memori per instance
- Inisialisasi status cepat
- Dapat mereset status guest dengan cepat → memperkuat keamanan
- Jika di-reset pada setiap request, risiko kebocoran status berkurang
- Codebase yang disederhanakan
- Menggunakan sekitar 42k LOC dari KVM API
- Codebase TinyKVM sendiri sekitar 9k LOC → jauh lebih kecil dibanding solusi pesaing
- Contoh: Wasmtime 350k LOC, FireCracker 165k LOC
- Pembuatan page table statis
- Page table tidak dapat diubah saat runtime → memperkuat keamanan
- Melakukan pemeriksaan integritas page table
- Konteks proses terisolasi
- Guest KVM menggunakan PCID/ASID terpisah → lebih tahan terhadap serangan eksekusi spekulatif seperti Spectre
- Kernel yang diperkuat keamanannya
- SMEP, SMAP diaktifkan
- Dapat menangani exception CPU di mode pengguna
Penanganan system call
- Koneksi API dengan host
- System call dilakukan melalui instruksi SYSCALL/SYSRET atau OUT
- Saat system call dijalankan, terjadi VM exit → memakan waktu sekitar 1μs
- Disarankan merancang API dengan unit I/O yang besar dan mengurangi pemanggilan kecil
Benchmark
- Overhead pemanggilan VM
- Tail latency diukur saat VM di-reset
- Saat hanya melakukan pemanggilan sederhana tanpa reset, overhead rendah
- Performa memori
- Performa memori berada pada tingkat normal
- Contoh: pada benchmark HTTP, dapat melakukan 1500 encoding AVIF per detik
- Performa konversi JPEG → AVIF
- Dapat mengonversi sekitar 1582 gambar per detik
- Konversi lossless dimungkinkan dengan menggunakan jalur konversi YUV
Alasan performa sandbox yang cepat
- Tidak menggunakan I/O dan driver
- Tidak ada I/O, driver, atau perangkat virtual → mencegah penurunan performa
- Hanya menggunakan sumber daya CPU → mendekati kecepatan native
- Optimasi hugepage
- Penggunaan hugepage mengurangi page walk → meningkatkan performa
- Pada workload LLM skala besar, mencapai 99.7% performa native
- Pemanggilan VM cepat
- Overhead saat memanggil fungsi dari guest diminimalkan
- Dapat memproses data pada kecepatan CPU native
Keterbatasan
- Jumlah vCPU tidak dapat dikurangi
- Pada KVM API, jumlah vCPU tidak bisa dikurangi
- Multiprocessing dapat diatasi dengan menjalankan beberapa VM secara paralel
- Masalah penurunan performa saat reset
- Penurunan performa dapat terjadi saat mereset status VM
- Namun, ini dapat diatasi melalui berbagi status dan replikasi
Pekerjaan selanjutnya
- Menambahkan dukungan Intel TDX dan AMD SEV
- Porting ke AArch64
- Menambahkan fitur penguncian memori (
KVM_MEM_READONLY) → memperkuat keamanan
- Meningkatkan API agar lebih ramah pengguna
- Menambahkan dukungan pemuatan dynamic linking → memperkuat integrasi dengan Varnish
Kesimpulan
- TinyKVM adalah salah satu solusi sandbox yang paling kecil dan cepat
- Mencapai sekaligus penguatan keamanan dan optimasi performa
- Codebase yang kecil membuatnya mudah dipelihara
- Tersedia sebagai library open source → jika tertarik, Anda dapat melihat repositori kodenya
Repositori TinyKVM
2 komentar
Unik juga
Komentar Hacker News
Sangat menyukai ini. Semoga mereka terus melanjutkan apa yang sedang mereka kerjakan sekarang
Mirip Firecracker, tetapi jauh lebih cepat
Postingan asli: tautan
Sangat menarik. Kinerja pemulihan snapshot 2.5us setara dengan Wasmtime, tetapi punya keunggulan besar karena bisa menjalankan kode native. Namun, interoperabilitasnya jauh lebih lambat meski tetap berada pada satuan mikrodetik
Bukankah ini pada dasarnya seperti libkrun? tautan
Ini memang bukan penggunaan yang persis dituju, tetapi adakah yang punya pengalaman menjalankan server X (atau Wayland)?
Menarik, tetapi kesulitan memahami gambaran besarnya. Apakah ini menjalankan proses pengguna di VM tanpa kernel? Apakah semua system call menyebabkan VM keluar lalu diproksikan ke host? Atau memang tidak ada system call?
Jika cocok dengan use case-nya, ini benar-benar keren
Benar-benar keren
Artikelnya tidak mengatakan bahwa ini berjalan di atas Varnish, dan sebenarnya penulis mengatakan bahwa ini bukan untuk menjalankan Varnish