เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 3) — เครื่องเสมือนที่บูตในไม่กี่วินาที: ทำไม WSL2, Windows Sandbox และคอนเทนเนอร์จึงเบา

· · Windows, การจำลองเสมือน, WSL2, Windows Sandbox, คอนเทนเนอร์, Hyper-V

เมื่อคุณสร้าง Windows VM ใน Hyper-V Manager มันใช้เวลาหลายสิบวินาทีในการเริ่มและผูกขาดหน่วยความจำหลายกิกะไบต์ แต่บนเครื่องเดียวกัน การพิมพ์ wsl คืนเชลล์ Linux ภายในไม่กี่วินาที และ Windows Sandbox เปิดเดสก์ท็อปใช้แล้วทิ้งในไม่กี่วินาทีเช่นกัน1

ทั้งคู่ตั้งบน Windows hypervisor เดียวกัน (ตอนที่ 1 “Windows ของคุณรันอยู่ที่ไหนจริง ๆ?”) ในตอนที่ 2 เราเห็นว่ารากฐานนี้สร้างการแยกที่แข็งกว่าเคอร์เนลได้ แล้วทำไมอันหนึ่งหนักและอีกอันเบา?

คำถามที่ตอนสุดท้ายของซีรีส์ตอบมีเพียงข้อเดียว

VM เต็มตัวหนัก — แล้วทำไม WSL2 และ Windows Sandbox จึงเบา?

ผู้อ่านที่ตั้งใจ คือนักพัฒนาและผู้ปฏิบัติการที่ใช้ WSL2, Windows Sandbox และคอนเทนเนอร์ Windows สำหรับการพัฒนาและการตรวจ และอยากเข้าใจความเบากับข้อจำกัดจากกลไกขึ้นมา ข้อกำหนดเบื้องต้น คือ Windows 10/11 การเดินตามหมวด Windows Sandbox ต้องการรุ่น Pro, Enterprise หรือ Education (Home และ Windows Server ไม่มีฟีเจอร์นี้) พื้นความรู้ คือแนวคิดพาร์ติชันจากตอนที่ 1 ความยากคือระดับกลาง

1. สรุปก่อนเลย

VM น้ำหนักเบาเก็บเส้นการแยก (เคอร์เนลเฉพาะและขอบเขต hypervisor) ไว้ และทำให้น้ำหนักของ “สำเนาของ OS เกสต์ครบชุด” เบาลง Sandbox ใช้ Windows ของโฮสต์เองร่วมกัน WSL2 แทนที่เกสต์ด้วย Linux เล็กที่สร้างเฉพาะงาน และในทั้งสองกรณี หน่วยความจำไม่ใช่การจองคงที่ แต่เป็นการยืมและให้ยืมแบบไดนามิกกับโฮสต์

แหล่งของน้ำหนักของ VM เต็มตัวไม่ใช่การแยกเอง แต่เป็นการทำซ้ำ อิมเมจ OS อีกชุดบนดิสก์ เพจอีกชุดเท่ากับ OS อีกตัวใน RAM และการบูตเต็มอีกครั้งทุกครั้งที่เริ่ม VM น้ำหนักเบาตัดการทำซ้ำนั้นด้วยสองนโยบาย: “ใช้ร่วมสิ่งที่ปลอดภัยที่จะใช้ร่วม” (Sandbox) และ “หากใช้ร่วมไม่ได้ ให้สร้างใหม่ให้เล็ก” (WSL2)

การใช้ร่วมสามชนิดที่รองรับ VM น้ำหนักเบาอิมเมจ OS ที่ VM เต็มตัวเคยทำซ้ำถูกตัดด้วยการใช้ร่วมใน Sandbox และการย่อใน WSL2 หน่วยความจำที่เป็นการจัดสรรคงที่ตามค่าเริ่มต้น (หน่วยความจำไดนามิกคือข้อยกเว้น) กลายเป็นการยืมให้ยืมแบบไดนามิกกับโฮสต์ การเริ่มต้นถูกแทนที่ด้วยเคอร์เนลเบาและการตั้งค่าขั้นต่ำ เหลือเพียงขอบเขตการแยกถูกแทนที่ด้วยถูกแทนที่ด้วยถูกแทนที่ด้วยVM เต็มตัว: การทำซ้ำดิสก์: สำเนาอิมเมจ OSหน่วยความจำหรือการเริ่ม?หน่วยความจำ: ค่าเริ่มต้นคงที่การเริ่ม: บูตเต็มใช้ร่วม(Sandbox)หรือย่อ(WSL2)การยืมจากโฮสต์แบบไดนามิกเคอร์เนลเบา + ขั้นต่ำ

ภาพ 1: โครงของคำตอบต่อ “hypervisor เดียวกัน แต่เบา” คือพวกมันหยุดทำซ้ำ ไม่ใช่หยุดแยก

ด้านล่างเราดู WSL2, Windows Sandbox และคอนเทนเนอร์ตามลำดับนั้น และว่าแต่ละอันตัดการทำซ้ำชนิดใด

2. สิ่งที่ VM เต็มตัวกำลังแบก

ในฐานะเส้นฐานสำหรับการเปรียบเทียบ นี่คือสิ่งที่ VM แบบดั้งเดิมแบก

  • อิมเมจ OS อิสระ มันถือทุกไฟล์ของ OS เกสต์ในดิสก์เสมือน แม้โฮสต์มี Windows เดียวกัน ก็ไม่ใช้ร่วม
  • การจัดสรรหน่วยความจำหยาบ ค่าเริ่มต้นของ VM แบบดั้งเดิมคือจัดสรรหน่วยความจำโฮสต์ที่ขนาดคงที่ กลไกอย่าง Hyper-V Dynamic Memory สามารถขยายและหดการจัดสรรในช่วงที่ตั้งได้ แต่วิธีปรับตามการเปลี่ยนแปลงของความต้องการมีจำกัด2
  • การบูตเต็มเอนกประสงค์ เฟิร์มแวร์ ตัวโหลดบูต และชุดบริการเริ่มในลำดับเดียวกับบนเครื่องจริง
สามภาระที่ VM เต็มตัวแบกVM เต็มตัวแบกอิมเมจ OS อิสระ การจัดสรรหน่วยความจำที่คงที่ตามค่าเริ่มต้น และการบูตเต็มเอนกประสงค์ และสิ่งเหล่านั้นปรากฏเป็นต้นทุนในดิสก์ RAM และเวลาเริ่มต้นVM เต็มตัวอิมเมจ OS อิสระหน่วยความจำหรือบูต?ค่าเริ่มต้นหน่วยความจำคงที่บูตเอนกประสงค์ดิสก์เพิ่มสำหรับสำเนาถือ RAM ที่ไม่ได้ใช้ด้วยใช้เวลาหลายสิบวินาที

ภาพ 2: การแยกต้นทุนของ VM เต็มตัวถูกจ่ายไม่ใช่เพื่อการแยก แต่เพื่อความเป็นเอนกประสงค์และการทำซ้ำ

สิ่งเหล่านี้ไม่ใช่ข้อบกพร่อง แต่เป็นราคาของความเป็นเอนกประสงค์ที่ “คุณใส่เกสต์อะไรก็ได้” สำหรับงานอย่างการรัน Linux เก่าข้าง Windows Server ความเป็นเอนกประสงค์นั้นคือคุณค่า แต่สำหรับงานอย่าง “อยากรัน OS เดียวกับ (หรือที่กำหนดไว้ล่วงหน้ากับ) โฮสต์ ตอนนี้ สำหรับการพัฒนาหรือการตรวจ” ส่วนใหญ่เป็นสัมภาระที่เสียเปล่า VM น้ำหนักเบาวางสัมภาระนั้นลงด้วยการจำกัดวัตถุประสงค์

