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

· · Windows, การจำลองเสมือน, Hyper-V, Hypervisor, SLAT, VMBus

เปิดข้อมูลระบบ (msinfo32) บน Windows 11 แล้วคุณมักเห็น “Running” ในช่อง “Virtualization-based security” — แม้บนเครื่องที่คุณไม่เคยสร้าง VM

ความหมายคือข้อเท็จจริงต่อไปนี้ บนเครื่องนั้น Windows ฝั่งโฮสต์เองกำลังรันอยู่บน hypervisor แล้ว “การจำลองเสมือน” ไม่ใช่เทคโนโลยีเฉพาะคนที่สร้าง VM ใน Hyper-V Manager อีกต่อไป บน Windows 11 ความปลอดภัยบนฐานการจำลองเสมือน (VBS) เปิดตามค่าเริ่มต้นในการตั้งค่าที่เข้าเงื่อนไข — เช่น การติดตั้งใหม่บนฮาร์ดแวร์ที่รองรับ1 — และทั้ง WSL2 กับ Windows Sandbox สร้างบน Windows hypervisor เดียวกัน ใต้ Windows ที่คุณใช้ทุกวัน มีชั้นซอฟต์แวร์อีกชั้นหนึ่งอยู่แล้ว

ซีรีส์นี้ “เชิงลึกของการจำลองเสมือนบน Windows” ตามสิ่งที่เกิดขึ้นในชั้นนั้น เริ่มจากรากฐาน

“เชิงลึกของการจำลองเสมือนบน Windows” — ทั้ง 3 ตอน

  1. ตอนที่ 1 (บทความนี้): Hypervisor และพาร์ติชัน
    เราตามว่า Windows ฝั่งโฮสต์ไปรันอยู่ที่ไหนเมื่อคุณเปิด Hyper-V
  2. ตอนที่ 2: หน่วยความจำที่แม้เคอร์เนลก็มองไม่เห็น — VBS, HVCI และ Credential Guard
    เราตามว่า Windows วางความลับที่ทั้งผู้ดูแลระบบและเคอร์เนลอ่านไม่ได้ไว้ที่ไหน
  3. ตอนที่ 3: เครื่องเสมือนที่บูตในไม่กี่วินาที — WSL2, Windows Sandbox และคอนเทนเนอร์
    เราตามจากวิธีที่หน่วยความจำและอิมเมจถูกใช้ร่วมกัน ว่าทำไม WSL2 และ Sandbox จึงเบาทั้งที่ VM เต็มตัวหนัก

คำถามที่ตอนที่ 1 ตอบมีเพียงข้อเดียว

เมื่อเปิด Hyper-V แล้ว Windows ฝั่งโฮสต์ไปรันอยู่ที่ไหน?

ผู้อ่านที่ตั้งใจ คือนักพัฒนาและผู้ปฏิบัติการที่ใช้ Hyper-V, WSL2 หรือ Windows Sandbox และอยากเข้าใจจากกลไกขึ้นมาว่าอะไรกำลังรันอยู่ข้างใต้ ข้อกำหนดเบื้องต้น คือ x64 Windows 10/11 หรือ Windows Server รุ่นปัจจุบัน (การพูดถึงริง VT-x/AMD-V และ EPT/RVI ในบทความนี้สมมติ x64 ส่วน Arm64 ใช้กลไกอื่น เช่น exception level) พื้นความรู้ที่ต้องมี คือความต่างระหว่างเคอร์เนลโหมดกับยูสเซอร์โหมด คุณไม่ต้องมีประสบการณ์ปฏิบัติการ VM หรือความรู้การพัฒนา hypervisor ความยากคือระดับกลาง เราครอบคลุมแนวคิดส่วนขยายการจำลองเสมือนของ CPU แต่ไม่ลงรายละเอียดชุดคำสั่ง

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

เมื่อคนได้ยิน Hyper-V อาจนึกภาพ “ซอฟต์แวร์รัน VM ที่นั่งอยู่บน Windows” โครงสร้างจริงกลับด้าน

ตั้งแต่วินาทีที่คุณเปิด Hyper-V แล้วรีบูต hypervisor คือผู้ควบคุม CPU จริงและหน่วยความจำ และ Windows ฝั่งโฮสต์รันอยู่บนนั้นในฐานะพาร์ติชันแรกที่มีสิทธิ์ — “root partition”

hypervisor คือชั้นซอฟต์แวร์บางที่นั่งระหว่างฮาร์ดแวร์กับ OS สร้างสภาพแวดล้อมการรันที่แยกกันเรียกว่า “พาร์ติชัน” และเป็นตัวกลางในการเข้าถึงฮาร์ดแวร์2 อันที่ Windows ฝั่งโฮสต์เข้าไปคือ root partition อันที่ VM เข้าไปคือ child partition root partition ถูกปฏิบัติพิเศษ (เข้าถึงอุปกรณ์จริงโดยตรงและถือสแต็กจัดการ) แต่ในแง่ที่มันไม่ควบคุม CPU จริงโดยตรง มันยืนอยู่ในตำแหน่งเดียวกับ child partition

โครงสร้างรวมหลังเปิด Hyper-Vhypervisor นั่งตรงบนฮาร์ดแวร์จริง และเหนือนั้นคือ root partition ที่ถือ Windows ฝั่งโฮสต์กับ child partition ที่ถือ VMฮาร์ดแวร์จริงHypervisorRoot partition (Windows โฮสต์)Child partition (VM)ถือสแต็กจัดการและไดรเวอร์อุปกรณ์

ภาพ 1: Hyper-V ไม่ใช่ “ซอฟต์แวร์ VM บน Windows” แต่เป็นชั้นที่ไปอยู่ใต้ Windows และ OS ฝั่งโฮสต์เองรันใน root partition

คุณอาจคิดว่า “ถ้าเปิดแล้วไม่รู้สึกต่าง มีการพลิกกลับครั้งใหญ่แบบนั้นจริงหรือ” มี นั่นแหละคือเหตุที่โครงสร้างนี้มักไม่ถูกสังเกต ในบทความนี้เราแยกแผนภาพเดียวนี้ตามสามแกน: CPU หน่วยความจำ และ I/O อุปกรณ์

2. จากฝั่ง CPU — สิทธิ์อีกชั้นใต้ริง

2.1. ทบทวนการป้องกันแบบริง

CPU x64 มีระดับสิทธิ์ (ริง) และ Windows รันเคอร์เนลโหมดที่ริง 0 และยูสเซอร์โหมดที่ริง 3 แอปพลิเคชันแตะฮาร์ดแวร์โดยตรงไม่ได้เพราะคำสั่งที่มีสิทธิ์รันจากริง 3 ไม่ได้

