Apakah WSL2 Bukan Sekadar VM?
(ssg.dev)- Arsitektur subsistem Windows NT selama ini dibangun sebagai lapisan penerjemah pemanggilan API untuk menjalankan program dari sistem operasi lain
- WSL1 melanjutkan tradisi ini sebagai lapisan translasi ringan yang menerjemahkan pemanggilan Linux menjadi pemanggilan kernel Windows
- WSL2 beralih menjadi VM Linux penuh berbasis Hyper-V untuk mengatasi masalah performa, dan menjalankan kernel Linux yang sesungguhnya
- WSL2 menawarkan integrasi yang lebih tinggi dibanding VM biasa lewat manajemen memori dinamis, mount drive Windows, dan integrasi GUI melalui WSLg
- Meski ada keterbatasan seperti pengelolaan file yang kurang praktis dan ketergantungan pada image disk, yang penting adalah fleksibilitas untuk memanfaatkan kelebihan dan kekurangan WSL1 dan WSL2 secara selektif
Konsep subsistem di Windows NT
- Subsistem (subsystem) di Windows NT mengacu pada sekumpulan API dan lapisan penerjemah pemanggilan untuk menjalankan program dari sistem operasi lain
- Di masa lalu, NT memiliki subsistem OS/2 (
OS2SS.EXE) dan subsistem POSIX (PSXSS.EXE), dan lain-lain CSRSS.EXEadalah lapisan penerjemah Win32 API, dan sebagian fungsinya kemudian dipindahkan ke mode kernel (WIN32K.SYS)
- Di masa lalu, NT memiliki subsistem OS/2 (
- Subsistem POSIX hanya merupakan implementasi minimal untuk memenuhi sertifikasi pemerintah, lalu kemudian digantikan oleh Windows Services for Unix berbasis Interix
WSL1: lapisan Linux berbasis translasi
- WSL1 (Windows Subsystem for Linux) adalah lapisan translasi tipis yang menerjemahkan system call Linux menjadi pemanggilan Windows
- Saat dijalankan, hanya proses
bashyang memakai beberapa MB memori, dan muncul sebagai proses biasa di Task Manager - Root filesystem disimpan sebagai struktur file individual di atas NTFS, sehingga nyaris tidak ada overhead ruang penyimpanan
- Saat dijalankan, hanya proses
- Keterbatasan
- Penurunan performa I/O: ada biaya translasi akibat perbedaan antara API filesystem Linux dan Win32
- Perlu X server eksternal untuk menjalankan GUI (misalnya X410)
- Tidak mendukung raw socket, sehingga
traceroute,nmap,tcpdump, dan sejenisnya tidak bisa dijalankan
WSL2: VM Linux berbasis Hyper-V
- Sesuai kebutuhan pengguna, Microsoft memperkenalkan VM Linux penuh yang berjalan di atas Hyper-V
- Root filesystem dikelola sebagai satu file VHDX tunggal
- Perintah
wsl --set-version "Ubuntu" 2memungkinkan konversi antara WSL1↔WSL2
- Karakteristik performa
- Boot awal lebih lambat, tetapi menjalankan kernel Linux native
- Penggunaan memori bersifat dinamis, dan dapat meluas hingga setengah dari memori fisik maksimum
- Hasil uji
stressmenunjukkan penggunaan memori meningkat sesuai beban lalu menyusut kembali secara otomatis - Jika perlu, VM dapat dimatikan dengan perintah
wsl --shutdown
Fitur integrasi dan batasan WSL2
- Berbeda dari VM tradisional, WSL2 memperkuat integrasi dengan Windows
- Drive Windows di-mount otomatis, drive Linux dapat diakses melalui path
\\wsl$\, dan aplikasi GUI dapat dijalankan lewat WSLg - Aplikasi GUI di-stream melalui protokol Remote Desktop, sedangkan DPI atau text scaling perlu diatur terpisah
- Drive Windows di-mount otomatis, drive Linux dapat diakses melalui path
- Masalah pengelolaan file
- Data kerja Linux disimpan di dalam image
ext4.vhdx, sehingga ada risiko terhadap portabilitas dan pemulihan - Saat menjalankan
wsl --unregister Distro, semua data langsung terhapus - Saat memakai drive Windows (
/mnt/c), performa menurun karena overhead NTFS + VM
- Data kerja Linux disimpan di dalam image
- Protokol filesystem
- WSL1 memakai
drvfs, sedangkan WSL2 memakai protokol9pdari Plan9 - Disebutkan ada kasus bug di mana
drvfsmasih tertinggal dalam proses konversi
- WSL1 memakai
- Alternatif
- Disarankan memisahkan data kerja dengan membuat image VHDX terpisah lalu me-mount-nya lewat
wsl --mount --vhd - Pengaturan otomatis dari
.wslconfigtidak dimungkinkan, sehingga perlu ditangani dengan skrip
- Disarankan memisahkan data kerja dengan membuat image VHDX terpisah lalu me-mount-nya lewat
Kesimpulan
- Desain modular Windows NT dan ABI kernel yang stabil menjaga kompatibilitas driver lama
- WSL1 unggul dalam penggunaan memori yang ringan, sedangkan WSL2 menghadirkan kompatibilitas dan performa yang lebih tinggi lewat kernel Linux asli
- WSL2 adalah struktur yang meminimalkan kelemahan VM sambil memperkuat integrasi dengan OS host
- Dalam definisi tradisional, ia memang dekat dengan VM, tetapi sebagai lingkungan terintegrasi yang ringan, ia tetap layak disebut “subsistem”
3 komentar
Wah, ada Sseuk si pengembang di sini
Komentar Hacker News
WSL2 berjalan di atas subset dari Hyper-V, dan pada dasarnya adalah VM di atas hypervisor
Namun ada perbedaan dibanding VM Hyper-V biasa. Misalnya, distro Linux di WSL2 bisa memakai akselerasi GPU bahkan di lingkungan X atau Wayland melalui partisi GPU (yakni PCI/GPU passthrough) dan implementasi khusus DirectX
Fitur seperti ini juga bisa dilakukan di Hyper-V biasa lewat berbagai hack dengan PowerShell dan sejenisnya, tetapi secara resmi hanya didukung di Windows Server
Hanya saja, anggapan bahwa “X atau Wayland menangani rendering” itu kurang tepat. Yang benar-benar memakai GPU adalah aplikasinya sendiri, sedangkan X/Wayland hanya menangani komposisi jendela setelah rendering selesai
Ada juga pekerjaan rumit seperti konversi warna, tetapi beban komputasinya kecil
WSL1 berbasis pico process, teknologi turunan dari riset Drawbridge
Lihat video terkait The Linux Kernel Hidden Inside Windows 10 dan WSL Pico Process Overview
Teknologi Drawbridge yang sama juga dipakai saat menjalankan SQL Server di Linux
Dijelaskan lebih rinci dalam artikel Ars Technica
Saya paham alasan berpindah ke WSL2, tetapi sayang sekali pengembangan WSL1 dihentikan sepenuhnya
Lingkungan CI kami sebagian besar berbasis Linux, tetapi beberapa toolchain tidak berjalan baik di Wine (misalnya MSVC)
Karena itu kami butuh lingkungan yang bisa menjalankan build Linux dengan lancar di Windows. WSL1 bisa melakukan ini, tetapi WSL2 tidak berbagi namespace proses maupun file descriptor, sehingga perlu banyak solusi akal-akalan
Kecepatan IO memang meningkat, tetapi berbagi file lambat, jadi kurang cocok untuk penggunaan nyata
/mnt/cSaya pernah membangun modul ekstensi C Python dengan cara ini
WSL2 adalah VM yang sangat terintegrasi erat dengan lingkungan Windows
Karena kebijakan perusahaan mengharuskan memakai Windows, saya memakainya setiap hari untuk pengembangan, dan untuk sebagian besar kasus pengalamannya cukup nyaman
Tapi basisnya RHEL8, jadi agak merepotkan kalau hanya distro turunan Debian yang didukung. Saya juga penasaran bagaimana dukungan aplikasi grafisnya sekarang
psatautopyang terlihat hanya proses VM.Fitur serupa juga bisa didapat dengan
docker run -it ubuntu, jadi saya penasaran apa bedanya.Secara pribadi, ruang kerja yang terpisah terasa sangat tidak nyaman
WSL2 pada akhirnya adalah VM ringan. Konsepnya mirip Firecracker, dengan target boot cepat dan penggunaan memori rendah
Tetapi kalau menjalankan banyak Docker, kebutuhan memorinya membengkak. Minimal perlu lebih dari 20GB agar tetap nyaman
Secara pribadi WSL1 jauh lebih berguna. Sebagian besar alat CLI seperti toolchain C++ dan .NET, ssh/scp, dan lainnya berjalan baik
Sebaliknya, WSL2 hampir tidak berguna. Kalau butuh Linux VM, saya pakai VMware
VMware punya fitur yang jauh lebih kaya seperti pohon snapshot, akselerasi 3D, koneksi perangkat USB, konfigurasi jaringan virtual, dan GUI yang nyaman
Disk VM di dalam WSL bisa diakses melalui path
\\wsl$Jika perangkat lunak lama tidak mendukung path UNC, itu bisa diatasi dengan memetakkannya ke huruf drive
Ada masalah file VHDX yang terus membesar. Harus di-compact secara manual
systemd-trimLihat isu terkait di GitHub WSL #12103
Jika masih tidak berhasil, bisa memakai metode optimasi manual
Sebagai catatan, secara default WSL melewati aturan firewall Windows. Saya heran kenapa Microsoft merancangnya seperti ini
Saya penasaran apakah memasang partisi ext4 sungguhan bisa mengurangi penurunan performa akibat simulasi perangkat blok berbasis file image
Saat saya jadi makin sering menggunakan WSL2 dan perlahan makin jarang memakai Linux secara langsung, saya jadi berpikir: apakah ini juga EEE?
EEE - merangkul, memperluas, lalu mematikan (Embrace, Extend, and Extinguish)