WSL2, sadece basit bir VM mi?
(ssg.dev)- Windows NT'nin alt sistem yapısı, farklı işletim sistemleri için uygulama çalıştırmak amacıyla bir API çağrı dönüştürme katmanı olarak gelmiştir
- WSL1 bu geleneği sürdüren biçimde, Linux çağrılarını Windows çekirdek çağrılarına dönüştüren hafif bir çeviri katmanı olarak çalışır
- WSL2, performans sorunlarını çözmek için Hyper-V tabanlı tam bir Linux VM'e geçerek gerçek bir Linux çekirdeği çalıştırır
- WSL2, dinamik bellek yönetimi, Windows sürücü montajı, WSLg ile GUI entegrasyonu gibi özellikleriyle klasik VM'den daha yüksek entegrasyon sağlar
- Dosya yönetiminin zorlukları ve disk imajına bağımlılık gibi sınırlamalar olsa da, WSL1 ve WSL2'nin artılarını ve eksilerini duruma göre seçebilmeyi sağlayan esneklik önemlidir
Windows NT'deki alt sistem kavramı
- Windows NT'deki alt sistem (subsystem), farklı işletim sistemlerine ait programları çalıştırmak için bir API kümesi ve çağrı dönüştürme katmanı anlamına gelir
- Geçmişte NT'de OS/2 alt sistemi (OS2SS.EXE), POSIX alt sistemi (PSXSS.EXE) bulunuyordu
- CSRSS.EXE, Win32 API çeviri katmanıydı; bazı işlevler çekirdek moduna (
WIN32K.SYS) taşındı
- POSIX alt sistemi, devlet onayı için minimum düzeyde bir uygulamaydı ve daha sonra Interix tabanlı Windows Services for Unix ile değiştirildi
WSL1: Çeviri tabanlı Linux katmanı
- WSL1 (Windows Subsystem for Linux), Linux sistem çağrılarını Windows çağrılarına çeviren ince bir çeviri katmanıdır
- Çalıştırıldığında yalnızca birkaç MB bellek kullanan bir
bashsüreci bulunur ve Task Manager'da normal bir süreç olarak görünür - Kök dosya sistemi NTFS üzerindeki tekil dosya yapısında bulunur ve bu nedenle depolama alanı overhead'i neredeyse yoktur
- Çalıştırıldığında yalnızca birkaç MB bellek kullanan bir
- Kısıtlamalar
- I/O performans düşüşü: Linux ile Win32 dosya sistemi API farkından doğan dönüştürme maliyeti
- GUI çalıştırırken harici bir X sunucusu gerekir (ör. X410)
- Raw socket desteklenmez;
traceroute,nmap,tcpdumpgibi araçlar çalıştırılamaz
WSL2: Hyper-V tabanlı Linux VM
- Kullanıcı taleplerine göre Microsoft, Hyper-V üzerinde çalışan tam bir Linux VM modelini benimsedi
- Kök dosya sistemi tek bir VHDX dosyası ile yönetilir
wsl --set-version "Ubuntu" 2komutuyla WSL1 ile WSL2 arasında geçiş yapılabilir
- Performans özellikleri
- İlk açılış yavaştır ama yerel Linux çekirdeği çalıştırılır
- Bellek kullanımı dinamik olup, fiziksel belleğin en fazla yarısına kadar genişleyebilir
stresstesti sonuçlarına göre, bellek kullanımı yük arttıkça yükselir ve sonra otomatik olarak düşer- İstenirse
wsl --shutdownkomutuyla VM kapatılabilir
WSL2'nin entegrasyon özellikleri ve sınırlamaları
- WSL2, geleneksel VM'lerin aksine Windows ile entegrasyonu güçlendirir
- Windows sürücülerinin otomatik montajı, Linux sürücülerine
\\wsl$yolu ile erişim, WSLg ile GUI uygulamaları çalıştırma - GUI uygulamaları Remote Desktop Protokolü ile akışla iletilir ve DPI veya metin ölçekleme için ayrı ayar gerektirir
- Windows sürücülerinin otomatik montajı, Linux sürücülerine
- Dosya yönetimi sorunu
- Linux iş verisi,
ext4.vhdximajının içinde saklandığı için taşınabilirlik ve kurtarma (recovery) riski vardır wsl --unregister Distrokomutu çalıştırıldığında tüm veriler anında silinir- Windows sürücüsünü (
/mnt/c) kullanırken NTFS + VM ek yükü nedeniyle performans düşer
- Linux iş verisi,
- Dosya sistemi protokolü
- WSL1
drvfs, WSL2 ise Plan9'un9pprotokolünü kullanır - Dönüşümde
drvfsyüzünden kalan bazı hata örnekleri belirtilir
- WSL1
- Alternatif
- Ayrı bir VHDX imajı oluşturarak
wsl --mount --vhdile mount etmek ve iş verisini ayırmak önerilir .wslconfigiçinde otomatik ayar yapılamaz, script ile işlenmesi gerekir
- Ayrı bir VHDX imajı oluşturarak
Sonuç
- Windows NT'nin modüler tasarımı ve kararlı çekirdek ABI'si, eski sürücü uyumluluğunu korur
- WSL1 hafif bellek kullanımının avantajına sahiptir; WSL2 ise gerçek Linux çekirdeği ile daha yüksek uyumluluk ve performans sağlar
- WSL2, VM'in dezavantajlarını en aza indirip ana işletim sistemiyle entegrasyonu güçlendiren bir yapıdır
- Geleneksel bir tanıma göre VM'e yakın olsa da, hafif entegre bir ortam olarak “alt sistem” denmeye değer
3 yorum
Vay, geliştiriciye hafif bir laf sokma da varmış.
Hacker News yorumu
WSL2, Hyper-V'nin bir alt kümesi üzerinde çalışır; yani temelde hypervisor üstündeki bir VM'dir
Ancak normal bir Hyper-V VM'inden farklı yönleri vardır. Örneğin WSL2 Linux dağıtımları, GPU partitioning (yani PCI/GPU passthrough) ve DirectX'in özel bir uygulaması sayesinde X veya Wayland ortamlarında da GPU hızlandırmasını kullanabilir
Bu tür özellikler PowerShell vb. ile yapılan hack'lerle normal Hyper-V'de de mümkün olabilir, ancak resmî olarak yalnızca Windows Server üzerinde desteklenir
Yalnız “render işini X veya Wayland yapıyor” demek yanlış olur. GPU'yu gerçekten kullanan uygulamanın kendisidir; X/Wayland ise render tamamlandıktan sonra esas olarak pencere birleştirme işini yapar
Renk dönüşümü gibi daha karmaşık işler de vardır ama hesaplama yükü düşüktür
WSL1, pico process tabanlıdır ve Drawbridge araştırmasından türeyen bir teknolojidir
İlgili videolar: The Linux Kernel Hidden Inside Windows 10 ve WSL Pico Process Overview
Aynı Drawbridge teknolojisi, SQL Server'ı Linux üzerinde çalıştırırken de kullanılmıştır
Ayrıntılar Ars Technica makalesinde yer alıyor
WSL2'ye geçiş nedenini anlıyorum, ama WSL1 geliştirmesinin tamamen durdurulması üzücü
CI ortamımızın çoğu Linux tabanlı, ancak bazı toolchain'ler Wine üzerinde iyi çalışmıyor (örneğin MSVC)
Bu yüzden Windows üzerinde Linux build'lerini sorunsuz çalıştırabilecek bir ortama ihtiyacımız vardı. WSL1 bunu mümkün kılıyordu, ama WSL2 process namespace veya file descriptor paylaşmadığı için çeşitli geçici çözümler gerekiyor
IO hızı artmış olsa da dosya paylaşımı yavaş olduğundan pratik kullanım için uygun değil
/mnt/cüzerinden Windows dosyalarına erişmek mümkünGeçmişte Python C extension modüllerini bu yöntemle derlemiştim
WSL2, Windows ortamıyla çok sıkı entegre edilmiş bir VM'dir
Şirket politikası gereği Windows kullanmak zorundayım ve geliştirme için her gün kullanıyorum; çoğu durumda oldukça rahat
Ancak RHEL8 tabanlı bir ortam kullanıyoruz, Debian tabanlı sistemlerin desteklenmesi can sıkıcı. Grafik uygulama desteği bugünlerde nasıl merak ediyorum
psveyatopiçinde sadece VM süreçleri görünüyor.docker run -it ubuntuile de benzer şeyler yapılabiliyor; farkın tam olarak ne olduğunu merak ediyorum.Bana göre ayrılmış çalışma alanı çok rahatsız ediciydi
WSL2 sonuçta hafif bir VM'dir. Firecracker'a benzer bir fikirle hızlı açılış ve düşük bellek kullanımı hedeflenmiştir
Ancak birden fazla Docker çalıştırınca bellek ihtiyacı büyüyor. Rahat kullanım için en az 20 GB gerekiyor
Bana göre WSL1 çok daha kullanışlı. C++ ve .NET toolchain'leri, ssh/scp gibi çoğu CLI aracı sorunsuz çalışıyor
Buna karşılık WSL2'nin pek bir faydası yok. Linux VM gerekiyorsa VMware kullanıyorum
VMware, snapshot ağacı, 3D hızlandırma, USB aygıt bağlantısı, sanal ağ yapılandırması gibi zengin özellikler sunuyor ve GUI'si de kullanışlı
WSL içindeki VM diski
\\wsl$yolu üzerinden erişilebilirEski yazılımlar UNC yolunu desteklemiyorsa bunu bir sürücü harfine eşleyerek çözebilirsiniz
VHDX dosyasının durmadan büyümesi gibi bir sorun var. Elle compact etmek gerekiyor
systemd-trimservisiyle kısmen çözülebilirİlgili sorun için GitHub WSL #12103'e bakabilirsiniz
Bu da işe yaramazsa manuel optimizasyon yöntemini kullanabilirsiniz
Ayrıca WSL'nin varsayılan olarak Windows güvenlik duvarı kurallarını baypas ettiği söyleniyor. Microsoft'un bunu neden böyle tasarladığını merak ediyorum
Gerçek bir ext4 bölümünü mount ederek, image dosyası tabanlı block device simülasyonundan kaynaklanan performans kaybını azaltmak mümkün olur mu diye merak ediyorum
WSL2’yi sık kullanmaya başladıkça Linux kullanımım giderek azalırken, bunun da EEE olup olmadığını düşünmeye başlıyorum.
EEE - Benimse, genişlet ve yok et (Embrace, Extend, and Extinguish)