9 คะแนน โดย GN⁺ 2025-12-02 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • โครงสร้าง subsystem ของ Windows NT เป็นการจัดวางระบบที่ทำหน้าที่เป็น ชั้นการแปลการเรียก API เพื่อรันโปรแกรมของระบบปฏิบัติการอื่น
  • WSL1 สืบสานแนวทางนี้ โดยทำงานเป็น ชั้นแปลที่กะทัดรัด ที่แปลงการเรียก Linux ไปเป็นการเรียกของเคอร์เนล Windows
  • WSL2 เปลี่ยนมาเป็น Linux VM แบบครบถ้วน บนพื้นฐาน Hyper-V เพื่อแก้ปัญหาประสิทธิภาพ และรัน เคอร์เนล Linux ตัวจริง
  • WSL2 ให้ความ ผสานรวมสูงกว่า VM แบบทั่วไปผ่าน การจัดการหน่วยความจำแบบไดนามิก, การเมานต์ไดรฟ์ของ Windows, และ การรวม GUI ผ่าน WSLg
  • แม้ยังมีข้อจำกัดด้านความไม่สะดวกในการจัดการไฟล์และการพึ่งพาอิมเมจดิสก์ แต่ความสำคัญคือความยืดหยุ่นในการเลือกใช้ ข้อดีและข้อเสียของ WSL1 กับ WSL2 ตามสถานการณ์

แนวคิดเรื่อง subsystem ของ Windows NT

  • Subsystem (subsystem) ของ Windows NT หมายถึง ชุด API และชั้นการแปลการเรียก เพื่อรันโปรแกรมของระบบปฏิบัติการอื่น
    • ในอดีต NT มี OS/2 Subsystem (OS2SS.EXE) , POSIX Subsystem (PSXSS.EXE) เป็นต้น
    • CSRSS.EXE ทำหน้าที่เป็นชั้นแปลง Win32 API โดยบางฟังก์ชันถูกย้ายไปทำงานที่โหมดเคอร์เนล (WIN32K.SYS)
  • POSIX Subsystem เป็นการใช้งานขั้นต่ำเพื่อการรับรองของรัฐบาล และต่อมาถูกแทนที่ด้วย Windows Services for Unix ที่อิงบน Interix

WSL1: ชั้น Linux แบบแปลงคำสั่ง

  • WSL1 (Windows Subsystem for Linux) เป็น ชั้นแปลบางส่วน ที่แปลง system call ของ Linux เป็นการเรียกของ Windows
    • เมื่อตอนรัน bash process จะใช้หน่วยความจำเพียงไม่กี่ MB และจะแสดงใน Task Manager เป็นโปรเซสปกติ
    • root filesystem มีอยู่เป็นโครงสร้างไฟล์รายตัวบน NTFS จึงแทบไม่มีค่าใช้จ่ายด้านพื้นที่จัดเก็บ
  • ข้อจำกัด
    • ประสิทธิภาพ I/O ลดลง: ค่าใช้จ่ายจากการแปลงเนื่องจากความต่างของ Linux และ Win32 filesystem API
    • เมื่อรัน GUI ต้องใช้ X server ภายนอก (เช่น X410)
    • ไม่รองรับ Raw socket ทำให้รัน traceroute, nmap, tcpdump ไม่ได้

WSL2: Linux VM บน Hyper-V

  • ตามความต้องการของผู้ใช้ Microsoft จึงนำเข้ารูปแบบ Linux VM ที่ทำงานบน Hyper-V แบบครบถ้วน
    • root filesystem ถูกจัดการเป็น ไฟล์ VHDX เดี่ยว
    • โดยใช้คำสั่ง wsl --set-version "Ubuntu" 2 เพื่อสลับระหว่าง WSL1 และ WSL2 ได้
  • ลักษณะประสิทธิภาพ
    • การบูตครั้งแรกช้ากว่า แต่สามารถรัน เคอร์เนล Linux แท้ ได้
    • การใช้หน่วยความจำเป็นแบบไดนามิก และ ขยายได้สูงสุดถึงครึ่งหนึ่งของหน่วยความจำกายภาพ
    • ผลทดสอบคำสั่ง stress ระบุว่าหน่วยความจำเพิ่มตามภาระงานแล้วลดลงอัตโนมัติ
    • เมื่อจำเป็นสามารถสั่งปิด VM ด้วยคำสั่ง wsl --shutdown ได้