3. WSL2 — Utility VM กับเคอร์เนลที่สร้างเฉพาะงาน

3.1. โครงสร้าง: VM ที่ถูกจัดการและดิสทริบิวชันข้างใน

WSL2 คือกลไกที่รันเคอร์เนล Linux จริงใน utility VM น้ำหนักเบา3 มีสามจุด

  • เคอร์เนลเป็นของจริง แต่เป็นผลิตภัณฑ์เฉพาะทาง เป็นเคอร์เนล Linux ที่ Microsoft สร้างจากสาขา Stable ปรับขนาดและประสิทธิภาพสำหรับ WSL2 แล้ว ตามมาตรฐานปัจจุบัน WSL ที่แจกผ่าน Microsoft Store เคอร์เนลถูกอัปเดตร่วมกับแพ็กเกจ WSL เองและนำไปใช้ด้วย wsl --update (บนการแจกในกล่องรุ่นเก่า มันมาผ่าน Windows Update)4 เพราะเป็นเคอร์เนลจริง ความเข้ากันได้ของการเรียกระบบจึงครบ และเครื่องมืออย่าง Docker รันตามที่เป็น
  • VM อยู่เบื้องหลัง การสร้าง เริ่ม และหยุด VM ถูกจัดการโดย WSL ผู้ใช้เพียงเปิดเชลล์ ไม่มีหน้าจอตั้งค่า VM และไม่รู้สึกว่ารอการบูต4
  • ดิสทริบิวชันคือคอนเทนเนอร์ใน VM ดิสทริบิวชันอย่าง Ubuntu และ Debian รันเป็นคอนเทนเนอร์ที่แยกใน VM ที่ถูกจัดการหนึ่งตัว พวกมันใช้เนมสเปซเครือข่ายและเคอร์เนลร่วมกัน ขณะที่เนมสเปซอย่าง PID, mount และ user ถูกแยก3
สถาปัตยกรรม WSL2Windows โฮสต์และ utility VM น้ำหนักเบานั่งข้างกันบน hypervisor เคอร์เนล Linux ที่ Microsoft สร้างรันใน VM และแต่ละดิสทริบิวชันรันเป็นคอนเทนเนอร์ที่แยกในนั้นInterop (คำสั่ง ไฟล์ เครือข่าย)HypervisorWindows โฮสต์Utility VM น้ำหนักเบาเคอร์เนล Linux (สร้างโดย Microsoft อัปเดตด้วย wsl --update)Ubuntu (คอนเทนเนอร์)Debian (คอนเทนเนอร์)

ภาพ 3: คำตอบต่อ “WSL2 คือ VM หรือไม่” คือ “ใช่ แต่เป็น VM ที่ถูกจัดการอยู่เบื้องหลัง” และแม้คุณติดตั้งหลายดิสทริบิวชันก็ยังมี VM เพียงหนึ่งตัว

วินาทีที่คุณพิมพ์ wsl ฝั่งหลังมีลักษณะดังนี้

จากรันคำสั่ง wsl ถึงเชลล์ที่คืนในไม่กี่วินาทีหาก utility VM ไม่ได้รันเมื่อรัน wsl VM น้ำหนักเบาและเคอร์เนล Linux จะเริ่ม หากกำลังรันอยู่แล้วจะถูกใช้ซ้ำ และเชลล์คืนในคอนเทนเนอร์ของดิสทริบิวชันไม่ใช่รัน wslUtility VM กำลังรันอยู่แล้วหรือไม่?เริ่ม VM น้ำหนักเบาและเคอร์เนล Linux (ไม่กี่วินาที)ใช้ VM ที่กำลังรันอยู่ซ้ำเชลล์คืนในคอนเทนเนอร์

ภาพ 4: การรอมีเพียงการเริ่ม VM ขั้นต่ำ และนี่คือจุดที่การวางสัมภาระของการบูตเต็มปรากฏ

3.2. ไฟล์ I/O: ฝั่งที่คุณวางทำให้เป็นคนละเรื่อง

หัวข้อที่มักขึ้นในการพูดถึงประสิทธิภาพของ WSL2 คือคุณวางไฟล์ไว้ที่ไหน

  • การทำงานบนไฟล์ฝั่ง Linux (ดิสก์เสมือน ext4) เร็ว เพราะเคอร์เนล Linux พูดกับระบบไฟล์ของตนเองโดยตรง และการเร่งความเร็วสูงสุด 20 เท่าเทียบกับ WSL1 สำหรับการแตก tarball และ 2–5 เท่าสำหรับ git clone กับ npm install ถูกรายงานไว้4
  • การทำงานบนไฟล์ฝั่ง Windows (/mnt/c เป็นต้น) ช้าเพราะผ่านการแชร์ไฟล์ที่ข้ามขอบเขต OS ประสิทธิภาพระบบไฟล์ข้าม OS คือรายการใหญ่หนึ่งข้อที่ WSL2 แย่กว่า WSL14

ดังนั้นกฎคือ: “วางไฟล์โปรเจกต์ไว้ฝั่ง OS เดียวกับเครื่องมือที่ทำงานกับไฟล์นั้น”4 ที่เก็บที่คุณจัดการด้วยเครื่องมือบิลด์ Linux ไปฝั่ง Linux โซลูชันที่คุณบิลด์ใน Visual Studio ไปฝั่ง Windows

ส้อมของเส้นทางไฟล์ I/O ของ WSL2การเข้าถึงดิสก์เสมือน ext4 ฝั่ง Linux เป็นตรงจากเคอร์เนล Linux จึงเร็ว การเข้าถึงไฟล์ฝั่ง Windows ผ่านการแชร์ไฟล์ที่ข้ามขอบเขต OS จึงช้าฝั่ง Linux (home เป็นต้น)ฝั่ง Windows (/mnt/c เป็นต้น)การทำงานกับไฟล์ใน WSL2ไฟล์อยู่ฝั่งใด?I/O ตรงไปยังดิสก์เสมือน ext4ผ่านการแชร์ที่ข้ามขอบเขต OSเร็ว (ตัวอย่างสูงสุด 20 เท่าเทียบ WSL1)มีแนวโน้มช้าแก้: วางไฟล์บน OS ที่ใช้

ภาพ 5: สิ่งที่ช้าคือเส้นทาง ไม่ใช่ WSL2 ดังนั้นการเปลี่ยนตำแหน่งที่วางไฟล์มักทำให้ปัญหาประสิทธิภาพหายไป

3.3. หน่วยความจำ: มันโต มันหด แต่ไม่ได้คืนทุกอย่างเสมอ

การใช้หน่วยความจำของ WSL2 (คุณเห็นเป็นโปรเซส vmmem ใน Task Manager) ไม่ใช่การจองคงที่ มันโตและหดตามการใช้งาน หน่วยความจำที่โปรเซสปล่อยแล้วถูกคืนให้ Windows อัตโนมัติภายใต้การตั้งค่า pageReporting ซึ่งเปิดตามค่าเริ่มต้น5 เพจที่ถือเป็นแคชไฟล์เคยไม่คืนให้ Windows จนกว่า VM จะออก4 ใน WSL ปัจจุบัน การตั้งค่าทดลอง .wslconfig ชื่อ autoMemoryReclaim (ค่าเริ่มต้นคือ dropCache) เรียกคืนแคชอัตโนมัติเช่นกัน5 ในสภาพแวดล้อมที่การตั้งค่านี้เป็น disabled หรือบน WSL เก่า แคชของเซสชันยาวอาจเหลือจนกว่า VM จะออกและกดหน่วยความจำโฮสต์ได้