แล้วคุณจะบรรจุเคอร์เนล OS หลายตัว ซึ่งแต่ละตัวรันที่ริง 0 บน CPU จริงตัวเดียวกันอย่างปลอดภัยได้อย่างไร ทุกเคอร์เนลถูกเขียนโดยสมมติว่า “ฉันควบคุม CPU” ให้ริง 0 แก่ทั้งหมดแล้วพวกมันชนوكกัน ยึดไว้แล้วพวกมันจะไม่รัน

ปัญหาที่เคอร์เนล OS หลายตัวต้องการริง 0ทั้งเคอร์เนลโฮสต์และเกสต์ถูกเขียนโดยสมมติอำนาจเต็มที่ริง 0 ดังนั้นบันไดริงแบบดั้งเดิมเพียงอย่างเดียวบรรจุพวกมันบน CPU จริงตัวเดียวกันอย่างปลอดภัยไม่ได้เคอร์เนลโฮสต์ (สมมติริง 0)ต้องการควบคุม CPU จริงเคอร์เนลเกสต์ (สมมติริง 0)ริงแบบดั้งเดิมไกล่เกลี่ยไม่ได้ต้องการตัวกลางเหนือริง 0

ภาพ 2: บันไดริงถูกสร้างโดยสมมติ OS เดียว ดังนั้นการบรรจุหลายเคอร์เนลต้องการสิทธิ์อีกชั้นเหนือนั้น

2.2. ส่วนขยายการจำลองเสมือน — โหมดสงวนไว้ให้ hypervisor

สิ่งที่แก้ปัญหานี้คือส่วนขยายการจำลองเสมือนของ CPU (Intel VT-x/AMD-V) Hyper-V ต้องการโปรเซสเซอร์ที่มีคุณสมบัตินี้2 ส่วนขยายการจำลองเสมือนเพิ่ม บนแกนแยกจากริงแบบดั้งเดิม “โหมดการรันสำหรับ hypervisor” และ “โหมดการรันสำหรับเกสต์” เป็นสิทธิ์ที่แข็งกว่าแม้แต่ริง 0 บางครั้งมีชื่อเล่นว่า “ริง -1”

  • เคอร์เนลเกสต์ยังรันที่ริง 0 ตามเดิม ไม่ต้องเขียนใหม่
  • อย่างไรก็ตาม ริง 0 นั้นคือ “ริง 0 ในโหมดเกสต์” และมันไม่ควบคุม CPU จริงทั้งก้อน
  • เมื่อเกสต์เจอการทำงานเฉพาะที่ต้องการการแทรกของ hypervisor (คำสั่งที่ตั้งเป็น intercept หรือข้อยกเว้นหรือการละเมิด) CPU โอนการควบคุมไปยัง hypervisor อัตโนมัติ (VM Exit) เมื่อ hypervisor จัดการเสร็จ มันกลับสู่เกสต์ (VM Entry) การเข้าถึงหน่วยความจำปกติผ่านโดยไม่มี VM Exit ตราบที่การแปล SLAT สำเร็จ

อินเทอร์รัปต์ทำงานแบบเดียวกัน พาร์ติชันไม่แตะโปรเซสเซอร์จริงโดยตรง hypervisor รับอินเทอร์รัปต์และส่งไปยังแต่ละพาร์ติชัน2

ลำดับการรันของเกสต์และ VM Exitเคอร์เนลเกสต์และแอปรันที่ริง 0 และริง 3 ในโหมดเกสต์ การเข้าถึงหน่วยความจำปกติผ่านการแปล SLAT ส่วน intercept และข้อยกเว้นที่ตั้งไว้ก่อ VM Exit ที่โอนการควบคุมไปยัง hypervisor ซึ่งจากนั้นกลับสู่เกสต์ผ่าน VM Entryไม่ใช่รันในโหมดเกสต์ (รวมเคอร์เนลริง 0)งานที่ต้องแทรก? (intercept/ข้อยกเว้นที่ตั้ง)รันต่อไปตามเดิมVM Exit (CPU โอนการควบคุม)Hypervisor จัดการกลับสู่เกสต์ผ่าน VM Entry

ภาพ 3: OS เกสต์ยังรันที่ริง 0 โดยไม่ต้องเขียนใหม่ และ CPU เรียก hypervisor เฉพาะเมื่อจำเป็น

การไปกลับนี้ดูคล้ายลำดับที่เราตามในซีรีส์หน่วยความจำ — “เข้าเคอร์เนลเมื่อ page fault แล้วกลับสู่คำสั่งเดิม” CPU สกัดการควบคุมผ่านกลไกข้อยกเว้นหรือการเปลี่ยนสถานะ ให้ผู้จัดการระดับสูงตัดสิน แล้วกลับ ในเชิงลึกของ Windows รูปนี้ปรากฏซ้ำแล้วซ้ำอีก

2.3. Type 1 และ Type 2 — ความต่างอยู่ที่ตำแหน่งที่นั่ง

hypervisor แบ่งกว้าง ๆ เป็น Type 1 (bare-metal) ซึ่งรันตรงบนฮาร์ดแวร์ และ Type 2 (hosted) ซึ่งรันบน OS โฮสต์ Hyper-V คือ Type 13 VirtualBox และ VMware Workstation (เมื่อรันเดี่ยว) ถูกจัดเป็น Type 2

เมื่อได้ยิน Type 1 คนมักนึกภาพ “การตั้งค่าเฉพาะเซิร์ฟเวอร์ที่ไม่มี OS โฮสต์” แต่ Hyper-V ต่าง Windows ฝั่งโฮสต์ไม่หายไป — มัน “ย้ายบ้าน” เข้า root partition เมื่อคุณเปิด Hyper-V แล้วรีบูต hypervisor เริ่มก่อนระหว่างบูต และ Windows ฝั่งโฮสต์จึงขึ้นมาเป็น root partition บนนั้น

ความต่างระหว่าง hypervisor Type 1 กับ Type 2ใน Type 2 OS โฮสต์นั่งบนฮาร์ดแวร์ และ hypervisor กับ VM นั่งบน OS โฮสต์ ส่วนใน Type 1 Hyper-V hypervisor นั่งตรงบนฮาร์ดแวร์ และ OS โฮสต์เองเข้าไปใน root partition เหนือนั้นType 1 (Hyper-V)Type 2 (hosted)Hypervisorฮาร์ดแวร์Root partition (OS โฮสต์)VMOS โฮสต์ฮาร์ดแวร์HypervisorVM

ภาพ 4: ใน Type 2 hypervisor นั่งบน OS โฮสต์ ส่วนใน Type 1 Hyper-V ลำดับกลับด้านและ OS โฮสต์เองนั่งบนชั้นที่ต่ำลงหนึ่งขั้น