ความสามารถในการผสานรวมและข้อจำกัดของ WSL2

  • WSL2 เสริมความผสานกับ Windows มากขึ้นเมื่อเทียบกับ VM แบบดั้งเดิม
    • การเมานต์ไดรฟ์ของ Windows โดยอัตโนมัติ, เข้าถึงไดรฟ์ Linux ผ่านพาธ \\wsl$\\, รันแอป GUI ผ่าน WSLg
    • แอป GUI จะถูกสตรีมผ่าน Remote Desktop Protocol และการปรับสเกล DPI หรือข้อความอาจต้องตั้งค่าแยก
  • ปัญหาการจัดการไฟล์
    • ข้อมูลงานของ Linux ถูกเก็บไว้ในอิมเมจ ext4.vhdx ทำให้เกิดความเสี่ยงด้านความพกพาและการกู้คืน
    • เมื่อรัน wsl --unregister Distro แล้ว ข้อมูลทั้งหมดจะถูกลบทันที
    • การใช้ Windows drive (/mnt/c) เผชิญการชะลอตัวจากโอเวอร์เฮดของ NTFS และ VM
  • โปรโตคอลระบบไฟล์
    • WSL1 ใช้ drvfs, WSL2 ใช้ โปรโตคอล 9p ของ Plan9
    • มีการกล่าวถึงกรณีข้อบกพร่องจากกระบวนการแปลงที่เกิดค้างเกี่ยวกับ drvfs
  • ทางเลือก
    • แนะนำให้สร้าง อิมเมจ VHDX แยก แล้วเมานต์ด้วย wsl --mount --vhd เพื่อแยกข้อมูลงาน
    • .wslconfig ไม่สามารถตั้งค่าอัตโนมัติได้ ต้องจัดการผ่านสคริปต์

สรุป

  • การออกแบบเชิงโมดูลของ Windows NT และ kernel ABI ที่เสถียร ช่วยคงความเข้ากันได้ของไดรเวอร์รุ่นเก่าไว้ได้
  • WSL1 มีข้อดีคือใช้หน่วยความจำต่ำ ส่วน WSL2 ให้ความเข้ากันได้และประสิทธิภาพสูงขึ้นด้วยเคอร์เนล Linux ตัวจริง
  • WSL2 เป็นโครงสร้างที่ ลดข้อเสียของ VM และเสริมการผสานกับ OS โฮสต์
  • ตามคำจำกัดความแบบดั้งเดิมแล้ว WSL2 ใกล้เคียง VM แต่มีคุณค่าเพียงพอที่จะเรียกว่า “subsystem” ในฐานะ “สภาพแวดล้อมผสานที่กะทัดรัด”

3 ความคิดเห็น

 
crawler 2025-12-02