วิธีที่หน่วยความจำ WSL2 โต หด และถูกคืนความต้องการที่โตใน WSL2 ยกการใช้หน่วยความจำของ VM เพจที่โปรเซสปล่อยถูกคืนให้ Windows ภายใต้ pageReporting ซึ่งเปิดตามค่าเริ่มต้น แคชไฟล์ถูกเรียกคืนอัตโนมัติโดย autoMemoryReclaim ตามค่าเริ่มต้น แต่บนการตั้งค่าที่ปิดหรือ WSL เก่า มันเหลือจนกว่า VM จะออก และ wsl --shutdown คืนทุกอย่างโปรเซสปล่อย (เมื่อ pageReporting เปิด)ถือเป็นแคชไฟล์ความต้องการหน่วยความจำโตใน WSL2การใช้ vmmem โตเพจนั้นถูกปล่อยแล้วหรือไม่?คืนให้ Windows อัตโนมัติautoMemoryReclaim เรียกคืนอัตโนมัติ (ค่าเริ่มต้น)บนการตั้งค่าที่ปิดหรือ WSL เก่า เหลือจนกว่า VM จะออกwsl --shutdown คืนทุกอย่าง

ภาพ 6: สิ่งที่ดูเหมือน “มันโตอย่างเดียว” ส่วนใหญ่คือแคช (และเมื่อ pageReporting ปิด เพจที่โปรเซสปล่อยด้วย) จึงรู้จักเส้นทางคืนก่อนตัดสินว่าเป็นการรั่ว

หากคุณอยากได้เพดานชัดเจน %UserProfile%\.wslconfig สามารถควบคุมหน่วยความจำรวมของ VM จำนวน CPU และสวอปได้5

# %UserProfile%\.wslconfig
[wsl2]
memory=8GB
processors=4
swap=2GB

หลังเปลี่ยนการตั้งค่า ให้รีสตาร์ท VM ด้วย wsl --shutdown เพื่อให้มีผล การจัดสรรแบบไดนามิกนี้ — “เพดานคือการตั้งค่า การใช้จริงตามความต้องการ” — ถูกพาไปไกลกว่าในหัวข้อถัดไปคือ Windows Sandbox

4. Windows Sandbox — ใช้ Windows ของโฮสต์ซ้ำ

4.1. Dynamic Base Image: Windows ครบชุดใน 500 MB

Windows Sandbox คือเดสก์ท็อป Windows ใช้แล้วทิ้งที่แยกด้วย hypervisor ปิดแล้วทุกอย่างหาย ครั้งถัดไปเริ่มในไม่กี่วินาทีจากสถานะสะอาด1

ปริศนาแรกคือดิสก์ มันบูต Windows ครบชุดได้ แต่อิมเมจฐานของ Sandbox มีเพียงประมาณ 500 MB หลังติดตั้ง และ 30 MB เมื่อบีบอัดตอนแจก2 ความลับคือ dynamic base image

  • ไฟล์ OS ส่วนใหญ่เปลี่ยนแปลงไม่ได้ จึงใช้สำเนาของโฮสต์ร่วมกันตามที่เป็น
  • ไฟล์ที่เปลี่ยนแปลงได้จำนวนน้อยใช้ร่วมไม่ได้ จึงเก็บสำเนาสะอาดไว้ในอิมเมจฐาน
  • ตอนเริ่ม ไฟล์ที่เปลี่ยนแปลงไม่ได้ของโฮสต์บวกสำเนาท้องถิ่นของไฟล์ที่เปลี่ยนแปลงได้ถูกรวมเพื่อประกอบอิมเมจ Windows ครบชุด2

กล่าวคือ Sandbox ไม่ดาวน์โหลดและไม่เก็บสำเนา Windows มันใช้ Windows ที่ติดตั้งบนโฮสต์อยู่แล้วซ้ำเพื่อเริ่ม

วิธีประกอบ dynamic base imageไฟล์ OS ที่เปลี่ยนแปลงไม่ได้จาก Windows โฮสต์ถูกใช้ร่วม มีเพียงไฟล์ที่เปลี่ยนแปลงได้ที่ถือเป็นสำเนาสะอาดในอิมเมจฐาน และทั้งคู่ถูกรวมเพื่อประกอบอิมเมจ Windows ครบชุดของ Sandboxใช้ร่วมตามที่เป็นเก็บสำเนาสะอาดWindows ครบชุดของโฮสต์ไฟล์ OS ที่เปลี่ยนแปลงไม่ได้ (ส่วนใหญ่)ไฟล์ OS ที่เปลี่ยนแปลงได้ (ส่วนน้อย)อิมเมจบูตของ Sandboxบูตเป็น Windows ครบชุดต้องเก็บเพียงประมาณ 500 MB

ภาพ 7: รูปของการเลิกทำซ้ำดิสก์ไม่ใช่ “เป็นเจ้าของอีก Windows หนึ่ง” แต่เป็น “ประกอบจาก Windows ของโฮสต์”

องค์ประกอบนั้นคือสิ่งที่ทำให้วงจรชีวิตต่อไปนี้เป็นไปได้ สิ่งที่ถูกทิ้งคือสถานะท้องถิ่นใน Sandbox หากคุณแมปโฟลเดอร์ที่เขียนได้จากโฮสต์ในไฟล์ตั้งค่า .wsb การเปลี่ยนแปลงที่นั่นเหลือบนโฮสต์6

วงจรชีวิตของ Windows Sandboxการเริ่มเตรียม Windows สะอาดในไม่กี่วินาที หลังตรวจแอปหรือทดลองคุณปิดแล้วสถานะทั้งหมดใน Sandbox ถูกทิ้งจึงเริ่มสะอาดครั้งถัดไปด้วย แต่การเปลี่ยนแปลงต่อโฟลเดอร์โฮสต์ที่แมปเป็นเขียนได้ยังเหลือการเริ่มครั้งถัดไปเริ่ม (ไม่กี่วินาที)Windows สะอาดการตรวจแอปหรือการทดลองปิดทิ้งสถานะทั้งหมดใน Sandboxการเปลี่ยนแปลงในโฟลเดอร์ที่แมปเป็นเขียนได้เหลือบนโฮสต์

ภาพ 8: การกลับสู่สถานะสะอาดทุกครั้งได้ เพราะส่วนที่เปลี่ยนแปลงได้เป็นสำเนาใช้แล้วทิ้ง และการทิ้งมันเป็นส่วนของการออกแบบ

4.2. Direct Map: ntdll.dll เดียวกันคือเพจจริงเดียวกัน