มองบนไทม์ไลน์การบูต การเปลี่ยนแปลงที่เกิดเมื่อคุณเปิดมีลักษณะดังนี้

ลำดับบูตหลังเปิด Hyper-Vหลังเปิดเครื่อง hypervisor เริ่มก่อนระหว่างบูต จากนั้น Windows ฝั่งโฮสต์ขึ้นมาเป็น root partition บนนั้น และ VM, VBS เป็นต้นเริ่มหลังจากนั้นเปิดเครื่องและเริ่มบูตHypervisor เริ่มก่อนWindows โฮสต์เริ่มเป็น root partitionVM, VBS, WSL2 เป็นต้นเริ่มบนนั้นประสบการณ์ผู้ใช้ไม่เปลี่ยน

ภาพ 5: การพลิกลำดับจบแล้วก่อนหน้าจอลงชื่อเข้าใช้ปรากฏ และ OS โฮสต์ขึ้นมาบน hypervisor ตั้งแต่ต้น

3. พาร์ติชัน — หน่วยของการแยก

3.1. บทบาทที่มีเฉพาะ root partition

พาร์ติชันคือหน่วยตรรกะของการแยกที่ hypervisor จัดให้2 แต่ไม่ใช่ทุกพาร์ติชันเท่ากัน มีสิ่งที่มีเฉพาะ root partition

  • การเข้าถึงอุปกรณ์จริงโดยตรง ไดรเวอร์อุปกรณ์สำหรับดิสก์ NIC GPU เป็นต้น อยู่ใน Windows ใน root partition ไม่ใช่ใน hypervisor Hyper-V บน Windows Server มีการตั้งค่าที่กำหนดอุปกรณ์ PCIe เฉพาะให้ child partition โดยตรง (Discrete Device Assignment) ในกรณีนั้น root ปล่อยอุปกรณ์นั้น (ไม่มีบน Windows ฝั่งไคลเอนต์)4
  • สแต็กจัดการการจำลองเสมือน VMMS (Virtual Machine Management Service) ซึ่งกำกับสร้าง เริ่ม และหยุด VM และโปรเซสเวิร์กเกอร์ราย VM (vmwp.exe) รันในยูสเซอร์โหมดใน root partition5 สิ่งเหล่านี้เป็นส่วนของฟีเจอร์จัดการ VM ของ Hyper-V จึงอาจไม่มีบนโฮสต์ที่ hypervisor รันเพียงเพื่อ VBS หรือ WSL2
  • สิทธิ์สร้าง child partition root partition สร้าง child partition ผ่าน hypercall API (อินเทอร์เฟซเรียกเข้า hypervisor)2

การออกแบบนี้มีเหตุผล หากคุณใส่ไดรเวอร์อุปกรณ์ทุกตัวเข้า hypervisor เอง hypervisor จะใหญ่ขึ้น และจำนวนบั๊กกับจุดเข้าโจมตีจะโต hypervisor จำกัดตนเองที่งานน้อยที่สุดคือการเป็นตัวกลางของ CPU และหน่วยความจำ และปล่อยการดูแลอุปกรณ์ให้ Windows ใน root partition การแบ่งบทบาทนี้คือสิ่งที่ทำให้ Hyper-V บาง

การแบ่งบทบาทระหว่าง root partition กับ child partitionroot partition ถือสแต็กจัดการการจำลองเสมือนและไดรเวอร์อุปกรณ์จริง และสร้าง child partition ผ่าน hypercall child partition โดยปกติเห็นเฉพาะอุปกรณ์เสมือน และภายใต้ Discrete Device Assignment บน Windows Server จะเข้าถึงอุปกรณ์ที่ถูกกำหนดโดยตรงRoot partitionสร้างและจัดการผ่าน hypercallChild partitionOS เกสต์ในการตั้งค่าปกติ เห็นเฉพาะอุปกรณ์เสมือนVMMS และโปรเซสเวิร์กเกอร์ไดรเวอร์อุปกรณ์จริงHypervisor (จำกัดที่ตัวกลาง CPU และหน่วยความจำ)

ภาพ 6: การวางไดรเวอร์อุปกรณ์และสแต็กจัดการฝั่ง root partition คือสิ่งที่ทำให้ hypervisor เองบาง

3.2. โลกตามที่เห็นจาก child partition

OS เกสต์ใน child partition มองไม่เห็นฮาร์ดแวร์จริงโดยตรงในการตั้งค่าอุปกรณ์เสมือนปกติ (ข้อยกเว้นเดียวคืออุปกรณ์ที่กำหนดผ่าน Discrete Device Assignment บน Windows Server ตามที่อธิบายในส่วนก่อน) สิ่งที่มันเห็นคือโปรเซสเซอร์เสมือน พื้นที่หน่วยความจำที่ดูเหมือนเป็นของตนเอง และอุปกรณ์เสมือน คำขอไปยังอุปกรณ์เสมือนถูกส่งต่อไปยัง root partition ผ่าน VMBus หรือ hypervisor2 ในทางกลับกัน การจัดสรรเวลา CPU และการแปลหน่วยความจำผ่าน SLAT จัดการโดย hypervisor โดยตรงโดยไม่ผ่าน root สิ่งที่ root เป็นตัวกลางคือ I/O อุปกรณ์ ไม่ใช่ทรัพยากรจริงทุกอย่าง

โลกตามที่เห็นจาก child partitionสิ่งที่ OS เกสต์เห็นคือโปรเซสเซอร์เสมือน พื้นที่หน่วยความจำส่วนตัวของพาร์ติชัน และอุปกรณ์เสมือน คำขอไปยังอุปกรณ์เสมือนถูกส่งต่อไปยัง root partition ผ่าน VMBus เป็นต้น เวลา CPU และการแปลหน่วยความจำจัดการโดย hypervisor โดยตรง และในการตั้งค่า Discrete Device Assignment บน Windows Server เฉพาะอุปกรณ์ที่ถูกกำหนดถูกเข้าถึงโดยตรงOS เกสต์(child)โปรเซสเซอร์เสมือนหน่วยความจำหรืออุปกรณ์?พื้นที่หน่วยความจำส่วนตัวอุปกรณ์เสมือนส่งต่อไปยัง rootผ่าน VMBus เป็นต้นCPU จริง RAM อุปกรณ์มองไม่เห็นโดยตรงDDA: อุปกรณ์ที่ถูกกำหนดWindows Server

ภาพ 7: ในการตั้งค่าอุปกรณ์เสมือนปกติ ทุกอย่างที่เกสต์เห็นคือหน้าต่างเสมือน และเส้นทางสู่ของจริงผ่านตัวกลาง เฉพาะอุปกรณ์ที่กำหนดผ่าน DDA บน Windows Server คือข้อยกเว้น

