क्या WSL2 केवल एक VM है?
(ssg.dev)- Windows NT की सबसिस्टम संरचना अन्य ऑपरेटिंग सिस्टम के लिए प्रोग्राम चलाने हेतु एक API कॉल रूपांतरण लेयर पर आधारित रही है
- WSL1 ने इसी परंपरा को आगे बढ़ाते हुए Linux कॉल को Windows kernel कॉल में बदलने वाला हल्का अनुवाद लेयर का काम किया
- WSL2 में प्रदर्शन से जुड़ी समस्याएँ हल करने के लिए Hyper-V आधारित पूर्ण Linux VM में रूपांतरण हुआ और वास्तविक Linux kernel चलाया जाने लगा
- WSL2 में डायनामिक मेमोरी मैनेजमेंट, Windows ड्राइव माउंट, WSLg द्वारा GUI इंटीग्रेशन जैसी सुविधाओं की वजह से सामान्य VM की तुलना में अधिक एकीकरण मिलता है
- फ़ाइल प्रबंधन की असुविधा और डिस्क इमेज निर्भरता जैसी सीमाएँ होने के बावजूद, WSL1 और WSL2 के फायदे-नुकसान को चुनिंदा तौर पर मिलाकर इस्तेमाल करने की flexibility ही सबसे महत्वपूर्ण है
Windows NT में सबसिस्टम की अवधारणा
- Windows NT का सबसिस्टम(subsystem) अन्य ऑपरेटिंग सिस्टम के प्रोग्राम चलाने के लिए एक API सेट और कॉल रूपांतरण लेयर को दर्शाता है
- पुराने समय में NT में OS/2 सबसिस्टम(OS2SS.EXE) और POSIX सबसिस्टम(PSXSS.EXE) मौजूद थे
- CSRSS.EXE Win32 API अनुवाद लेयर के रूप में काम करता है, और कुछ क्षमताएँ kernel mode (
WIN32K.SYS) में चली गईं
- POSIX सबसिस्टम सरकार-मान्यता के लिए न्यूनतम इम्प्लीमेंटेशन था, जिसे बाद में Interix आधारित Windows Services for Unix से बदल दिया गया
WSL1: अनुवाद आधारित Linux लेयर
- WSL1(Windows Subsystem for Linux) Linux सिस्टम कॉल को Windows कॉल में बदलने वाला पतला अनुवाद लेयर है
- रन करते समय
bashप्रोसेस केवल कुछ MB मेमोरी लेता है और Task Manager में सामान्य प्रक्रिया के रूप में दिखता है - root फाइलसिस्टम NTFS पर अलग-अलग फाइल स्ट्रक्चर के रूप में मौजूद रहता है, इसलिए स्टोरेज ओवरहेड लगभग नहीं होता
- रन करते समय
- सीमाएँ
- I/O प्रदर्शन में गिरावट: Linux और Win32 फाइलसिस्टम API के अंतर से होने वाली ट्रांसलेशन लागत
- GUI चलाने के लिए बाहरी X server की जरूरत (जैसे: X410)
- Raw socket उपलब्ध नहीं होने से
traceroute,nmap,tcpdumpजैसे कमांड नहीं चल पाते
WSL2: Hyper-V आधारित Linux VM
- यूजर्स की जरूरत के अनुसार Microsoft ने Hyper-V पर चलने वाला पूर्ण Linux VM जोड़ा
- root फाइलसिस्टम एक single VHDX file में मैनेज होता है
- कमांड
wsl --set-version "Ubuntu" 2से WSL1 और WSL2 के बीच परिवर्तन संभव है
- प्रदर्शन विशेषताएँ
- cold boot थोड़ा धीमा होता है, लेकिन वास्तविक native Linux kernel चलता है
- मेमोरी उपयोग डायनमिक होता है और अधिकतम फिजिकल मेमोरी का आधा तक बढ़ सकता है
stressटेस्ट में मेमोरी लोड के साथ बढ़ने के बाद अपने आप घटती दिखती है- जरूरत पड़ने पर
wsl --shutdownसे VM बंद की जा सकती है
WSL2 की इंटीग्रेशन फीचर्स और सीमाएँ
- WSL2 पारंपरिक VM से अलग Windows इंटीग्रेशन को और मजबूत करता है
- Windows ड्राइव ऑटो-माउंट,
\\wsl$\पथ से Linux ड्राइव एक्सेस, और WSLg से GUI ऐप रन - GUI ऐप्स Remote Desktop Protocol के जरिए stream होते हैं, DPI और टेक्स्ट स्केलिंग के लिए अलग सेटिंग की जरूरत पड़ती है
- Windows ड्राइव ऑटो-माउंट,
- फाइल प्रबंधन की चुनौतियाँ
- Linux वर्क डेटा
ext4.vhdxइमेज के अंदर रहता है, जिससे portability और recovery risk मौजूद रहती है wsl --unregister Distroचलाने पर सभी डेटा तुरंत हट जाते हैं- Windows ड्राइव (
/mnt/c) का उपयोग करने पर NTFS + VM ओवरहेड के कारण प्रदर्शन घटता है
- Linux वर्क डेटा
- फाइलसिस्टम प्रोटोकॉल
- WSL1 में
drvfs, जबकि WSL2 में Plan9 का9pprotocol प्रयोग होता है - रूपांतरण प्रक्रिया में
drvfsसे जुड़ी बग की रिपोर्ट किए जाने के उदाहरण सामने आए हैं
- WSL1 में
- वैकल्पिक तरीका
- अलग VHDX image बना कर
wsl --mount --vhdसे mount करने पर वर्क डेटा अलग रखने की सलाह दी जाती है .wslconfigमें यह behavior auto सेट नहीं किया जा सकता, इसलिए स्क्रिप्ट के ज़रिये सेटअप करना पड़ता है
- अलग VHDX image बना कर
निष्कर्ष
- Windows NT की मॉड्यूलर डिज़ाइन और स्थिर kernel ABI पुराने ड्राइवरों की compatibility को बनाए रखती है
- WSL1 की ताकत इसका हल्का मेमोरी उपयोग है, जबकि WSL2 वास्तविक Linux kernel के कारण बेहतर compatibility और performance देता है
- WSL2 पारंपरिक VM के नुकसान को कम करके host OS के साथ इंटीग्रेशन को मजबूत करने वाला architecture देता है
- पारंपरिक परिभाषा में यह VM के करीब है, पर इसे “सबसिस्टम” कहने लायक एक हल्के एकीकृत वातावरण के रूप में भी देखा जा सकता है
3 टिप्पणियां
वाह, यहाँ डेवलपर ssug भी है
Hacker News की राय
WSL2 Hyper-V के subset पर चलता है, और मूल रूप से hypervisor के ऊपर चलने वाला एक VM है
लेकिन यह सामान्य Hyper-V VM से कुछ मायनों में अलग है। उदाहरण के लिए, WSL2 की Linux distribution GPU partitioning (यानी PCI/GPU passthrough) और DirectX के विशेष implementation के ज़रिए X या Wayland environment में भी GPU acceleration इस्तेमाल कर सकती है
ऐसे फीचर PowerShell आदि के ज़रिए कुछ hack करके सामान्य Hyper-V में भी संभव हैं, लेकिन आधिकारिक रूप से केवल Windows Server पर समर्थित हैं
हालांकि “X या Wayland rendering संभालते हैं” यह एक गलतफ़हमी है। वास्तव में GPU का उपयोग application खुद करती है, और X/Wayland rendering पूरी होने के बाद सिर्फ़ window compositing जैसा काम संभालते हैं
color conversion जैसे जटिल काम भी होते हैं, लेकिन उनकी computation कम होती है
WSL1 pico process पर आधारित था, और यह Drawbridge research से निकली तकनीक है
संबंधित वीडियो The Linux Kernel Hidden Inside Windows 10 और WSL Pico Process Overview देखें
यही Drawbridge तकनीक SQL Server को Linux पर चलाने में भी इस्तेमाल हुई
इसका विवरण Ars Technica लेख में है
समझ आता है कि WSL2 पर क्यों शिफ्ट किया गया, लेकिन WSL1 development को पूरी तरह बंद कर देना अफ़सोस की बात है
हमारा CI environment ज़्यादातर Linux-आधारित है, लेकिन कुछ toolchain Wine में ठीक से नहीं चलते (जैसे MSVC)
इसलिए हमें ऐसा environment चाहिए था जिसमें Windows पर Linux build सहज रूप से चल सके। WSL1 में यह संभव था, लेकिन WSL2 में process namespace या file descriptor साझा नहीं होते, इसलिए कई workaround की ज़रूरत पड़ती है
IO speed तेज़ हुई है, लेकिन file sharing धीमी है, इसलिए वास्तविक उपयोग के लिए यह उपयुक्त नहीं है
/mnt/cके ज़रिए Windows files तक पहुँचा जा सकता हैमैंने पहले Python C extension module इसी तरीके से build किया था
WSL2 Windows environment के साथ बहुत क़रीबी रूप से integrated VM है
कंपनी की policy के कारण Windows इस्तेमाल करना पड़ता है, इसलिए development के लिए इसे रोज़ाना उपयोग करता हूँ, और ज़्यादातर मामलों में अनुभव काफ़ी अच्छा है
हालांकि यह RHEL8-आधारित है, इसलिए केवल Debian-आधारित support होना असुविधाजनक है। जानना चाहता हूँ कि इन दिनों graphical app support कैसा है
psयाtopमें सिर्फ़ VM process ही दिखते हैं।docker run -it ubuntuसे भी मिलती-जुलती functionality मिल जाती है, तो फ़र्क़ क्या है, यह जानना चाहता हूँ।निजी तौर पर मुझे अलग-थलग workspace बहुत असुविधाजनक लगा
WSL2 आखिरकार हल्का VM ही है। यह Firecracker जैसी अवधारणा है, जिसका लक्ष्य fast boot और कम memory usage है
लेकिन कई Docker चलाने पर memory requirement बढ़ जाती है। आरामदायक उपयोग के लिए कम-से-कम 20GB या उससे ज़्यादा चाहिए
व्यक्तिगत रूप से मुझे WSL1 कहीं ज़्यादा उपयोगी लगता है। C++ और .NET toolchain, ssh/scp आदि ज़्यादातर CLI tools अच्छे से काम करते हैं
इसके उलट WSL2 लगभग बेकार है। अगर Linux VM चाहिए हो तो मैं VMware इस्तेमाल करता हूँ
VMware में snapshot tree, 3D acceleration, USB device connection, virtual network configuration जैसी सुविधाएँ भरपूर हैं और GUI भी सुविधाजनक है
WSL के अंदर का VM disk
\\wsl$path से access किया जा सकता हैअगर पुराना software UNC path support नहीं करता, तो उसे drive letter से map करके हल किया जा सकता है
VHDX file के लगातार बड़ी होती जाने की समस्या है। इसे manually compact करना पड़ता है
systemd-trimservice से कुछ हद तक समस्या कम हो सकती हैसंबंधित issue के लिए GitHub WSL #12103 देखें
फिर भी काम न बने तो manual optimization method इस्तेमाल किया जा सकता है
जानकारी के लिए, WSL डिफ़ॉल्ट रूप से Windows firewall rules को bypass करता है। समझ नहीं आता कि Microsoft ने इसे इस तरह क्यों डिज़ाइन किया
सोचता हूँ कि क्या वास्तविक ext4 partition mount करके image file-आधारित block device simulation से होने वाले performance loss को कम किया जा सकता है
जब मैं WSL2 का अक्सर इस्तेमाल करने लगा और धीरे-धीरे Linux का अलग से उपयोग कम होने लगा, तब मेरे मन में यह सोच आती है कि क्या यह भी EEE है?
EEE - अपनाना, विस्तार करना, और समाप्त करना (Embrace, Extend, and Extinguish)