ไม่เพียงดิสก์ แต่ RAM ก็ถูกใช้ร่วมเช่นกัน เพราะ Sandbox รันอิมเมจ OS เดียวกับโฮสต์ จึงใช้เทคนิคชื่อ “direct map” เพื่อให้สำหรับไบนารี OS มันใช้เพจหน่วยความจำจริงเดียวกันกับโฮสต์ เมื่อ ntdll.dll ถูกโหลดเข้าหน่วยความจำใน Sandbox มันชี้ไปที่เพจจริงเดียวกันกับไบนารีเดียวกันที่โหลดบนโฮสต์แล้ว โดยไม่เปิดเผยความลับของโฮสต์ให้ตกอยู่ในอันตราย มันได้รอยเท้าหน่วยความจำเล็กกว่า VM แบบดั้งเดิมมาก2

“ใช้เพจจริงเดียวกันร่วมกันระหว่างผู้ใช้หลายคน” — นั่นคือแนวคิดเดียวกับการแชร์ DLL ผ่าน section object ที่เราตามในตอนที่ 3 ของซีรีส์หน่วยความจำ (“Section Object และ Copy-on-Write”) กลไกนั้นเป็นการใช้ร่วมระหว่างโปรเซส Sandbox ทำข้ามขอบเขต VM

การใช้เพจจริงร่วมผ่าน direct mapแอปบนโฮสต์และแอปใน Sandbox ใช้เพจหน่วยความจำจริงเดียวกันสำหรับไบนารี OS เช่น ntdll จึงลดการใช้หน่วยความจำแอปบนโฮสต์ที่อยู่เสมือนฝั่งโฮสต์แอปใน Sandboxที่อยู่เสมือนฝั่ง Sandboxเพจจริงเดียวกัน (ไบนารี OS เช่น ntdll.dll)ไม่ต้องทำซ้ำ RAM เท่ากับ OS

ภาพ 9: Direct map คือแนวคิดการใช้เพจร่วมที่เคยใช้ระหว่างโปรเซส นำไปใช้ข้ามขอบเขต VM

4.3. การยืมและให้ยืมหน่วยความจำ: เหมือนโปรเซสมากกว่า VM

เทียบกับการจัดสรรหน่วยความจำคงที่ของ VM แบบดั้งเดิม เทคโนโลยีคอนเทนเนอร์ที่ Sandbox นั่งอยู่ตัดสินการจัดสรรทรัพยากรแบบไดนามิกโดยร่วมมือกับโฮสต์ หากโฮสต์ขาดหน่วยความจำ มันเรียกคืนหน่วยความจำจากคอนเทนเนอร์ได้แบบเดียวกับที่เรียกคืนจากโปรเซสธรรมดา2 Hyper-V Dynamic Memory ก็ขยายและหดการจัดสรรของ VM ในช่วงที่ตั้งได้เช่นกัน แต่ Sandbox ไปไกลกว่า: ความต่างคือมันยืมและให้ยืมบนสนามเดียวกับการจัดการหน่วยความจำของโฮสต์

ความร่วมมือด้านหน่วยความจำระหว่างโฮสต์กับ Sandboxค่าเริ่มต้นของ VM แบบดั้งเดิมคือการจัดสรรเฉพาะขนาดคงที่พร้อมวิธีปรับจำกัด Sandbox กลายเป็นเป้าหมายการเรียกคืนเมื่อโฮสต์มีความกดดันด้านหน่วยความจำ และยืมให้ยืมหน่วยความจำบนสนามเดียวกับโปรเซสธรรมดาความกดดันหน่วยความจำโฮสต์สูงขึ้นเรียกคืนจากที่ไหน?Working Set ของโปรเซสธรรมดาการใช้ของ Sandbox (คอนเทนเนอร์)หน่วยความจำว่างถูกสำรองVM แบบดั้งเดิมมีวิธีปรับจำกัด

ภาพ 10: ในการยืมและให้ยืมหน่วยความจำ Sandbox ยืนฝั่งโปรเซสไม่ใช่ฝั่ง VM และยื่นหน่วยความจำเมื่อโฮสต์ลำบาก

ในตอนที่ 1 เราบอกว่า “ประสิทธิภาพของ VM ยังขึ้นกับฝั่งโฮสต์” แต่กับ VM น้ำหนักเบาเราเดินอีกขั้น: การจัดสรรหน่วยความจำเองคืองานร่วมกับโฮสต์ เหตุที่ Sandbox ใช้ได้ด้วยความรู้สึกของ “อีกแอปหนึ่ง” ไม่ใช่ “ผลิตภัณฑ์จำลองเสมือนหนัก” คือความร่วมมือนี้

ขั้นตอนที่เป็นรูปธรรมสำหรับการใช้ Sandbox ตรวจแอปธุรกิจอยู่ในบทความก่อนหน้า “เร่งการตรวจสอบแอปด้วย Windows Sandbox” บทความนี้คือกลไกข้างใต้สิ่งนั้น

5. คอนเทนเนอร์ — คุณลากเส้นการแยกที่ไหน

5.1. Process Isolation และ Hyper-V Isolation

คอนเทนเนอร์ Windows มีโหมดการแยกสองแบบตอนรัน อิมเมจถูกใช้ร่วม คุณเลือกด้วยแฟล็กตอนเริ่ม7

  • Process isolation: คอนเทนเนอร์หลายตัวใช้เคอร์เนลร่วมกับโฮสต์และแยกผ่านการจำลองเสมือนรายเนมสเปซของระบบไฟล์ รีจิสทรี พอร์ตเครือข่าย พื้นที่ process-ID เนมสเปซ Object Manager เป็นต้น โดยพื้นฐานเป็นแนวทางเดียวกับคอนเทนเนอร์ Linux
  • Hyper-V isolation: แต่ละคอนเทนเนอร์รันใน VM ที่ปรับให้เหมาะสมสูงและมีสิ่งที่เป็นเคอร์เนลเฉพาะในทางปฏิบัติ การมี VM วางการแยกระดับฮาร์ดแวร์ระหว่างคอนเทนเนอร์กับโฮสต์7

การแยกผ่านเนมสเปซอธิบายได้ว่าเป็นเวอร์ชันที่ทำอย่างละเอียดของเทคนิคที่เราเห็นในบทความการจำลองเสมือนของรีจิสทรี (“การ Redirect และการจำลองเสมือนของ Registry บน Windows”) — “แสดงความเป็นจริงต่างกันใต้ API เดียวกัน”

Process isolation เทียบกับ Hyper-V isolationภายใต้ process isolation คอนเทนเนอร์ใช้เคอร์เนลร่วมกับโฮสต์และแยกผ่านเนมสเปซ ภายใต้ Hyper-V isolation แต่ละคอนเทนเนอร์มีเคอร์เนลเฉพาะใน VM ที่ปรับให้เหมาะสมHyper-V isolationProcess isolationเคอร์เนลเฉพาะ (ใน VM ที่ปรับแล้ว)คอนเทนเนอร์ Cเคอร์เนลเฉพาะ (ใน VM ที่ปรับแล้ว)คอนเทนเนอร์ Dเคอร์เนลที่ใช้ร่วมกับโฮสต์คอนเทนเนอร์ Aคอนเทนเนอร์ B

ภาพ 11: แม้ด้วยอิมเมจคอนเทนเนอร์เดียวกัน ว่าคุณลากเส้นการแยกเหนือเคอร์เนลหรือแยกเคอร์เนลเองเป็นการเลือกที่ทำตอนเริ่ม

5.2. อันไหนที่คุณเรียกว่า “ขอบเขตความปลอดภัย” ได้