สิ่งที่สำคัญที่นี่คือ สำหรับแอปที่รันบน Windows ฝั่งโฮสต์ โครงสร้างนี้เกือบโปร่งใส การเรียก Win32 API และการจัดการ page fault ยังถูกประมวลผลโดยเคอร์เนล Windows ใน root partition ตามเดิม hypervisor แทรกเฉพาะเมื่อเจอ intercept หรือข้อยกเว้นที่ตั้งไว้

4. จากฝั่งหน่วยความจำ — การแปลที่อยู่ได้ระดับอีกหนึ่งระดับ

4.1. ที่อยู่สามชนิด

ในตอนที่ 1 ของซีรีส์หน่วยความจำ เราตามลำดับที่ที่อยู่เสมือนถูกแปลผ่านตารางเพจเป็นที่อยู่จริง (“วินาทีที่ที่อยู่เสมือนกลายเป็น RAM จริง”) ในสภาพแวดล้อมจำลองเสมือนมีระดับอีกหนึ่งระดับถูกเพิ่มใต้การแปลนั้น และมีที่อยู่สามชนิด

ที่อยู่ ตัวย่อ ผู้จัดการ
Guest virtual address GVA ตารางเพจของ OS เกสต์
Guest physical address GPA ที่อยู่ที่ OS เกสต์เชื่อว่าเป็น “จริง”
System physical address SPA Hypervisor (ตำแหน่งจริงใน RAM)

OS เกสต์แปล GVA เป็น GPA ด้วยตารางเพจของตนเอง อย่างไรก็ตาม GPA ที่เกสต์เห็นไม่ใช่ที่อยู่จริงแท้ แต่เป็นพื้นที่หน่วยความจำส่วนตัวที่อุทิศให้แต่ละพาร์ติชัน2 การแมป GPA ลงตำแหน่งจริงใน RAM (SPA) คืองานของ hypervisor

4.2. SLAT — การแปลสองระดับในฮาร์ดแวร์

หากคุณทำการแปลระดับที่สองนี้ในซอฟต์แวร์อย่างเดียว hypervisor ต้องติดตามทุกการอัปเดตตารางเพจของเกสต์ทีละรายการ ซึ่งไม่สมจริงจากมุมมองประสิทธิภาพ ดังนั้น CPU จึงจัดกลไกที่เดินตารางการแปลระดับที่สองในฮาร์ดแวร์ นั่นคือ SLAT (Second Level Address Translation) Intel EPT (Extended Page Tables) และ AMD RVI คือการอิมพลีเมนต์ Hyper-V ปัจจุบันต้องการโปรเซสเซอร์ 64 บิตที่รองรับ SLAT4

การแปลที่อยู่สองระดับผ่าน SLATที่อยู่เสมือนของเกสต์ถูกแปลเป็นที่อยู่จริงของเกสต์โดยตารางเพจของ OS เกสต์ จากนั้นถูกแปลต่อเป็นที่อยู่จริงของระบบโดย SLAT ซึ่ง hypervisor จัดการ และถึง RAM จริงตารางเพจของ OS เกสต์SLAT (ตารางแปล EPT/RVI)ที่อยู่เสมือนเกสต์ (GVA)ที่อยู่จริงเกสต์ (GPA)ที่อยู่จริงระบบ (SPA)RAM จริงชั้นที่เกสต์เพียงเชื่อว่าเป็นจริง

ภาพ 8: ตารางการแปลอีกตารางที่ hypervisor จัดการ นั่งใต้ตารางเพจของเกสต์ และ CPU เดินทั้งคู่ในฮาร์ดแวร์

SLAT ไม่ใช่คุณสมบัติที่มีอยู่เพียงเพื่อประสิทธิภาพการรัน VM VBS ที่เราจะเห็นในตอนที่ 2 ใช้คุณสมบัติที่ “คุณมีตารางแปล SLAT ต่างกันต่อระดับสิทธิ์” เป็นวัสดุสำหรับขอบเขตความปลอดภัย เหตุที่คุณสร้างหน่วยความจำที่แม้เคอร์เนลก็มองไม่เห็นได้ คือเพราะ hypervisor ถือการแปลระดับที่สองนี้ นี่กลายเป็นเส้นผ่านของทั้งซีรีส์ ดังนั้นจำไว้ข้อเดียว: “เจ้าของตารางการแปลคือ hypervisor”

5. จากฝั่ง I/O อุปกรณ์ — VMBus และอุปกรณ์สองชนิด

5.1. ข้อจำกัดของอุปกรณ์จำลอง

วิธีคลาสสิกในการแสดงอุปกรณ์ให้ child partition คือการเลียนแบบฮาร์ดแวร์จริงทั้งก้อน (เช่น ตัวควบคุม IDE เก่า) ในซอฟต์แวร์ ความเข้ากันได้สูงเพราะไดรเวอร์ในกล่องของ OS เกสต์ทำงานตามเดิม แต่ VM Exit เกิดทุกครั้งที่เกสต์เจอพอร์ต I/O และประสิทธิภาพไม่ขยาย

ทำไม I/O ไปยังอุปกรณ์จำลองจึงช้าทุกครั้งที่เกสต์ทำงานกับพอร์ต I/O การควบคุมโอนไปฝั่ง hypervisor ผ่าน VM Exit อุปกรณ์ถูกเลียนแบบในซอฟต์แวร์ และเกสต์ถูกส่งกลับ ดังนั้นการไปกลับวนซ้ำและช้าวนซ้ำตอนทำงานพอร์ตถัดไปเกสต์ทำงานกับพอร์ต I/Oเกิด VM Exitอุปกรณ์ถูกจำลองในซอฟต์แวร์กลับสู่เกสต์ผ่าน VM Entry

ภาพ 9: การไปกลับนี้รันหลายครั้งเบื้องหลังการเข้าถึงดิสก์ครั้งเดียว และราคาของความเข้ากันได้ถูกจ่ายด้วยประสิทธิภาพ

5.2. VMBus และ VSP/VSC — เส้นทางเร็วที่ออกแบบเพื่อการจำลองเสมือน

ดังนั้น Hyper-V จึงมีกลไก “อุปกรณ์สังเคราะห์” ที่ออกแบบโดยสมมติการจำลองเสมือน มีสามตัวละคร2

  • VMBus: ช่องสื่อสารตรรกะระหว่างพาร์ติชัน ให้การสื่อสารระหว่างพาร์ติชันความเร็วสูงที่ใช้หน่วยความจำร่วม3
  • VSP (Virtualization Service Provider): บริการที่อยู่ฝั่ง root partition รับคำขออุปกรณ์จาก child และเชื่อมไปยังสแต็กอุปกรณ์/แบ็กเอนด์ฝั่ง root คำขออาจถึงอุปกรณ์จริง หรือถูกจัดการโดยแบ็กเอนด์ฝั่งโฮสต์ เช่น ดิสก์เสมือนหรือสวิตช์เสมือน
  • VSC (Virtualization Service Consumer): ไดรเวอร์อุปกรณ์สังเคราะห์ที่เข้าไปใน OS เกสต์ฝั่ง child partition ส่งคำขอไปยัง VSP ผ่าน VMBus