ว้าว มีนักพัฒนาชื่อ Sseuk อยู่ด้วยนะ

 
GN⁺ 2025-12-02
ความเห็นจาก Hacker News
  • WSL2 ทำงานอยู่บน ส่วนย่อย ของ Hyper-V และโดยพื้นฐานแล้วก็เป็น VM บนไฮเปอร์ไวเซอร์
    แต่ก็มีจุดที่ต่างจาก Hyper-V VM ทั่วไปอยู่ เช่น Linux distribution บน WSL2 สามารถใช้ GPU acceleration ได้แม้ในสภาพแวดล้อม X หรือ Wayland ผ่าน GPU partitioning (กล่าวคือ PCI/GPU passthrough) และการติดตั้งใช้งาน DirectX แบบพิเศษ
    ฟีเจอร์แบบนี้ใน Hyper-V ทั่วไปก็พอทำได้ผ่านการแฮ็กด้วย PowerShell เป็นต้น แต่ในทางการรองรับเฉพาะบน Windows Server เท่านั้น

    • ผมนึกว่า GPU passthrough ใช้ได้บน Windows 11 ปกติด้วย แต่ไม่ได้ดูรายละเอียดมากนัก ถึงอย่างนั้นก็ยังเป็นความสามารถที่น่าประทับใจมาก
      กำลังคิดอยู่ว่าจะเขียนโพสต์ใหม่เกี่ยวกับฟีเจอร์ด้านกราฟิกเหล่านี้ดีไหม
    • สุดท้ายมันก็เป็นแค่ VM ปกตินั่นแหละ แต่จุดที่ดีคือทำทุกอย่างให้อัตโนมัติ
      เพียงแต่การบอกว่า “X หรือ Wayland เป็นตัวเรนเดอร์” นั้นเป็นความเข้าใจผิด จริง ๆ แล้วตัวที่ใช้ GPU คือแอปพลิเคชันเอง และ X/Wayland ทำหน้าที่ประมาณ window compositing หลังเรนเดอร์เสร็จเท่านั้น
      แม้จะมีงานซับซ้อนอย่างการแปลงสีก็จริง แต่ปริมาณการคำนวณไม่ได้มาก
    • WSL2 กับเคอร์เนล WinNT ไม่ได้ทำงานอยู่บน Hyper-V ในระดับที่แทบจะเท่ากันทั้งคู่หรือ? แน่นอนว่าเคอร์เนล NT มีสิทธิ์เข้าถึงฮาร์ดแวร์มากกว่า
    • ลองนึกภาพว่าต้องซื้อและติดตั้ง ไลเซนส์ Windows Server เพื่อรัน Linux ดูแล้วก็ตลกดี
    • การรวมกราฟิกของ WSL2 ทำให้ผิดหวังมากกว่าที่คาดไว้ การตั้งค่า X-server แบบเก่ากลับดีกว่า แต่ X ไม่รองรับ API สมัยใหม่ จึงทำให้นักพัฒนาค่อย ๆ หมดความสนใจ หวังว่าถ้า WSL2 รองรับมากขึ้นก็น่าจะดีขึ้น
  • WSL1 ใช้พื้นฐานแบบ pico process ซึ่งเป็นเทคโนโลยีที่แตกแขนงมาจากงานวิจัย Drawbridge
    ดูวิดีโอที่เกี่ยวข้อง The Linux Kernel Hidden Inside Windows 10 และ WSL Pico Process Overview
    เทคโนโลยี Drawbridge แบบเดียวกันนี้ยังถูกใช้ตอนรัน SQL Server บน Linux ด้วย
    มีอธิบายไว้ละเอียดใน บทความ Ars Technica

  • เข้าใจเหตุผลที่เปลี่ยนไปใช้ WSL2 แต่ก็น่าเสียดายที่หยุดพัฒนา WSL1 ไปเลย
    สภาพแวดล้อม CI ของเราส่วนใหญ่เป็น Linux แต่มี toolchain บางตัวที่ทำงานบน Wine ได้ไม่ดีนัก (เช่น MSVC)
    เลยจำเป็นต้องมีสภาพแวดล้อมที่รัน Linux build บน Windows ได้อย่างราบรื่น WSL1 ทำแบบนั้นได้ แต่ WSL2 ไม่แชร์ process namespace หรือ file descriptor จึงต้องใช้ วิธีอ้อม หลายอย่าง
    แม้ความเร็ว IO จะดีขึ้น แต่การแชร์ไฟล์ช้า จึงไม่เหมาะกับการใช้งานจริง

    • ใน WSL2 ก็ยังเข้าถึงไฟล์ Windows ผ่าน /mnt/c ได้
    • อีกวิธีคือใช้ clang-cl คู่กับ xwin แทน MSVC
      ผมเคยใช้วิธีนี้ build Python C extension module มาก่อน
  • WSL2 เป็น VM ที่ผสานรวมกับสภาพแวดล้อม Windows อย่างแนบแน่น
    ที่บริษัทบังคับให้ใช้ Windows ตามนโยบาย เลยใช้งานมันทุกวันเพื่อพัฒนา และในกรณีส่วนใหญ่ก็ถือว่าใช้งานได้สบายพอสมควร

    • ตอนนี้ผมทำงานอยู่บน VM ที่บริษัทจัดให้ แต่ประสิทธิภาพเริ่มอืดขึ้นเรื่อย ๆ เลยกำลังคิดว่าจะลองเปลี่ยนไปใช้ WSL2 ดีไหม
      แต่อิงกับ RHEL8 เลยไม่สะดวกที่รองรับแค่สาย Debian อยากรู้เหมือนกันว่าช่วงนี้การรองรับแอปกราฟิกเป็นอย่างไรบ้าง
    • บอกว่า “ผสานรวมอย่างแนบแน่น” แต่ในความเป็นจริง ps หรือ top ก็เห็นแค่โปรเซสใน VM เท่านั้น
      ใช้ docker run -it ubuntu ก็ให้ความสามารถคล้ายกันได้ เลยสงสัยว่าต่างกันตรงไหน
      สำหรับผมเอง workspace ที่แยกขาด นั้นใช้งานลำบากมาก
  • WSL2 ท้ายที่สุดก็คือ VM แบบ lightweight คล้ายแนวคิดของ Firecracker ที่เน้นบูตเร็วและใช้หน่วยความจำน้อย
    แต่ถ้ารัน Docker หลายตัวพร้อมกัน ความต้องการหน่วยความจำก็จะสูงขึ้น อย่างน้อยควรมีเกิน 20GB ถึงจะใช้งานได้สบาย

    • โชคดีที่เดี๋ยวนี้โน้ตบุ๊กแรม 32GB ก็ไม่ได้แพงเหมือนเมื่อก่อนแล้ว
    • WSL2 บูตเร็วมาก แค่ 1–2 วินาที เลยสงสัยว่าเขาทำได้อย่างไร เข้าใจว่าไม่มีหน้าจอ BIOS ก็ส่วนหนึ่ง แต่ดูเหมือนน่าจะมีการปรับแต่งอย่างอื่นอีก
  • โดยส่วนตัวผมว่า WSL1 มีประโยชน์กว่ามาก C++, .NET toolchain, ssh/scp และ เครื่องมือ CLI ส่วนใหญ่ทำงานได้ดี
    ส่วน WSL2 แทบไม่มีประโยชน์เลย ถ้าต้องการ Linux VM ผมใช้ VMware
    VMware มีฟีเจอร์ครบกว่า เช่น snapshot tree, 3D acceleration, การเชื่อมต่ออุปกรณ์ USB, การตั้งค่า virtual network และ GUI ก็ใช้งานสะดวก

  • ดิสก์ VM ภายใน WSL สามารถเข้าถึงได้ผ่านพาธ \\wsl$
    ถ้าซอฟต์แวร์เก่าไม่รองรับพาธแบบ UNC ก็แก้ได้ด้วยการแมปเป็นอักษรไดรฟ์

  • มีปัญหาที่ไฟล์ VHDX โตขึ้นเรื่อย ๆ ต้อง compact เองด้วยมือ

    • การเปิดใช้ sparse VHD ช่วยได้บ้าง แม้จะไม่สมบูรณ์ แต่แก้ได้บางส่วนด้วยบริการ systemd-trim
      ดูประเด็นที่เกี่ยวข้องได้ที่ GitHub WSL #12103
      ถ้ายังไม่พอ อาจใช้ วิธี optimize แบบ manual ได้
    • มีฟังก์ชันย่อขนาดอัตโนมัติอยู่เหมือนกัน แต่บางครั้งกลับก่อปัญหาเสียเอง
  • เพิ่มเติมคือ WSL โดยปกติจะ ข้ามกฎของ Windows Firewall ไปเลย ทำให้งงว่าทำไม Microsoft ถึงออกแบบแบบนี้

    • จริงเหรอ? ผมมีปัญหากับการเชื่อมต่อ ssh จาก WSL ตลอดเลย
  • สงสัยว่าจะสามารถเมานต์พาร์ทิชัน ext4 จริงเพื่อลด การสูญเสียประสิทธิภาพ ที่เกิดจากการจำลอง block device แบบอิงไฟล์ image ได้หรือไม่

 
tangokorea 9 일 전

พอเริ่มใช้ WSL2 บ่อยขึ้น ช่วงที่การใช้งานลินุกซ์ค่อย ๆ น้อยลง ผมก็เริ่มคิดขึ้นมาว่า นี่ก็เป็น EEE เหมือนกันหรือเปล่า?
EEE - โอบรับ, ขยาย, และทำลายล้าง (Embrace, Extend, and Extinguish)