ความต่างระหว่างสองโหมดนี้ไม่ใช่เพียงเรื่องประสิทธิภาพ Microsoft ไม่ถือว่าคอนเทนเนอร์แบบ process-isolated เป็นขอบเขตความปลอดภัยที่แข็งแรง คอนเทนเนอร์ที่ถูกรักษา (พร้อมการตอบช่องโหว่) ในฐานะขอบเขตความปลอดภัยคือคอนเทนเนอร์ที่แยกด้วย hypervisor และ Hyper-V isolation คือสิ่งที่คุณควรเลือกในสถานการณ์หลายผู้เช่าที่เป็นปฏิปักษ์8

VBS ที่เราเห็นในตอนที่ 2 ก็เป็นการออกแบบที่สมมติว่า “เคอร์เนลถูกทะลุได้” แล้วถอยไปที่ขอบเขต hypervisor เกณฑ์เดียวกันใช้ในโลกของคอนเทนเนอร์ เส้นที่กักโค้ดที่ไม่น่าเชื่อถือถูกลากที่ขอบเขต hypervisor ไม่ใช่ด้านในของเคอร์เนลที่ใช้ร่วม

วิธีเลือกการแยกจากว่าคุณเชื่อถือโค้ดมากเพียงใดหากภาระงานเชื่อถือได้ ให้เอาความหนาแน่นและประสิทธิภาพด้วย process isolation หากโค้ดไม่น่าเชื่อถือหรือเป็นของคนอื่น ให้เลือกขอบเขต hypervisor เช่น คอนเทนเนอร์แบบ Hyper-V isolated Sandbox ที่เสริมความแข็งแล้วปิดเครือข่าย หรือ VM ที่แยกได้ไม่ได้ / โค้ดของคนอื่นคุณเชื่อถือโค้ดนั้นได้หรือไม่?Process isolation (เน้นความหนาแน่น)เลือกขอบเขต hypervisorคอนเทนเนอร์แบบ Hyper-V isolatedSandbox ที่เสริมความแข็งหรือ VM ที่แยก

ภาพ 12: โหมดการแยกเป็นเรื่องความปลอดภัยก่อนเรื่องประสิทธิภาพ และความเชื่อถือตัดสินว่าคุณลากเส้นที่ไหน

อนึ่ง การรันคอนเทนเนอร์แบบ Hyper-V isolated ใน Hyper-V VM ทำให้ hypervisor ลึกสองชั้น — nested virtualization การซ้อนหนึ่งระดับรองรับในการผลิตบนสภาพแวดล้อมที่เข้าเงื่อนไข (โปรเซสเซอร์ Intel กับโฮสต์ Windows 10 / Windows Server 2016 หรือใหม่กว่า หรือโปรเซสเซอร์ AMD กับโฮสต์ Windows 11 / Windows Server 2022 หรือใหม่กว่า และรุ่นการตั้งค่า VM ที่สอดคล้องในแต่ละกรณี) และข้อกำหนดเบื้องต้นเพิ่มคือการตั้งค่าที่เปิดเผยส่วนขยายการจำลองเสมือนให้ VM ชั้นนอก (ExposeVirtualizationExtensions บน Set-VMProcessor ใน Hyper-V) การรัน WSL2 ใน VM รองรับแบบเดียวกัน9 ว่าคุณใช้ WSL2 หรือ Docker ใน VM พัฒนาบนคลาวด์ได้หรือไม่ ก็ถูกตัดสินด้วยว่าขนาดและการตั้งค่า VM นั้นเปิดเผย nested virtualization หรือไม่

โครงสร้างของการจำลองเสมือนซ้อนVM บนคลาวด์นั่งบน hypervisor ของโฮสต์จริง และข้างในมี hypervisor อีกตัว (การซ้อนที่รองรับคือหนึ่งระดับ) รันเพื่อรองรับ WSL2 และคอนเทนเนอร์แบบ Hyper-V isolatedHypervisor ของโฮสต์จริงVM บนคลาวด์ (เครื่องพัฒนา)Hypervisor ใน VM (ระดับซ้อน 1)WSL2คอนเทนเนอร์แบบ Hyper-V isolatedการซ้อนที่รองรับคือหนึ่งระดับ

ภาพ 13: เหตุที่ wsl รันใน VM บนคลาวด์คือเพราะ nested virtualization ได้รับการรองรับอย่างเป็นทางการเพียงหนึ่งระดับ

5.3. สเปกตรัมของการแยกและความเบา

การเรียงตัวละครจนถึงตอนนี้บนแกนเดียว มีลักษณะดังนี้

สเปกตรัมของความแข็งของการแยกและความเบาคอนเทนเนอร์แบบ process-isolated เบาที่สุดแต่ใช้เคอร์เนลร่วม WSL2, Sandbox และคอนเทนเนอร์แบบ Hyper-V isolated คือ VM น้ำหนักเบาที่มีเคอร์เนลเฉพาะ (Sandbox ทำให้เบาด้วยการใช้ร่วม WSL2 ด้วยเคอร์เนลที่สร้างเฉพาะงาน) VM เต็มตัวหนักที่สุดแต่เอนกประสงค์เบา ← → หนักคอนเทนเนอร์แบบ process-isolated (เคอร์เนลร่วม)WSL2, Sandbox, Hyper-V isolation (VM น้ำหนักเบาที่มีเคอร์เนลเฉพาะ)VM เต็มตัว (รันอะไรก็ได้ ถือสำเนาครบชุด)ขอบเขต: เนมสเปซขอบเขต: hypervisorขอบเขต: hypervisor + ความเป็นอิสระครบ

ภาพ 14: กลุ่ม VM น้ำหนักเบาคือทางแก้กลางที่เก็บขอบเขต hypervisor และตัดการทำซ้ำ วิธีตัดแยกเป็นการใช้ร่วมสำหรับ Sandbox และเคอร์เนลที่สร้างเฉพาะงานสำหรับ WSL2

6. ดูด้วยตนเอง

ความเบาและการใช้ร่วมเป็นสิ่งที่คุณสังเกตบนเครื่องตรงหน้าได้

เวลาเริ่มต้นกับการขึ้นลงของหน่วยความจำ (WSL2) เปิด Task Manager แล้วลองสิ่งต่อไปนี้

# Felt startup time (the first run starts the VM; the second and later are faster still)
Measure-Command { wsl -e true }

# Memory usage of the WSL2 VM (vmmem / Virtual Machine Memory)
Get-Process -Name vmmem* | Select-Object Name, WorkingSet64

# End the whole VM and watch the memory come back
wsl --shutdown

หากคุณทำการบิลด์ใหญ่หรือการทำงานกับไฟล์ใน WSL2 vmmem โต และคุณสังเกตได้ว่ามันถูกคืนทั้งก้อนด้วย wsl --shutdown

ความต่างของความเร็วจากตำแหน่งที่วางไฟล์ (WSL2) วางที่เก็บเดียวกันฝั่ง Linux (~/repo) และฝั่ง Windows (/mnt/c/repo) แล้วเปรียบเทียบเวลาของ git status หรือการแตก ความต่างจากหมวด 3.2 จะปรากฏเป็นตัวเลข