เอาคำขอสตอเรจของ OS เกสต์เป็นตัวอย่าง ลำดับมีลักษณะดังนี้ WriteFile ของแอปเกสต์ลงสแต็ก I/O ของเคอร์เนลเกสต์ และที่ก้นสุด ถึง VSC (แทนฮาร์ดแวร์จริง) VSC วางคำขอบน VMBus และส่งให้ VSP ใน root partition และ VSP ไหลคำขอเข้าสแต็ก I/O ฝั่ง root ในการตั้งค่าดิสก์เสมือน (VHDX) การเขียนนี้ถูกจัดการเป็นการเขียนไปยังไฟล์ VHDX บนโฮสต์ และในที่สุดถึงดิสก์จริง แนวทางนี้เรียกว่า Enlightened I/O (I/O ที่รู้ตัวเรื่องการจำลองเสมือน) และเพิ่มประสิทธิภาพด้วยการข้ามชั้นจำลองอุปกรณ์2

เส้นทาง I/O ของอุปกรณ์สังเคราะห์คำขอ I/O จากแอปใน child partition ถึง VSC ผ่านเคอร์เนลเกสต์ ข้าม VMBus ไปยัง VSP ใน root partition และบนสแต็ก I/O ฝั่ง root ที่ VSP เชื่อมเข้าไป อาจถึงอุปกรณ์จริงผ่านไดรเวอร์อุปกรณ์จริง หรือถูกจัดการโดยแบ็กเอนด์ฝั่งโฮสต์ เช่น ดิสก์เสมือนหรือสวิตช์เสมือนVMBusแอปใน child partitionสแต็ก I/O ของเคอร์เนลเกสต์VSC (ไดรเวอร์อุปกรณ์สังเคราะห์)VSP (ฝั่ง root partition)สแต็ก I/O ฝั่ง rootไดรเวอร์อุปกรณ์จริงแบ็กเอนด์ฝั่งโฮสต์ (ดิสก์เสมือน สวิตช์เสมือน เป็นต้น)อุปกรณ์จริง

ภาพ 10: ด้วยอุปกรณ์สังเคราะห์ I/O ของเกสต์ข้ามไปยัง root partition ผ่าน VMBus และผ่านสแต็กฝั่ง root ถึงอุปกรณ์จริงหรือแบ็กเอนด์ฝั่งโฮสต์

กล่าวคือ ว่า I/O ดิสก์หรือเครือข่ายของ VM จะเร็วหรือไม่ ไม่ได้ขึ้นกับฝั่งเกสต์อย่างเดียว แต่ยังขึ้นกับสถานะของสแต็ก I/O และไดรเวอร์อุปกรณ์ฝั่ง root partition เหตุที่การสังเกตฝั่งโฮสต์ขาดไม่ได้เมื่อคุณสอบสวนปัญหาประสิทธิภาพของ VM คือเพราะเส้นทางจริงผ่านโฮสต์

อุปกรณ์จำลองเทียบกับอุปกรณ์สังเคราะห์อุปกรณ์จำลองเลียนแบบฮาร์ดแวร์จริงจึงให้ไดรเวอร์เกสต์ในกล่องทำงานแต่ช้า อุปกรณ์สังเคราะห์เป็นไดรเวอร์ที่สร้างเฉพาะโดยสมมติ VMBus และเร็วอุปกรณ์ที่แสดงให้ child partitionอุปกรณ์จำลองอุปกรณ์สังเคราะห์จำลองฮาร์ดแวร์จริง ความเข้ากันได้มาก่อนต้องแทรกทุก I/O ช้าออกแบบรอบ VMBus เร็วต้องการไดรเวอร์ที่เข้ากันในเกสต์

ภาพ 11: ในอุปกรณ์เสมือนสองชนิด อุปกรณ์จำลองแบกความเข้ากันได้ทันทีหลังติดตั้ง OS และอุปกรณ์สังเคราะห์แบกประสิทธิภาพในการใช้ประจำวัน

6. ทำไมเรื่องนี้ไม่ใช่เรื่องของคนอื่น แม้คุณไม่เคยใช้ VM

โครงสร้างจนถึงตอนนี้อาจดูเหมือน “เรื่องสำหรับคนที่ยืน VM” อย่างไรก็ตาม ตามที่กล่าวตอนต้น บน Windows ปัจจุบัน hypervisor เป็นส่วนของชีวิตประจำวัน

  • ความปลอดภัยบนฐานการจำลองเสมือน (VBS) ใช้ Windows hypervisor สร้างสภาพแวดล้อมที่แยกและบรรจุฟีเจอร์ความปลอดภัยที่นั่น บน Windows 11 เปิดตามค่าเริ่มต้นเมื่อเข้าเงื่อนไข เช่น การติดตั้งใหม่บนฮาร์ดแวร์ที่รองรับ1 รายละเอียดอยู่ในตอนที่ 2
  • WSL2 รันเคอร์เนล Linux จริงใน utility VM น้ำหนักเบา6
  • Windows Sandbox สภาพแวดล้อม Windows ใช้แล้วทิ้งที่แยกด้วย hypervisor7 ทั้งคู่ครอบคลุมในตอนที่ 3
ฟีเจอร์ประจำวันที่นั่งบน hypervisor เดียวกันไม่เพียง VM ของ Hyper-V แต่ยังมี VBS ซึ่งเปิดตามค่าเริ่มต้นบนอุปกรณ์ที่เข้าเงื่อนไข เช่น การติดตั้งใหม่ รวมถึง WSL2 และ Windows Sandbox ทั้งหมดสร้างบน Windows hypervisor เดียวกันWindows hypervisorVM ของ Hyper-VVBS (เปิดตามค่าเริ่มต้นตอนติดตั้งใหม่และคล้ายกัน)WSL2Windows Sandboxเหตุที่รันแม้บนเครื่องที่ไม่เคยใช้ VM

ภาพ 12: มีรากฐานเดียว และแผนภาพนี้คือจุดที่สมมติฐาน “การจำลองเสมือนเป็นเรื่องของคนที่ใช้ VM” พัง

อีกเรื่องหนึ่งที่คนมักเหยียบในทางปฏิบัติคือ การอยู่ร่วมกับซอฟต์แวร์จำลองเสมือนของบุคคลที่สาม เพราะ hypervisor ใช้ส่วนขยายการจำลองเสมือนของ CPU แบบเฉพาะ ในสภาพแวดล้อมที่ Windows hypervisor กำลังรัน VirtualBox เป็นต้น รันแบบดั้งเดิมไม่ได้ (แบบที่ใช้ส่วนขยายการจำลองเสมือนของ CPU เอง) สำหรับเรื่องนี้ มี API สาธารณะชื่อ Windows Hypervisor Platform และสแต็กจำลองเสมือนของบุคคลที่สามสามารถรันโดยนั่งบน Windows hypervisor8 VirtualBox/VMware ปัจจุบันอยู่ร่วมกับ WSL2 ได้ด้วยกลไกนี้ แต่ความต่างด้านประสิทธิภาพและฟีเจอร์ที่มากับการสลับโหมดบางครั้งถูกสังเกตว่า “หลังเปิด Hyper-V (หรือ VBS) ซอฟต์แวร์จำลองเสมือนเริ่มทำงานต่างไป”

ใครเป็นเจ้าของส่วนขยายการจำลองเสมือนของ CPU และเส้นทางของซอฟต์แวร์จำลองเสมือนบุคคลที่สามขณะที่ Windows hypervisor กำลังรัน มันเป็นเจ้าของส่วนขยายการจำลองเสมือนของ CPU แบบเฉพาะ ซอฟต์แวร์จำลองเสมือนบุคคลที่สามที่รองรับ WHP รันบนนั้นผ่าน Windows Hypervisor Platform ส่วนการอิมพลีเมนต์ที่ไม่รองรับ WHP รันไม่ได้หรือถูกจำกัดฟีเจอร์ไม่ใช่ส่วนขยายจำลองเสมือนของ CPU (VT-x/AMD-V)Windows hypervisor กำลังรัน?ซอฟต์แวร์บุคคลที่สามใช้โดยตรงได้hypervisor ใช้แบบเฉพาะWindows Hypervisor Platformซอฟต์แวร์บุคคลที่สามที่รองรับ WHP รันบนนั้นการอิมพลีเมนต์ที่ไม่รองรับรันไม่ได้หรือถูกจำกัด

ภาพ 13: มีเจ้าของส่วนขยายการจำลองเสมือนเพียงหนึ่ง และซอฟต์แวร์บุคคลที่สามเดียวที่อยู่ร่วมได้ขณะที่ hypervisor กำลังรันคือซอฟต์แวร์ที่รองรับ API สาธารณะ (WHP)

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

คุณยืนยันบนเครื่องของตนเองได้ว่า hypervisor กำลังรันหรือไม่

ก่อนอื่น การตรวจที่รันได้โดยไม่ต้องมีสิทธิ์ผู้ดูแลระบบ

# Whether we are running on top of a hypervisor
(Get-CimInstance Win32_ComputerSystem).HypervisorPresent

# VBS status (same source as "Virtualization-based security" in msinfo32)
Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
    -ClassName Win32_DeviceGuard |
    Select-Object VirtualizationBasedSecurityStatus

VirtualizationBasedSecurityStatus คืนสถานะการรันของ VBS เป็นตัวเลข (2 คือ “Running”)9

ข้อควรระวังหนึ่ง HypervisorPresent บอกเพียง “เรากำลังรันบน hypervisor หรือไม่” ไม่แยกว่าเป็น root หรือ child หากคุณรันบน Windows ใน VM มันยังคืน True ในฐานะ child partition หากเป็น True บน Windows บนเครื่องจริง Windows นั้นอยู่ใน root partition — คุณอ่านร่วมกับสภาพแวดล้อมการรัน

ถัดไป ของคลาสสิกจาก Command Prompt

systeminfo

ดู “Hyper-V Requirements” ท้ายเอาต์พุต บนเครื่องที่ hypervisor ยังไม่รัน ข้อกำหนดแต่ละข้อ — การรองรับ SLAT ว่าส่วนขยายการจำลองเสมือนเปิดหรือไม่ เป็นต้น — ถูกแสดงรายการ บนเครื่องที่ hypervisor กำลังรันแล้ว แทนข้อกำหนดคุณได้บรรทัดเดียว: “A hypervisor has been detected. Features required for Hyper-V will not be displayed.”4 บรรทัดนั้นจึงเป็นข้อความว่า Windows ของคุณกำลังรันอยู่บน hypervisor บางตัว เช่นเดียวกับ HypervisorPresent คุณต้องอ่านว่า “ใน root partition” บนเครื่องจริง หรือ “ในฐานะ child partition” ใน VM

แม้ข้อกำหนดทุกข้อของ systeminfo เป็น “Yes” นั่นหมายความเพียงว่าฝั่งฮาร์ดแวร์พร้อม ฟีเจอร์ Hyper-V เองมีบนรุ่น Pro, Enterprise และ Education และไม่มีบน Home10

ใน GUI ให้ตรวจแถว “Virtualization-based security” ใต้ “System Summary” ใน msinfo32 โปรดทราบว่า “Virtualization: Enabled” ในแผง CPU ของ Task Manager แสดงเพียงว่าส่วนขยายการจำลองเสมือนเปิดในเฟิร์มแวร์หรือไม่ ซึ่งเป็นข้อมูลแยกจากว่า hypervisor กำลังรันหรือไม่

วิธีตรวจว่า hypervisor กำลังรันหาก systeminfo บอกว่าตรวจพบ hypervisor คุณกำลังรันบน hypervisor (ใน root partition บนเครื่องจริง) หากรายการ Hyper-V Requirements ปรากฏ มันยังไม่รัน จึงตรวจทุกข้อกำหนด เช่น SLAT, VM Monitor Mode Extensions และ DEP แต่ Yes ทั้งหมดหมายถึงฝั่งฮาร์ดแวร์พร้อม และฟีเจอร์ Hyper-V ยังมีข้อกำหนดรุ่นDetectedListedทั้งหมด Yesบางข้อ Noรัน systeminfoช่องข้อกำหนด?Hypervisor กำลังรันใน rootบนเครื่องจริงยังไม่รันข้อกำหนดทั้งหมด Yes?ฝั่งฮาร์ดแวร์พร้อมต้องใช้ Pro / Ent / Eduตรวจรายการ UEFI/BIOS

ภาพ 14: ช่อง “Hyper-V Requirements” ใน systeminfo ทำหน้าที่ทั้งตรวจสถานะการรันและตรวจข้อกำหนดเบื้องต้น

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

8.1. “เราไม่ได้เปิด Hyper-V ดังนั้นการจำลองเสมือนไม่เกี่ยวกับเครื่องของเรา”