พื้นหลังของ direct map (Sandbox) เริ่ม Sandbox แล้วดูการเพิ่มของหน่วยความจำใน Task Manager บนโฮสต์ การที่การเพิ่มยังเล็กกว่ามากเมื่อเทียบกับสิ่งที่ “อีก Windows หนึ่ง” จะทำให้คุณจินตนาการ คือผลของการใช้ร่วมที่กำลังเล่าเรื่อง หากจะขุดต่อเรื่องการแยกหน่วยความจำฝั่งโฮสต์ บทความเรื่องเครื่องมือ Sysinternals ที่ครอบคลุมวิธีใช้ RAMMap และ VMMap (“Process Explorer / Handle / VMMap ในทางปฏิบัติ”) มีประโยชน์ อย่างไรก็ตาม สิ่งเหล่านี้เป็นเครื่องมือสำหรับดูการจัดประเภทของโปรเซสฝั่งโฮสต์และหน่วยความจำจริง ไม่ได้สังเกตการแชร์กับเกสต์เองโดยตรง

โหมดการแยกคอนเทนเนอร์ (Docker / คอนเทนเนอร์ Windows) หากคุณมีสภาพแวดล้อมคอนเทนเนอร์ Windows ให้เริ่มอิมเมจเดียวกันด้วย docker run --isolation=process และ --isolation=hyperv แล้วเปรียบเทียบเวลาเริ่มต้นและลักษณะใน Task Manager (ภายใต้ process isolation โปรเซสในคอนเทนเนอร์ปรากฏในรายการโปรเซสของโฮสต์) แล้วคุณจะรู้สึกได้ว่าเส้นการแยกอยู่ที่ไหน7 อย่างไรก็ตาม process isolation สมมติว่าโฮสต์กับรุ่นอิมเมจตรงกัน และบน OS ไคลเอนต์จำกัดไว้ที่การใช้พัฒนาและทดสอบ Hyper-V isolation อนุญาตชุดการจับคู่ที่กว้างกว่า จึงเปรียบเทียบบนคู่ที่เข้ากันได้10

7. สามการอ่านผิดที่ควรเลี่ยงในทางปฏิบัติ

7.1. “WSL2 ช้า”

สิ่งที่ช้าไม่ใช่ WSL2 แต่เป็นเส้นทางไฟล์ I/O ที่ข้ามขอบเขต OS มีหลายกรณีที่เพียงย้ายโปรเจกต์ไปฝั่ง Linux ทำให้ความรู้สึกเป็นคนละเรื่อง4 ในทางกลับกัน การวางไฟล์ที่เครื่องมือ Windows จะแตะฝั่ง Linux ก็เสียเปรียบเท่ากันด้วยเหตุเดียวกัน ตัดสินด้วย “วางไว้บน OS เดียวกับฝั่งที่ใช้”

7.2. “vmmem ที่โตใหญ่คือการรั่วของหน่วยความจำ”

หน่วยความจำของ WSL2 โตและหดตามความต้องการ และส่วนที่ปล่อยแล้วถูกคืน บน WSL ปัจจุบัน แคชไฟล์ยังถูกเรียกคืนอัตโนมัติโดย autoMemoryReclaim (ค่าเริ่มต้นคือ dropCache) ดังนั้น “มันยังใหญ่” มักคลี่คลายตามเวลา5 หากยังเหลือ ให้ยืนยันว่า autoMemoryReclaim ไม่ได้ถูกตั้งเป็น disabled และว่า pageReporting ซึ่งรับผิดชอบการคืนส่วนที่ปล่อย ไม่ได้ถูกปิด (หรือว่าคุณไม่ได้ใช้ WSL เก่า) จากนั้นทำให้เพดานชัดเจนด้วย memory ใน .wslconfig หรือคืนทุกอย่างด้วย wsl --shutdown ที่ขอบเซสชัน วิธีคิดเรื่องการแยกว่าเป็นการรั่วหรือไม่รั่ว เหมือนกับในตอนเกริ่นของซีรีส์หน่วยความจำ “"การใช้หน่วยความจำ" ของ Windows หมายถึงอะไรจริง ๆ?

7.3. “อยู่ในคอนเทนเนอร์ จึงปลอดภัย”

คอนเทนเนอร์แบบ process-isolated ใช้เคอร์เนลร่วม และตามเกณฑ์ของ Microsoft ไม่ใช่ขอบเขตความปลอดภัย8 สำหรับการรันโค้ดที่ไม่น่าเชื่อถือหรือตัวอย่าง ให้เลือกการแยกที่มีขอบเขต hypervisor เช่น คอนเทนเนอร์แบบ Hyper-V isolated, Windows Sandbox หรือ VM เฉพาะ อย่างไรก็ตาม ขอบเขต hypervisor ไม่ใช่การยกเว้นทั้งก้อน การตั้งค่าเริ่มต้นของ Windows Sandbox มีการเชื่อมต่อเครือข่ายเปิดอยู่ และอาจเปิดเผยแอปที่ไม่น่าเชื่อถือต่อเครือข่ายภายใน1 หากคุณใช้รันตัวอย่าง ให้เสริมการแยกด้วยการปิดเครือข่ายและการส่งต่อคลิปบอร์ดในไฟล์ตั้งค่า .wsb หรือใช้ VM เฉพาะบนเครือข่ายที่แยก

8. สรุป — ปิดซีรีส์

จุดของตอนที่ 3

  • ความเบาของ VM น้ำหนักเบาคือผลของ “การหยุดทำซ้ำ” ไม่ใช่ของ “การทำให้อ่อนการแยก”
  • WSL2 รันเคอร์เนล Linux จริงใน utility VM น้ำหนักเบาที่ถูกจัดการ และดิสทริบิวชันถูกแยกเป็นคอนเทนเนอร์ใน VM นั้น3 กฎประสิทธิภาพคือวางไฟล์บน OS ที่ใช้ และหน่วยความจำโตและหดแบบไดนามิก โดยเพดานควบคุมได้ใน .wslconfig45
  • Windows Sandbox ใช้ไฟล์ OS ที่เปลี่ยนแปลงไม่ได้ของโฮสต์ร่วมผ่าน dynamic base image และยังใช้เพจจริงของไบนารี OS เป้าหมายร่วมผ่าน direct map จึงไม่ถือสำเนาของ Windows ครบชุด2 คุณยังต้องการประมาณ 500 MB สำหรับไฟล์ที่เปลี่ยนแปลงได้ บวกหน่วยความจำของแอปที่คุณรันข้างใน
  • โหมดการแยกคอนเทนเนอร์ถูกเลือกตอนเริ่ม และฝั่งที่เรียกว่าขอบเขตความปลอดภัยได้คือ Hyper-V isolation78

และหากเราวางทั้งซีรีส์บนหน้าเดียว จะมีลักษณะดังนี้

  • ตอนที่ 1: มีชั้น hypervisor ใต้ Windows และ OS โฮสต์เองรันเป็น root partition การไกล่เกลี่ยของ CPU และของหน่วยความจำ (SLAT) ทำโดยชั้นนี้โดยตรง และ I/O ของอุปกรณ์สังเคราะห์ถูกเป็นตัวกลางโดย root partition (VSP) ฝั่งไกลของ VMBus
  • ตอนที่ 2: ชั้นนั้นถูกใช้ไม่เพียงเพื่อแยก VM จากกัน แต่ยังเพื่อลากขอบเขตที่แข็งกว่าเคอร์เนล (VTL) ใน OS เดียวกัน ความปลอดภัยเริ่มต้นของ Windows 11 สร้างบนสิ่งนี้
  • ตอนที่ 3: บนชั้นเดียวกัน การตัดการทำซ้ำคือสิ่งที่ทำให้ “เครื่องเสมือนที่เริ่มในไม่กี่วินาที” เป็นไปได้ เส้นการแยกถูกเก็บไว้ และมันกลายเป็นเครื่องมือประจำวัน