แม้คุณไม่ได้เปิดฟีเจอร์ Hyper-V (เครื่องมือจัดการและสภาพแวดล้อมรัน VM) Windows hypervisor กำลังรันหาก VBS เปิด เมื่อคุณสอบสวนปัญหาความเข้ากันได้ของไดรเวอร์ การทดสอบประสิทธิภาพ หรือปัญหาซอฟต์แวร์จำลองเสมือนของบุคคลที่สาม ให้ตรวจ HypervisorPresent และสถานะการรันของ VBS — ไม่ใช่ว่าฟีเจอร์เปิดหรือไม่

8.2. “Task Manager บอก ‘Virtualization: Enabled’ ดังนั้น Hyper-V กำลังรัน”

การแสดงนั้นเกี่ยวกับการตั้งค่าเฟิร์มแวร์ (ว่า VT-x/AMD-V พร้อมใช้หรือไม่) ตัดสินสถานะการรันของ hypervisor จาก “A hypervisor has been detected” ใน systeminfo ในทางกลับกัน หาก Task Manager บอก “Disabled” คุณเปิด Hyper-V หรือ WSL2 ก็ไม่ได้เช่นกัน จึงตรวจการตั้งค่า UEFI/BIOS ก่อน

สามการตรวจที่สับสนง่ายช่อง Virtualization ของ Task Manager แสดงการตั้งค่าเฟิร์มแวร์ รายการ Windows Features แสดงสถานะการติดตั้ง และ systeminfo หรือ HypervisorPresent แสดงสถานะการรัน แต่ละอันตอบคำถามคนละข้อคำถามใด?เฟิร์มแวร์หรือ Windows?hypervisor กำลังรัน?ส่วนขยายเฟิร์มแวร์?ฟีเจอร์ Hyper-V เปิด?แผง CPU ของ Task ManagerUI ของ Windows FeaturessysteminfoHypervisorPresent

ภาพ 15: นี่คือสามคำถามอิสระ และการอนุมานอีกสองข้อจากการแสดงใดข้อหนึ่งคือการอ่านผิด

8.3. “หาก VM ช้า นั่นคือปัญหาของ OS เกสต์”

I/O ของอุปกรณ์สังเคราะห์ข้าม VMBus ไปยัง VSP ใน root partition และผ่านสแต็กอุปกรณ์/แบ็กเอนด์ฝั่ง root (ไดรเวอร์จริง บวกการประมวลผลสวิตช์เสมือนและดิสก์เสมือน) หากคุณดูเฉพาะตัวนับในเกสต์ คุณจะไม่พบคอขวดที่นั่งในสตอเรจฝั่งโฮสต์หรือ NIC หลักสำหรับปัญหาประสิทธิภาพของ VM คือสังเกตจากทั้งสองฝั่ง: เกสต์และโฮสต์ (root partition)

9. สรุป

  • เมื่อเปิด Hyper-V hypervisor รันตรงบนฮาร์ดแวร์ และ Windows ฝั่งโฮสต์รันเป็น root partition2
  • เคอร์เนล OS เกสต์ยังรันที่ริง 0 และเฉพาะงานที่ตั้งเป็น intercept บวกข้อยกเว้น ถูกส่งให้ hypervisor ผ่าน VM Exit การเข้าถึงหน่วยความจำปกติผ่านการแปล SLAT
  • มีเพียง root partition ที่ถือไดรเวอร์อุปกรณ์จริงและสแต็กจัดการการจำลองเสมือน และสร้าง child partition ผ่าน hypercall2
  • หน่วยความจำกลายเป็นการแปลสองระดับ GVA→GPA→SPA และระดับที่สองจัดการในฮาร์ดแวร์โดย SLAT (EPT/RVI) Hyper-V ปัจจุบันต้องการ SLAT4
  • I/O อุปกรณ์ถูกครอบด้วยเส้นทางอุปกรณ์สังเคราะห์ VSC→VMBus→VSP และประสิทธิภาพยังขึ้นกับสแต็ก I/O ฝั่งโฮสต์2
  • บน Windows 11 เพราะ VBS เปิดตามค่าเริ่มต้นบนอุปกรณ์ที่เข้าเงื่อนไข เช่น การติดตั้งใหม่ จึงไม่แปลกที่ hypervisor จะรันแม้บนเครื่องที่ไม่เคยใช้ VM1 คุณยืนยันสถานะการรันด้วย HypervisorPresent และ systeminfo ได้

ภาพรวมของตอนที่ 1 ย่อลงในแผนภาพเดียวนี้

ภาพรวมของตอนที่ 1hypervisor นั่งใต้ root partition และ child partition CPU ถูกจัดสรรด้วยการจัดตารางโปรเซสเซอร์เสมือน (VM Exit เฉพาะตอน intercept และข้อยกเว้นที่ตั้ง) หน่วยความจำถูกเป็นตัวกลางด้วยการแปล SLAT สองระดับ I/O อุปกรณ์สังเคราะห์ถูกส่งต่อผ่าน VMBus และจัดการโดย VSP ของ root partition และอุปกรณ์จำลองกับ Discrete Device Assignment มีเส้นทางอื่นRoot + child partitionHypervisorCPU: จัดตาราง VPหน่วยความจำ: SLATVM Exit ตอน interceptการแปลสองระดับอุปกรณ์: I/O ผ่าน VMBusVSP ฝั่ง root จัดการจำลอง / DDA: อื่น

ภาพ 16: การจัดตาราง CPU และการแปลหน่วยความจำจัดการโดย hypervisor โดยตรง (VM Exit เฉพาะตอนแทรก) และ I/O อุปกรณ์สังเคราะห์ถูกเป็นตัวกลางโดย root partition (VSP) ฝั่งไกลของ VMBus

ต่อในตอนที่ 2 “หน่วยความจำที่แม้เคอร์เนลก็มองไม่เห็น — VBS, HVCI และ Credential Guard

เราหยิบเส้นผ่านของบทความนี้ — ว่า hypervisor ถือตารางแปล SLAT — แล้วตามว่า Windows สร้าง “หน่วยความจำที่ทั้งผู้ดูแลระบบและเคอร์เนลอ่านไม่ได้” อย่างไร

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

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

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

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

  1. Microsoft Learn, Silicon assisted security. ว่าด้วย VBS ที่ใช้การจำลองเสมือนของฮาร์ดแวร์แยก Secure Kernel จาก OS ธรรมดา และว่า VBS กับ HVCI เปิดตามค่าเริ่มต้นบนอุปกรณ์ที่เข้าข้อกำหนดเบื้องต้นตอนติดตั้ง Windows 11 ใหม่  2 3

  2. Microsoft Learn, Hyper-V Architecture. ว่าด้วย hypervisor ที่จัดพาร์ติชันเป็นหน่วยของการแยก root partition ที่สร้าง child partition ผ่าน hypercall API พาร์ติชันที่รันในพื้นที่หน่วยความจำเสมือนส่วนตัวโดยไม่เข้าถึงโปรเซสเซอร์จริงโดยตรง บทบาทของ VMBus, VSP, VSC และ Enlightened I/O และส่วนขยายการจำลองเสมือนของฮาร์ดแวร์ (Intel VT/AMD-V) เป็นข้อกำหนด  2 3 4 5 6 7 8 9 10 11 12

  3. Microsoft Learn, Hyper-V architecture (Performance Tuning). ว่าด้วย Hyper-V เป็น hypervisor Type 1 root partition เป็นเจ้าของอุปกรณ์ I/O จริง และ VMBus ให้การสื่อสารระหว่างพาร์ติชันประสิทธิภาพสูงที่ใช้หน่วยความจำร่วม  2

  4. Microsoft Learn, System requirements for Hyper-V on Windows and Windows Server. ว่าด้วยโปรเซสเซอร์ 64 บิตที่รองรับ SLAT และ VM Monitor Mode Extensions เป็นข้อกำหนด ความสามารถยืนยันว่าเข้าข้อกำหนดในช่อง “Hyper-V Requirements” ของ systeminfo “A hypervisor has been detected” ถูกแสดงขณะที่ hypervisor กำลังรัน และ Discrete Device Assignment สามารถกำหนดอุปกรณ์เฉพาะให้ child partition โดยตรงได้  2 3 4

  5. Microsoft Learn, Appendix B: Hyper-V Architecture and Feature Overview. ว่าด้วย VMMS (Virtual Machine Management Service) ที่จัดการสถานะของ VM ใน child partition และโปรเซสเวิร์กเกอร์ (VMWP) ที่เริ่มในยูสเซอร์โหมดใน root partition สำหรับแต่ละ VM 

  6. Microsoft Learn, Comparing WSL Versions. ว่าด้วย WSL2 ที่รันเคอร์เนล Linux จริงใน utility VM น้ำหนักเบา และข้อควรระวังเรื่องการใช้ร่วมกับ VMware และ VirtualBox ปัจจุบัน 

  7. Microsoft Learn, Windows Sandbox architecture. ว่าด้วย Windows Sandbox เป็นสภาพแวดล้อม Windows น้ำหนักเบาที่รวมเทคโนโลยีคอนเทนเนอร์กับการแยกโดย hypervisor 

  8. Microsoft Learn, Windows Hypervisor Platform. ว่าด้วย API ยูสเซอร์โหมดที่จัดให้เพื่อให้สแต็กจำลองเสมือนของบุคคลที่สามสร้างและจัดการพาร์ติชันบน Windows hypervisor ได้ 

  9. Microsoft Learn, Enable Hotpatch for Azure Arc-enabled servers. ว่าด้วยการยืนยันสถานะการรันของ VBS (virtual secure mode) ผ่าน VirtualizationBasedSecurityStatus บนคลาส Win32_DeviceGuard 

  10. Microsoft Learn, Install Hyper-V. ว่าด้วย Hyper-V เปิดได้บน Windows 10/11 Pro หรือ Enterprise เป็นต้น และติดตั้งบนรุ่น Home ไม่ได้ 

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

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

ทำไม WSL2 และ Windows Sandbox จึงเริ่มในไม่กี่วินาทีและรู้สึกเบา? บทความนี้อธิบายกลไก ตั้งแต่ dynamic base image และ direct map ไปจนถึงกา...

เชิงลึกของการจำลองเสมือนบน 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 ได้แก่ การ...

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

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

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

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

เมื่อเปิด Hyper-V แล้ว Windows ฝั่งโฮสต์รันอยู่ที่ไหนจริง ๆ
hypervisor ควบคุมโดยตรงว่า CPU จริงและหน่วยความจำถูกจัดสรรอย่างไร และ Windows ฝั่งโฮสต์รันในพาร์ติชันพิเศษที่เรียกว่า root partition การควบคุมอุปกรณ์จริงโดยปกติจัดการด้วยไดรเวอร์ฝั่ง root partition root partition ถือไดรเวอร์อุปกรณ์และสแต็กจัดการการจำลองเสมือน แต่ความเป็นเจ้าของ CPU จริงเป็นของ hypervisor
คำว่า "Virtualization: Enabled" ใน Task Manager หมายความว่า Hyper-V กำลังรันอยู่หรือไม่
ไม่ การแสดงนั้นบอกว่าส่วนขยายการจำลองเสมือนของ CPU (Intel VT-x/AMD-V) ถูกเปิดในเฟิร์มแวร์หรือไม่ หากจะดูว่า hypervisor กำลังรันจริงหรือไม่ ให้ดู "A hypervisor has been detected" ใน systeminfo หรือตรวจ Win32_ComputerSystem.HypervisorPresent
ทำไม hypervisor ถึงรันอยู่ทั้งที่ฉันไม่เคยสร้าง VM
บน Windows 11 ความปลอดภัยบนฐานการจำลองเสมือน (VBS) เปิดตามค่าเริ่มต้นบนอุปกรณ์ที่เข้าเงื่อนไข — เช่น การติดตั้งใหม่บนฮาร์ดแวร์ที่รองรับ — และ VBS สร้างบน Windows hypervisor เช่นเดียวกันหากคุณใช้ WSL2 หรือ Windows Sandbox จึงไม่แปลกที่ hypervisor จะรันโดยไม่เกี่ยวกับใครใช้ VM
SLAT คืออะไร และทำไม Hyper-V จึงต้องการ
SLAT (Second Level Address Translation) คือกลไกที่ CPU แปลที่อยู่จริงของเกสต์เป็นที่อยู่จริงแท้ Intel EPT และ AMD RVI คือการอิมพลีเมนต์ หากไม่มี hypervisor จะต้องรักษาตารางการแปลในซอฟต์แวร์ ซึ่งไม่สมจริงจากมุมมองประสิทธิภาพ ดังนั้น Hyper-V ปัจจุบันถือว่าเป็นข้อกำหนดแข็ง
หากเปิด Hyper-V แล้ว VirtualBox และ VMware จะหยุดทำงานหรือไม่
เพราะ hypervisor ใช้ส่วนขยายการจำลองเสมือนของ CPU แบบเฉพาะ hypervisor ของบุคคลที่สามจึงรันแบบดั้งเดิมไม่ได้ อย่างไรก็ตาม VirtualBox และ VMware ปัจจุบันมีโหมดที่รันบน Windows hypervisor (ผ่าน Windows Hypervisor Platform) ดังนั้นรุ่นล่าสุดของแต่ละตัวสามารถอยู่ร่วมกันได้

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

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

Go Komura

ผู้แทนของ KomuraSoft LLC

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

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

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