ภาพเดียวของทั้งซีรีส์hypervisor ตรงบนฮาร์ดแวร์คือตอนที่ 1 การแยก VTL0 และ VTL1 ใน Windows โฮสต์คือตอนที่ 2 ความเบาของ WSL2, Sandbox และ Hyper-V isolation บนชั้นเดียวกันคือตอนที่ 3 คอนเทนเนอร์แบบ process-isolated ใช้เคอร์เนลโฮสต์ร่วม Sandbox ทำให้เบาด้วยการใช้ร่วม WSL2 ด้วยเคอร์เนลที่สร้างเฉพาะงานฮาร์ดแวร์Hypervisor (ตอนที่ 1)Windows โฮสต์ (การแยก VTL คือตอนที่ 2)WSL2, Sandbox, Hyper-V isolation (ตอนที่ 3)คอนเทนเนอร์แบบ process-isolated (เคอร์เนลร่วม)Sandbox ใช้ร่วม WSL2 ทำให้เบาด้วยเคอร์เนลเฉพาะงาน

ภาพ 15: ซ้อนสามตอนแล้วคุณได้ภาพรวมของพื้นใต้ Windows ปัจจุบัน

การจำลองเสมือนไม่ใช่เทคโนโลยีห้องเซิร์ฟเวอร์อีกต่อไป และไม่ใช่เทคโนโลยีเฉพาะคนที่ยืน VM ที่พื้นใต้ Windows ของคุณ มันรองรับทั้งความปลอดภัยและประสบการณ์การพัฒนาอย่างเงียบ ๆ — นั่นคือจุดที่เราอยู่ตอนนี้

บทความที่เกี่ยวข้อง

ด้านให้คำปรึกษาที่เกี่ยวข้อง

KomuraSoft LLC รับจัดสภาพแวดล้อมพัฒนาที่ใช้ WSL2 และคอนเทนเนอร์ ออกแบบสภาพแวดล้อมตรวจแอป Windows และสอบสวนประสิทธิภาพกับความเข้ากันได้ในสภาพแวดล้อมจำลองเสมือน

ลิงก์อ้างอิง

  1. Microsoft Learn, Windows Sandbox. ว่าด้วย Windows Sandbox ที่เริ่มในไม่กี่วินาทีในฐานะ VM ใช้แล้วทิ้งและทิ้งทุกอย่างเมื่อปิด ว่าด้วยการรันเคอร์เนลแยกด้วย Microsoft hypervisor เพื่อแยกจากโฮสต์ และการเชื่อมต่อเครือข่ายที่เปิดตามค่าเริ่มต้นและปิดได้ในไฟล์ตั้งค่า  2 3

  2. Microsoft Learn, Windows Sandbox architecture. ว่าด้วย dynamic base image ที่ประกอบอิมเมจ Windows ครบชุดจากการใช้ร่วมไฟล์ OS ที่เปลี่ยนแปลงไม่ได้ของโฮสต์บวกสำเนาสะอาดของไฟล์ที่เปลี่ยนแปลงได้ (ประมาณ 500 MB หลังติดตั้ง) ว่าคอนเทนเนอร์จัดสรรแบบไดนามิกโดยร่วมมือกับโฮสต์ เทียบกับการจัดสรรหน่วยความจำคงที่ของ VM แบบดั้งเดิม จึงให้โฮสต์เรียกคืนหน่วยความจำได้ และว่า direct map ทำให้ไบนารี OS เช่น ntdll.dll ใช้เพจจริงเดียวกันกับโฮสต์  2 3 4 5 6

  3. Microsoft Learn, What is the Windows Subsystem for Linux?. ว่าด้วย WSL2 ที่รันเคอร์เนล Linux ใน utility VM น้ำหนักเบา ว่าแต่ละดิสทริบิวชันรันเป็นคอนเทนเนอร์ที่แยก ใช้เนมสเปซเครือข่ายและเคอร์เนลร่วมกันขณะแยกเนมสเปซอย่าง PID, mount และ user  2 3

  4. Microsoft Learn, Comparing WSL Versions. ว่าด้วยเคอร์เนล WSL2 ที่ Microsoft สร้างจากสาขา Stable ว่า WSL ที่แจกผ่าน Store รับอัปเดตเป็นแพ็กเกจแยกจากอิมเมจ OS และนำไปใช้ด้วย wsl --update (บนการแจกในกล่องรุ่นเก่า ผ่าน Windows Update) ตัวอย่างประสิทธิภาพเช่นสูงสุด 20 เท่าสำหรับการแตก tarball ว่า WSL1 เร็วกว่าสำหรับประสิทธิภาพระบบไฟล์ข้าม OS จึงควรวางไฟล์บน OS ที่ใช้ และว่าหน่วยความจำโตและหดโดยส่วนที่ปล่อยถูกคืน ขณะที่แคชอาจไม่คืนจนกว่า VM จะออก  2 3 4 5 6 7 8

  5. Microsoft Learn, Advanced settings configuration in WSL. ว่าด้วยการตั้งเพดานหน่วยความจำรวมของ VM WSL2 จำนวนโปรเซสเซอร์ สวอป และ pageReporting (เปิดตามค่าเริ่มต้น รับผิดชอบการตรวจและคืนหน่วยความจำที่ไม่ได้ใช้) ในหมวด [wsl2] ของ .wslconfig และการตั้งค่าทดลอง autoMemoryReclaim ที่มีค่าเริ่มต้น dropCache จึงให้หน่วยความจำแคชถูกเรียกคืนอัตโนมัติ  2 3 4 5

  6. Microsoft Learn, Use and configure Windows Sandbox. ว่าด้วย MappedFolders ในไฟล์ตั้งค่า .wsb ที่แชร์โฟลเดอร์โฮสต์แบบอ่านอย่างเดียวหรือเขียนได้ 

  7. Microsoft Learn, Isolation Modes. ว่าด้วย process isolation ของคอนเทนเนอร์ Windows ที่ใช้เคอร์เนลร่วมกับโฮสต์และแยกผ่านเนมสเปซ ว่า Hyper-V isolation มีสิ่งที่เป็นเคอร์เนลเฉพาะใน VM ที่ปรับให้เหมาะสม และว่าอิมเมจเดียวกันรันได้ในโหมดใดก็ได้ผ่านแฟล็กตอนเริ่ม  2 3 4

  8. Microsoft Learn, Secure Windows containers. ว่าด้วยเฉพาะคอนเทนเนอร์ที่แยกด้วย hypervisor ที่ถูกถือเป็นขอบเขตความปลอดภัย ว่าคอนเทนเนอร์แบบ process-isolated ไม่ถูกถือเป็นขอบเขตความปลอดภัยที่แข็งแรง และว่า hypervisor isolation คือสิ่งที่คุณควรเลือกในสถานการณ์หลายผู้เช่าที่เป็นปฏิปักษ์  2 3

  9. Microsoft Learn, What is Nested Virtualization?. ว่าด้วยการรันคอนเทนเนอร์แบบ Hyper-V isolated ใน Hyper-V VM (การซ้อนหนึ่งระดับ) ที่รองรับในการผลิต ข้อกำหนดคือโปรเซสเซอร์ Intel กับ Windows Server 2016 / Windows 10 หรือใหม่กว่า หรือโปรเซสเซอร์ AMD กับ Windows Server 2022 / Windows 11 หรือใหม่กว่า บวกรุ่นการตั้งค่า VM ที่สอดคล้องในแต่ละกรณี การเปิดเผยส่วนขยายการจำลองเสมือนให้ VM ชั้นนอก (ExposeVirtualizationExtensions) เป็นข้อกำหนดเบื้องต้น และการรัน WSL2 ใน Hyper-V VM ได้รับการรองรับ 

  10. Microsoft Learn, Windows container version compatibility. ว่าด้วย process isolation ที่สมมติว่ารุ่นโฮสต์กับอิมเมจคอนเทนเนอร์ตรงกัน ว่า Hyper-V isolation รันอิมเมจของรุ่น OS ที่ต่างจากโฮสต์ได้ และว่า process isolation บน OS ไคลเอนต์จำกัดไว้ที่การใช้พัฒนาและทดสอบ 

บทความล่าสุดที่มีแท็กเดียวกัน เพื่อเจาะลึกหัวข้อใกล้เคียง

เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 1) — Windows ของคุณรันอยู่ที่ไหนจริง ๆ? Hypervisor และพาร์ติชัน

เมื่อเปิด Hyper-V แล้ว Windows ฝั่งโฮสต์เองก็รันบน hypervisor ในฐานะ root partition บทความนี้อธิบายรากฐานของการจำลองเสมือนผ่านบทบาทของ VT...

เชิงลึกของการจำลองเสมือนบน Windows (ตอนที่ 2) — หน่วยความจำที่แม้เคอร์เนลก็มองไม่เห็น: กลไกของ VBS, HVCI และ Credential Guard

เมื่อติดตั้งใหม่บนฮาร์ดแวร์ที่รองรับ VBS จะเปิดตามค่าเริ่มต้น และใช้ hypervisor กับ SLAT สร้างการแยกที่แข็งกว่าเคอร์เนล บทความนี้อธิบายโค...

Win32 Thread Pool API — คอนเคอร์เรนซีโดยไม่สร้างเธรดเอง ด้วย CreateThreadpoolWork

โค้ดเนทีฟของคุณกระจายการเรียก CreateThread ไปทั่วหรือไม่ บทความนี้อธิบาย Win32 thread pool API ที่ออกแบบใหม่ใน Vista — ออบเจ็กต์สี่ชนิด w...

Named Pipe ในทางปฏิบัติ — IPC มาตรฐานของ Windows ตั้งแต่การออกแบบถึงความปลอดภัย

คู่มือเชิงปฏิบัติเรื่อง named pipe ซึ่งเป็นการสื่อสารระหว่างโปรเซสมาตรฐานของ Windows บทความนี้จัดระเบียบจากแหล่งปฐมภูมิ ทั้งการเลือกระหว่...

ทำให้เว็บไซต์ของคุณปรากฏในการค้นหาด้วยชื่อพื้นที่ — คู่มือ Local SEO ภาคปฏิบัติสำหรับ SME (หน้าเพจพื้นที่และ Google Business Profile)

สำหรับ SME ที่เว็บไซต์ไม่ปรากฏเมื่อมีคนค้นหา "ชื่อพื้นที่ + ประเภทธุรกิจ" บทความนี้เรียบเรียงลำดับขั้นตอนการปรับปรุง Local SEO ได้แก่ การ...

หน้าเหล่านี้วางหัวข้อไว้ในบริบทที่กว้างขึ้นของบริการและการตัดสินใจ

บทความนี้เกี่ยวข้องโดยตรงกับบริการต่อไปนี้

คำถามที่พบบ่อย

คำถามที่มักพบในการปรึกษาเกี่ยวกับหัวข้อของบทความนี้

WSL2 คือ VM หรือไม่
ใช่ WSL2 รันเคอร์เนล Linux จริงที่ Microsoft สร้างใน utility VM น้ำหนักเบา VM ถูกจัดการโดย WSL เบื้องหลัง ดังนั้นการออกแบบไม่เคยทำให้ผู้ใช้คิดเรื่องการตั้งค่า VM หรือการรอการบูต แต่ละดิสทริบิวชัน Linux รันเป็นคอนเทนเนอร์ที่แยกใน VM ที่ถูกจัดการนี้
ทำไมการทำงานกับไฟล์ใต้ /mnt/c ใน WSL2 จึงช้า
เพราะการเข้าถึงจากเคอร์เนล Linux ของ WSL2 ไปยังระบบไฟล์ฝั่ง Windows ผ่านการแชร์ไฟล์ที่ข้ามขอบเขต OS การทำงานบนระบบไฟล์ Linux (ดิสก์เสมือน ext4) เร็ว ดังนั้นกฎคือเก็บไฟล์โปรเจกต์ไว้ฝั่ง OS เดียวกับเครื่องมือที่ทำงานกับไฟล์นั้น
การใช้หน่วยความจำสูงของโปรเซส vmmem คือการรั่วหรือไม่
ในกรณีส่วนใหญ่ไม่ใช่การรั่ว หน่วยความจำของ WSL2 โตและหดตามการใช้งาน และหน่วยความจำที่โปรเซสปล่อยแล้วถูกคืนให้ Windows ภายใต้การตั้งค่า pageReporting ซึ่งเปิดตามค่าเริ่มต้น เพจแคชไฟล์ก็ถูกเรียกคืนอัตโนมัติโดย WSL ปัจจุบันผ่าน autoMemoryReclaim ใน .wslconfig (ค่าเริ่มต้นคือ dropCache) ในสภาพแวดล้อมที่การตั้งค่าเหล่านี้ถูกปิด หรือบน WSL เก่า หน่วยความจำอาจเหลือจนกว่า VM จะออก ในกรณีนั้นตั้งเพดานด้วยการตั้งค่า memory หรือคืนด้วย wsl --shutdown
Windows Sandbox บูต Windows ครบชุดจากดิสก์ไม่กี่ร้อยเมกะไบต์ได้อย่างไร
ผ่านกลไกชื่อ dynamic base image มันใช้ร่วมไฟล์ OS ที่เปลี่ยนแปลงไม่ได้จาก Windows ที่ติดตั้งบนโฮสต์อยู่แล้ว และเก็บสำเนาสะอาดของไฟล์ที่เปลี่ยนแปลงได้จำนวนน้อยเท่านั้น ทำให้ประกอบอิมเมจที่บูตได้ครบชุดโดยไม่ต้องเก็บสำเนา Windows ทั้งก้อน
คอนเทนเนอร์ปลอดภัยกว่า VM หรือไม่
ขึ้นกับโหมดการแยก คอนเทนเนอร์แบบ process-isolated ใช้เคอร์เนลร่วมกับโฮสต์ และ Microsoft ไม่ถือว่านี่เป็นขอบเขตความปลอดภัยที่แข็งแรง เมื่อคุณจัดการโค้ดที่เป็นปฏิปักษ์ คุณต้องการ Hyper-V isolation ซึ่งให้แต่ละคอนเทนเนอร์มีเคอร์เนลเฉพาะของตนเอง

โปรไฟล์ผู้เขียน

หน้าแนะนำผู้เขียนบทความ

Go Komura

ผู้แทนของ KomuraSoft LLC

เชี่ยวชาญด้านการพัฒนาซอฟต์แวร์ Windows ที่ปรึกษาเทคนิค และการตรวจสอบบั๊ก โดยเฉพาะโปรเจกต์ที่มีระบบเดิมและบั๊กที่ทำซ้ำได้ยาก

ลิงก์สาธารณะ

กลับไปยังบล็อก